From c680d67aed3d0f58a914d44d3f039324763289cc Mon Sep 17 00:00:00 2001 From: Goren G Date: Tue, 28 Feb 2023 21:25:40 +0800 Subject: [PATCH] feat: add shell to check for update (#199) Signed-off-by: gythialy --- .gitignore | 1 + Dockerfile | 51 ++++++++++++------------ scripts/check-update.sh | 86 +++++++++++++++++++++++++++++++++++++++++ scripts/clean.sh | 19 +++++++++ 4 files changed, 132 insertions(+), 25 deletions(-) create mode 100755 scripts/check-update.sh create mode 100755 scripts/clean.sh diff --git a/.gitignore b/.gitignore index 06238d1..127efb3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /.vscode/* +tmp/** \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 3eaa4b3..3d538f7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,15 +23,15 @@ RUN \ go version # install goreleaser -ARG GORELEASER_VERSION=1.15.2 +ARG GORELEASER_VERSION=v1.15.2 ARG GORELEASER_SHA=1730c4455756d80725c36752e76a0e200ab26a8a62b6cdaabff002573c382aa9 RUN \ - wget https://github.com/goreleaser/goreleaser/releases/download/v$GORELEASER_VERSION/checksums.txt.pem && \ + wget https://github.com/goreleaser/goreleaser/releases/download/$GORELEASER_VERSION/checksums.txt.pem && \ GORELEASER_DOWNLOAD_FILE=goreleaser_Linux_x86_64.tar.gz && \ - GORELEASER_DOWNLOAD_URL=https://github.com/goreleaser/goreleaser/releases/download/v${GORELEASER_VERSION}/${GORELEASER_DOWNLOAD_FILE} && \ + GORELEASER_DOWNLOAD_URL=https://github.com/goreleaser/goreleaser/releases/download/${GORELEASER_VERSION}/${GORELEASER_DOWNLOAD_FILE} && \ # COSIGN_EXPERIMENTAL=1 cosign verify-blob --cert checksums.txt.pem \ - # --signature https://github.com/goreleaser/goreleaser/releases/download/v$GORELEASER_VERSION/checksums.txt.sig \ - # https://github.com/goreleaser/goreleaser/releases/download/v$GORELEASER_VERSION/checksums.txt && \ + # --signature https://github.com/goreleaser/goreleaser/releases/download/$GORELEASER_VERSION/checksums.txt.sig \ + # https://github.com/goreleaser/goreleaser/releases/download/$GORELEASER_VERSION/checksums.txt && \ wget ${GORELEASER_DOWNLOAD_URL} && \ echo "$GORELEASER_SHA $GORELEASER_DOWNLOAD_FILE" | sha256sum -c - || exit 1 && \ tar -xzf $GORELEASER_DOWNLOAD_FILE -C /usr/bin/ goreleaser && \ @@ -40,11 +40,11 @@ RUN \ goreleaser -v # install ko -ARG KO_VERSION=0.12.0 +ARG KO_VERSION=v0.12.0 ARG KO_SHA=05aa77182fa7c55386bd2a210fd41298542726f33bbfc9c549add3a66f7b90ad RUN \ - KO_DOWNLOAD_FILE=ko_${KO_VERSION}_Linux_x86_64.tar.gz && \ - KO_DOWNLOAD_URL=https://github.com/ko-build/ko/releases/download/v${KO_VERSION}/${KO_DOWNLOAD_FILE} && \ + KO_DOWNLOAD_FILE=ko_${KO_VERSION#v}_Linux_x86_64.tar.gz && \ + KO_DOWNLOAD_URL=https://github.com/ko-build/ko/releases/download/${KO_VERSION}/${KO_DOWNLOAD_FILE} && \ wget ${KO_DOWNLOAD_URL} && \ echo "$KO_SHA $KO_DOWNLOAD_FILE" | sha256sum -c - || exit 1 && \ tar -xzf $KO_DOWNLOAD_FILE -C /usr/bin/ ko && \ @@ -52,11 +52,11 @@ RUN \ ko version # install git-chglog -ARG GIT_CHGLOG_VERSION=0.15.2 -ARG GIT_CHGLOG_SHA=e556946fa1244282056ecb5c8968dc5e8d91fe5fcbc0813c2bf91a80f8bfb5f9 +ARG GIT_CHGLOG_VERSION=v0.15.4 +ARG GIT_CHGLOG_SHA=03cbeedbd1317289295e75016fa0acd26baeb2fc7810ed287361dd9bd8bc33a8 RUN \ GIT_CHGLOG_DOWNLOAD_FILE=git-chglog_linux_amd64.tar.gz && \ - GIT_CHGLOG_DOWNLOAD_URL=https://github.com/git-chglog/git-chglog/releases/download/v${GIT_CHGLOG_VERSION}/git-chglog_${GIT_CHGLOG_VERSION}_linux_amd64.tar.gz && \ + GIT_CHGLOG_DOWNLOAD_URL=https://github.com/git-chglog/git-chglog/releases/download/${GIT_CHGLOG_VERSION}/git-chglog_${GIT_CHGLOG_VERSION#v}_linux_amd64.tar.gz && \ wget -O ${GIT_CHGLOG_DOWNLOAD_FILE} ${GIT_CHGLOG_DOWNLOAD_URL} && \ echo "$GIT_CHGLOG_SHA $GIT_CHGLOG_DOWNLOAD_FILE" | sha256sum -c - || exit 1 && \ tar -xzf $GIT_CHGLOG_DOWNLOAD_FILE -C /usr/bin/ git-chglog && \ @@ -65,33 +65,34 @@ RUN \ chmod +x /entrypoint.sh # install Docker CLI -ARG DOCKER_CLI_VERSION=20.10.8 -ARG DOCKER_CLI_SHA=7ea11ecb100fdc085dbfd9ab1ff380e7f99733c890ed815510a5952e5d6dd7e0 +# docker no longer provides checksum +ARG DOCKER_CLI_VERSION=23.0.1 +# ARG DOCKER_CLI_SHA=7ea11ecb100fdc085dbfd9ab1ff380e7f99733c890ed815510a5952e5d6dd7e0 RUN \ DOCKER_CLI_DOWNLOAD_FILE=docker-${DOCKER_CLI_VERSION}.tgz && \ curl -fsSLO https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_CLI_VERSION}.tgz && \ - echo "$DOCKER_CLI_SHA $DOCKER_CLI_DOWNLOAD_FILE" | sha256sum -c - || exit 1 && \ - tar xzvf docker-${DOCKER_CLI_VERSION}.tgz --strip 1 -C /usr/local/bin docker/docker && \ - rm docker-${DOCKER_CLI_VERSION}.tgz && \ + # echo "$DOCKER_CLI_SHA $DOCKER_CLI_DOWNLOAD_FILE" | sha256sum -c - || exit 1 && \ + tar xzvf ${DOCKER_CLI_DOWNLOAD_FILE} --strip 1 -C /usr/local/bin docker/docker && \ + rm ${DOCKER_CLI_DOWNLOAD_FILE} && \ docker -v # install Buildx -ARG BUILDX_VERSION=0.10.2 -ARG BUILDX_SHA=ee5a5e3ebf5e5c73ac840993720bd1e72c4beb3b4ee9e85e2d6b4364cac87d89 +ARG BUILDX_VERSION=v0.10.3 +ARG BUILDX_SHA=91f260c9879f8dc8b78912409f8d9f16a3429d457dbcfa0a67169f74837a9290 RUN \ - BUILDX_DOWNLOAD_FILE=buildx-v${BUILDX_VERSION}.linux-amd64 && \ - wget https://github.com/docker/buildx/releases/download/v${BUILDX_VERSION}/buildx-v${BUILDX_VERSION}.linux-amd64 && \ + BUILDX_DOWNLOAD_FILE=buildx-${BUILDX_VERSION}.linux-amd64 && \ + wget https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64 && \ echo "${BUILDX_SHA} ${BUILDX_DOWNLOAD_FILE}" | sha256sum -c - || exit 1 && \ - chmod a+x buildx-v${BUILDX_VERSION}.linux-amd64 && \ + chmod a+x buildx-${BUILDX_VERSION}.linux-amd64 && \ mkdir -p ~/.docker/cli-plugins && \ - mv buildx-v${BUILDX_VERSION}.linux-amd64 ~/.docker/cli-plugins/docker-buildx + mv buildx-${BUILDX_VERSION}.linux-amd64 ~/.docker/cli-plugins/docker-buildx # install Pack CLI -ARG PACK_VERSION=0.28.0 +ARG PACK_VERSION=v0.28.0 ARG PACK_SHA=4f51b82dea355cffc62b7588a2dfa461e26621dda3821034830702e5cae6f587 RUN \ - PACK_DOWNLOAD_FILE=pack-v${PACK_VERSION}-linux.tgz && \ - wget https://github.com/buildpacks/pack/releases/download/v${PACK_VERSION}/pack-v${PACK_VERSION}-linux.tgz && \ + PACK_DOWNLOAD_FILE=pack-${PACK_VERSION}-linux.tgz && \ + wget https://github.com/buildpacks/pack/releases/download/${PACK_VERSION}/pack-${PACK_VERSION}-linux.tgz && \ echo "${PACK_SHA} ${PACK_DOWNLOAD_FILE}" | sha256sum -c - || exit 1 && \ tar xzvf ${PACK_DOWNLOAD_FILE} -C /usr/local/bin pack --no-same-owner && \ rm $PACK_DOWNLOAD_FILE diff --git a/scripts/check-update.sh b/scripts/check-update.sh new file mode 100755 index 0000000..86936ee --- /dev/null +++ b/scripts/check-update.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +set -e + +REPO_ROOT=$(git rev-parse --show-toplevel) +TMP_DIR=tmp +pushd "${REPO_ROOT}" || exit + +DOCKERFILE=${1:-Dockerfile} + +[[ -e "${TMP_DIR}" ]] || mkdir -p "${TMP_DIR}" + +is_darwin() { + case "$(uname -s)" in + *darwin*) true ;; + *Darwin*) true ;; + *) false ;; + esac +} + +update_golang() { + local golang_version_file=${TMP_DIR}/golang.json + curl -fsSL "https://go.dev/dl/?mode=json" >"${golang_version_file}" + + local latest_go_version=$(jq <"${golang_version_file}" -r '[.[].files[] | select(.filename | contains("linux-amd64"))][0] | .version' | sed -e 's/[]\/$*.^[]/\\&/g') + local latest_golang_dist_sha=$(jq <"${golang_version_file}" -r '[.[].files[] | select(.filename | contains("linux-amd64"))][0] | .sha256') + + local go_version_old=$(sed -n 's/ARG GO_VERSION=\(.*\)/\1/p' "$DOCKERFILE") + local golang_dist_sha_old=$(sed -n 's/ARG GOLANG_DIST_SHA=\(.*\)/\1/p' "$DOCKERFILE") + + if is_darwin; then + sed -i '' "s/ARG GO_VERSION=$go_version_old/ARG GO_VERSION=$latest_go_version/g" "$DOCKERFILE" + sed -i '' "s/ARG GOLANG_DIST_SHA=$golang_dist_sha_old/ARG GOLANG_DIST_SHA=$latest_golang_dist_sha/g" "$DOCKERFILE" + else + sed -i "s/ARG GO_VERSION=$go_version_old/ARG GO_VERSION=$latest_go_version/g" "$DOCKERFILE" + sed -i "s/ARG GOLANG_DIST_SHA=$golang_dist_sha_old/ARG GOLANG_DIST_SHA=$latest_golang_dist_sha/g" "$DOCKERFILE" + fi + + echo -e "update golang from $go_version_old: $golang_dist_sha_old to ${latest_go_version}: ${latest_golang_dist_sha}" +} + +update_repo() { + local repo="$1" + local file="$2" + local version="$3" + local hash="$4" + local tmpfile=${TMP_DIR}/repo.json + + curl -fsSL https://api.github.com/repos/${repo}/releases/latest >"$tmpfile" + + if [[ ! -f "${tmpfile}" ]]; then + echo "get release info failed!!!" + exit 1 + fi + + latest_version=$(cat "${tmpfile}" | grep tag_name | cut -d '"' -f 4) + checksum_file=$(jq <"${tmpfile}" -r --arg name "${file}" '.assets[] | select(.name | endswith($name)).browser_download_url') + + if [[ "${checksum_file}" == *checksums.txt ]]; then + local flag="$5" + checksum=$(curl -fsSL "${checksum_file}" | grep -e "${flag}" | awk '{print $1}') + else + checksum=$(curl -fsSL "${checksum_file}" | cut -d ' ' -f 1) + fi + if is_darwin; then + sed -i '' "s/ARG ${version}=\(.*\)/ARG ${version}=${latest_version}/g" "$DOCKERFILE" + sed -i '' "s/ARG ${hash}=\(.*\)/ARG ${hash}=${checksum}/g" "$DOCKERFILE" + else + sed -i "s/ARG ${version}=\(.*\)/ARG ${version}=${latest_version}/g" "$DOCKERFILE" + sed -i "s/ARG ${hash}=\(.*\)/ARG ${hash}=${checksum}/g" "$DOCKERFILE" + fi + + echo "update ${repo}, ${latest_version}:${checksum}" +} + +update_golang +update_repo 'goreleaser/goreleaser' 'checksums.txt' 'GORELEASER_VERSION' 'GORELEASER_SHA' 'Linux_x86_64.tar.gz$' +update_repo 'ko-build/ko' 'checksums.txt' 'KO_VERSION' 'KO_SHA' 'Linux_x86_64.tar.gz$' +update_repo 'git-chglog/git-chglog' 'checksums.txt' 'GIT_CHGLOG_VERSION' 'GIT_CHGLOG_SHA' 'linux_amd64.tar.gz' +update_repo 'docker/buildx' 'checksums.txt' 'BUILDX_VERSION' 'BUILDX_SHA' 'linux-amd64$' +update_repo 'buildpacks/pack' 'linux.tgz.sha256' 'PACK_VERSION' 'PACK_SHA' + +# clean tmp files +rm -rf ${TMP_DIR} + +popd || exit diff --git a/scripts/clean.sh b/scripts/clean.sh new file mode 100755 index 0000000..6ba31fd --- /dev/null +++ b/scripts/clean.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# https://github.com/actions/gh-actions-cache +# gh extension install actions/gh-actions-cache + +REPO="github.com/gythialy/golang-cross" +BRANCH=${1:-"refs/pull/189/merge"} + +echo "Fetching list of cache key of ${BRANCH}" +cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 ) + +## Setting this to not fail the workflow while deleting cache keys. +set +e +echo "Deleting caches..." +for cacheKey in $cacheKeysForPR +do + gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm +done +echo "Done" \ No newline at end of file