tool: add cigocacher

Adds tool script for downloading and running cigocacher from releases
based on a pinned revision. This is only designed to run in CI, so we
can safely depend on git bash being installed like it is by default on
GitHub's hosted Windows runners, and that saves us from having to
maintain multiple translated copies of the same script.

Updates tailscale/corp#10808

Change-Id: I9a84b6b83ff145f0860b5d21c59cb5c15e9bed0b
Signed-off-by: Tom Proctor <tomhjp@users.noreply.github.com>
This commit is contained in:
Tom Proctor
2025-12-15 11:42:57 +00:00
parent d0d993f5d6
commit 5f64412b63
4 changed files with 89 additions and 4 deletions

View File

@@ -23,10 +23,11 @@ if [ -z "${URL:-}" ]; then
exit 0
fi
BIN_PATH="${RUNNER_TEMP:-/tmp}/cigocacher$(go env GOEXE)"
go build -o "${BIN_PATH}" ./cmd/cigocacher
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
BASE_CMD="${REPO_ROOT}/tool/cigocacher --cache-dir ${CACHE_DIR} --cigocached-url ${URL} --cigocached-host ${HOST}"
CIGOCACHER_TOKEN="$("${BIN_PATH}" --auth --cigocached-url "${URL}" --cigocached-host "${HOST}" )"
CIGOCACHER_TOKEN="$("${BASE_CMD}" --auth)"
if [ -z "${CIGOCACHER_TOKEN:-}" ]; then
echo "Failed to fetch cigocacher token, skipping cigocacher setup"
exit 0
@@ -35,5 +36,5 @@ fi
echo "Fetched cigocacher token successfully"
echo "::add-mask::${CIGOCACHER_TOKEN}"
echo "GOCACHEPROG=${BIN_PATH} --cache-dir ${CACHE_DIR} --cigocached-url ${URL} --cigocached-host ${HOST} --token ${CIGOCACHER_TOKEN}" >> "${GITHUB_ENV}"
echo "GOCACHEPROG=${BASE_CMD} --token ${CIGOCACHER_TOKEN}" >> "${GITHUB_ENV}"
echo "success=true" >> "${GITHUB_OUTPUT}"

78
tool/cigocacher Executable file
View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
#
# Run cmd/cigocacher based on the revision pinned in tool/cigocacher.rev
set -euo pipefail
goos() {
case "$(uname -s)" in
Linux*)
echo "linux"
;;
Darwin*)
echo "darwin"
;;
MINGW*|MSYS*|CYGWIN*)
echo "windows"
;;
*)
echo "unknown"
;;
esac
}
goarch() {
local machine="$(uname -m)"
case "$machine" in
x86_64|amd64)
echo "amd64"
;;
aarch64|arm64)
echo "arm64"
;;
armv7l|armv6l)
echo "arm"
;;
i386|i686)
echo "386"
;;
*)
echo "$machine"
;;
esac
}
if [[ "${CI:-}" == "true" ]]; then
set -x
fi
cachedir="${HOME}/.cache/tailscale-cigocacher"
(
if [[ "${CI:-}" == "true" ]]; then
set -x
fi
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
repo_root="${SCRIPT_DIR}/../"
cd "$repo_root"
tarball="${cachedir}.tar.gz"
want_rev="$(cat ./tool/cigocacher.rev)"
got_rev=""
if [[ -x "${cachedir}/cigocacher" ]]; then
got_rev=$("${cachedir}/cigocacher" --version)
fi
if [[ "$want_rev" != "$got_rev" ]]; then
rm -rf "$cachedir" "$tarball"
mkdir -p "$cachedir"
curl -w "%{size_download} bytes | %{time_total}s | %{speed_download} bytes/sec\n" -fsSL -o "$tarball" \
"https://github.com/tailscale/tailscale/releases/download/cmd%2Fcigocacher%2F${want_rev}/cigocacher-$(goos)-$(goarch).tar.gz"
(cd "$cachedir" && tar -xf "$tarball")
rm -f "$tarball"
fi
)
exec "${cachedir}/cigocacher" "$@"

5
tool/cigocacher.cmd Normal file
View File

@@ -0,0 +1,5 @@
@echo off
@REM Allows running ./tool/cigocacher on Windows, which doesn't have the x
@REM permission bit and shebang support that we use for Unix.
@REM Requires Git Bash.
bash "%~dp0cigocacher" %*

1
tool/cigocacher.rev Normal file
View File

@@ -0,0 +1 @@
d0d993f5d6576b5d97d0242c64bbe2de049d6486