Skip to content

Commit

Permalink
feat: add shell to check for update (#199)
Browse files Browse the repository at this point in the history
Signed-off-by: gythialy <gythialy.koo+github@gmail.com>
  • Loading branch information
gythialy committed Feb 28, 2023
1 parent c937b75 commit c680d67
Show file tree
Hide file tree
Showing 4 changed files with 132 additions and 25 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
/.vscode/*
tmp/**
51 changes: 26 additions & 25 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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 && \
Expand All @@ -40,23 +40,23 @@ 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 && \
rm $KO_DOWNLOAD_FILE && \
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 && \
Expand All @@ -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
Expand Down
86 changes: 86 additions & 0 deletions scripts/check-update.sh
Original file line number Diff line number Diff line change
@@ -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
19 changes: 19 additions & 0 deletions scripts/clean.sh
Original file line number Diff line number Diff line change
@@ -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"

0 comments on commit c680d67

Please sign in to comment.