mirror of
https://github.com/tailscale/tailscale.git
synced 2025-12-26 20:38:40 +00:00
Implements a new disk put function for cigocacher that does not cause locking issues on Windows when there are multiple processes reading and writing the same files concurrently. Integrates cigocacher into test.yml for Windows where we are running on larger runners that support connecting to private Azure vnet resources where cigocached is hosted. Updates tailscale/corp#10808 Change-Id: I0d0e9b670e49e0f9abf01ff3d605cd660dd85ebb Signed-off-by: Tom Proctor <tomhjp@users.noreply.github.com>
50 lines
1.9 KiB
Bash
Executable File
50 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# This script sets up cigocacher, but should never fail the build if unsuccessful.
|
|
# It expects to run on a GitHub-hosted runner, and connects to cigocached over a
|
|
# private Azure network that is configured at the runner group level in GitHub.
|
|
#
|
|
# Usage: ./action.sh
|
|
# Inputs:
|
|
# URL: The cigocached server URL.
|
|
# Outputs:
|
|
# success: Whether cigocacher was set up successfully.
|
|
|
|
set -euo pipefail
|
|
|
|
if [ -z "${GITHUB_ACTIONS:-}" ]; then
|
|
echo "This script is intended to run within GitHub Actions"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$URL" ]; then
|
|
echo "No cigocached URL is set, skipping cigocacher setup"
|
|
exit 0
|
|
fi
|
|
|
|
JWT="$(curl -sSL -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" "${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=gocached" | jq -r .value)"
|
|
# cigocached serves a TLS cert with an FQDN, but DNS is based on VM name.
|
|
HOST_AND_PORT="${URL#http*://}"
|
|
FIRST_LABEL="${HOST_AND_PORT/.*/}"
|
|
# Save CONNECT_TO for later steps to use.
|
|
echo "CONNECT_TO=${HOST_AND_PORT}:${FIRST_LABEL}:" >> "${GITHUB_ENV}"
|
|
BODY="$(jq -n --arg jwt "$JWT" '{"jwt": $jwt}')"
|
|
CIGOCACHER_TOKEN="$(curl -sSL --connect-to "$HOST_AND_PORT:$FIRST_LABEL:" -H "Content-Type: application/json" "$URL/auth/exchange-token" -d "$BODY" | jq -r .access_token || true)"
|
|
if [ -z "$CIGOCACHER_TOKEN" ]; then
|
|
echo "Failed token exchange with cigocached, skipping cigocacher setup"
|
|
exit 0
|
|
fi
|
|
|
|
# Wait until we successfully auth before building cigocacher to ensure we know
|
|
# it's worth building.
|
|
# TODO(tomhjp): bake cigocacher into runner image and use it for auth.
|
|
echo "Fetched cigocacher token successfully"
|
|
echo "::add-mask::${CIGOCACHER_TOKEN}"
|
|
echo "CIGOCACHER_TOKEN=${CIGOCACHER_TOKEN}" >> "${GITHUB_ENV}"
|
|
|
|
BIN_PATH="${RUNNER_TEMP:-/tmp}/cigocacher$(go env GOEXE)"
|
|
|
|
go build -o "${BIN_PATH}" ./cmd/cigocacher
|
|
echo "GOCACHEPROG=${BIN_PATH} --cache-dir ${CACHE_DIR} --cigocached-url ${URL} --token ${CIGOCACHER_TOKEN}" >> "${GITHUB_ENV}"
|
|
echo "success=true" >> "${GITHUB_OUTPUT}"
|