Files
configure-runner-environment/configure.sh
2025-10-28 11:58:38 +01:00

251 lines
8.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
echo "== CONFIGURATION =="
export AWS_ACCESS_KEY=${AWS_ACCESS_KEY:-}
export CARGO_NET_GIT_FETCH_WITH_CLI=${CARGO_NET_GIT_FETCH_WITH_CLI:-true}
export GCP_CLUSTER_NAME=${GCP_CLUSTER_NAME:-}
export GCP_CONTROL_PLANE_LOCATION=${GCP_CONTROL_PLANE_LOCATION:-}
export GCP_PRINCIPAL=${GCP_PRINCIPAL:-}
export GCP_PROJECT_NAME=${GCP_PROJECT_NAME:-}
export GITEA_INSTANCE=${GITEA_INSTANCE:-}
export GITEA_INSTANCE_SCHEME=${GITEA_INSTANCE_SCHEME:-https}
export GITEA_ORGANIZATION=${GITEA_ORGANIZATION:-}
export GIT_TERMINAL_PROMPT=${GIT_TERMINAL_PROMPT:-0}
export NIXOS_CACHE_LOCATION=${NIXOS_CACHE_LOCATION:-https://cache.nixos.org/}
export NIXOS_CACHE_SIGN_KEY=${NIXOS_CACHE_SIGN_KEY:-cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=}
export NIX_S3_CACHE_LOCATION=${NIX_S3_CACHE_LOCATION:-}
export NIX_SIGN_KEY=${NIX_SIGN_KEY:-}
export RUNNER_CAPACITY=${RUNNER_CAPACITY:-1}
export RUNNER_CONFIG_FILE=${RUNNER_CONFIG_FILE:-}
export RUNNER_CONTAINER_IS_PRIVILEGED=${RUNNER_CONTAINER_IS_PRIVILEGED:-false}
export RUNNER_CONTAINER_OPTIONS=${RUNNER_CONTAINER_OPTIONS:-}
export RUNNER_DOCKER_HOST=${RUNNER_DOCKER_HOST:-}
export RUNNER_JOB_TIMEOUT=${RUNNER_JOB_TIMEOUT:-3h}
export RUNNER_LABELS=${RUNNER_LABELS:-["action-runner-persistent:host","action-runner:docker://action-runner-job:latest","ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"]}
export RUNNER_LOG_LEVEL=${RUNNER_LOG_LEVEL:-info}
export RUNNER_RUNNER_FILE=${RUNNER_RUNNER_FILE:-.runner}
export RUNNER_USERNAME=${RUNNER_USERNAME:-}
export RUNNER_WORKDIR=${RUNNER_WORKDIR:-/tmp}
export TWINE_NON_INTERACTIVE=${TWINE_NON_INTERACTIVE:-true}
echo "AWS_ACCESS_KEY=\"${AWS_ACCESS_KEY}"\"
echo "CARGO_NET_GIT_FETCH_WITH_CLI=\"${CARGO_NET_GIT_FETCH_WITH_CLI}"\"
echo "GCP_CLUSTER_NAME=\"${GCP_CLUSTER_NAME}"\"
echo "GCP_CONTROL_PLANE_LOCATION=\"${GCP_CONTROL_PLANE_LOCATION}"\"
echo "GCP_PRINCIPAL=\"${GCP_PRINCIPAL}"\"
echo "GCP_PROJECT_NAME=\"${GCP_PROJECT_NAME}"\"
echo "GITEA_INSTANCE=\"${GITEA_INSTANCE}"\"
echo "GITEA_INSTANCE_SCHEME=\"${GITEA_INSTANCE_SCHEME}"\"
echo "GITEA_ORGANIZATION=\"${GITEA_ORGANIZATION}"\"
echo "GIT_TERMINAL_PROMPT=\"${GIT_TERMINAL_PROMPT}"\"
echo "NIXOS_CACHE_LOCATION=\"${NIXOS_CACHE_LOCATION}"\"
echo "NIXOS_CACHE_SIGN_KEY=\"${NIXOS_CACHE_SIGN_KEY}"\"
echo "NIX_S3_CACHE_LOCATION=\"${NIX_S3_CACHE_LOCATION}"\"
echo "NIX_SIGN_KEY=\"${NIX_SIGN_KEY}"\"
echo "RUNNER_CAPACITY=\"${RUNNER_CAPACITY}"\"
echo "RUNNER_CONFIG_FILE=\"${RUNNER_CONFIG_FILE}"\"
echo "RUNNER_CONTAINER_IS_PRIVILEGED=\"${RUNNER_CONTAINER_IS_PRIVILEGED}"\"
echo "RUNNER_CONTAINER_OPTIONS=\"${RUNNER_CONTAINER_OPTIONS}"\"
echo "RUNNER_DOCKER_HOST=\"${RUNNER_DOCKER_HOST}"\"
echo "RUNNER_JOB_TIMEOUT=\"${RUNNER_JOB_TIMEOUT}"\"
echo "RUNNER_LABELS=\"${RUNNER_LABELS}"\"
echo "RUNNER_LOG_LEVEL=\"${RUNNER_LOG_LEVEL}"\"
echo "RUNNER_RUNNER_FILE=\"${RUNNER_RUNNER_FILE}"\"
echo "RUNNER_USERNAME=\"${RUNNER_USERNAME}"\"
echo "RUNNER_WORKDIR=\"${RUNNER_WORKDIR}"\"
echo "TWINE_NON_INTERACTIVE=\"${TWINE_NON_INTERACTIVE}"\"
echo ""
LAST_CONFIG_HASH_FILE="$HOME/current_config"
if [[ -f "$LAST_CONFIG_HASH_FILE" ]]; then
LAST_CONFIG_HASH=$(cat "$LAST_CONFIG_HASH_FILE")
else
LAST_CONFIG_HASH="-"
fi
cat <<EOF > "CONFIG_HASH_FILE"
AWS_ACCESS_KEY="$AWS_ACCESS_KEY"
AWS_SECRET_ACCESS_KEY="$AWS_SECRET_ACCESS_KEY"
CARGO_NET_GIT_FETCH_WITH_CLI="$CARGO_NET_GIT_FETCH_WITH_CLI"
GCP_CLUSTER_NAME="$GCP_CLUSTER_NAME"
GCP_CONTROL_PLANE_LOCATION="$GCP_CONTROL_PLANE_LOCATION"
GCP_PRINCIPAL="$GCP_PRINCIPAL"
GCP_PROJECT_NAME="$GCP_PROJECT_NAME"
GCP_SERVICE_KEY="$GCP_SERVICE_KEY"
GIT_TERMINAL_PROMPT="$GIT_TERMINAL_PROMPT"
GITEA_INSTANCE="$GITEA_INSTANCE"
GITEA_INSTANCE_SCHEME="$GITEA_INSTANCE_SCHEME"
GITEA_ORGANIZATION="$GITEA_ORGANIZATION"
GITEA_SSH_KEY="$GITEA_SSH_KEY"
NIXOS_CACHE_LOCATION="$NIXOS_CACHE_LOCATION"
NIXOS_CACHE_SIGN_KEY="$NIXOS_CACHE_SIGN_KEY"
NIX_S3_CACHE_LOCATION="$NIX_S3_CACHE_LOCATION"
NIX_SECRET_SIGN_KEY="$NIX_SECRET_SIGN_KEY"
NIX_SIGN_KEY="$NIX_SIGN_KEY"
RUNNER_PASSWORD="$RUNNER_PASSWORD"
RUNNER_USERNAME="$RUNNER_USERNAME"
TWINE_NON_INTERACTIVE="$TWINE_NON_INTERACTIVE"
EOF
CURRENT_CONFIG_HASH=$(cat "$CONFIG_HASH_FILE" | sha256sum)
echo "current config hash: $CURRENT_CONFIG_HASH"
echo "last config hash: $LAST_CONFIG_HASH"
if [[ "$CURRENT_CONFIG_HASH" == "$LAST_CONFIG_HASH" ]]; then
echo "-> config unchanged."
CONFIG_CHANGED=0
else
echo "-> config changed. updating."
CONFIG_CHANGED=1
fi
echo ""
if [[ "$CONFIG_CHANGED" -eq 1 || ! -d "$HOME/.config/gcloud" ]]; then
echo "== SETTING UP GOOGLE CLOUD CLI =="
GCP_SERVICE_KEY_FILENAME="$HOME/gcp_servicekey.json"
echo "$GCP_SERVICE_KEY" > "$GCP_SERVICE_KEY_FILENAME"
gcloud auth activate-service-account \
"$GCP_PRINCIPAL" --key-file="$GCP_SERVICE_KEY_FILENAME"
gcloud config set project "$GCP_PROJECT_NAME"
gcloud container clusters get-credentials \
"$GCP_CLUSTER_NAME" --location "$GCP_CONTROL_PLANE_LOCATION"
gcloud auth list
gcloud info
else
echo "== google cloud cli already configured =="
fi
if [[ "$CONFIG_CHANGED" -eq 1 || ! -f "$HOME/.docker/config.json" ]]; then
echo "== SETTING UP DOCKER USER CONFIG =="
mkdir -p "$HOME/.docker"
rm -fr "$HOME/.docker/config.json"
cat <<EOF > "$HOME/.docker/config.json"
{
"credHelpers": {
"gcr.io": "gcloud",
"us.gcr.io": "gcloud",
"eu.gcr.io": "gcloud",
"asia.gcr.io": "gcloud",
"staging-k8s.gcr.io": "gcloud",
"marketplace.gcr.io": "gcloud",
"europe-docker.pkg.dev": "gcloud"
}
}
EOF
else
echo "== docker already configured =="
fi
NIX_USER_CONF_FILES="$HOME/.config/nix/nix.conf"
NIX_SECRET_SIGN_KEY_FILE="$HOME/nix-sign.private"
if [[ "$CONFIG_CHANGED" -eq 1 || ! -f "$NIX_USER_CONF_FILES" ]]; then
mkdir -p "$HOME/.config/nix"
echo "== SETTING UP NIX CONFIG =="
if [[ -v NIX_SECRET_SIGN_KEY ]]; then
echo "$NIX_SECRET_SIGN_KEY" > "$NIX_SECRET_SIGN_KEY_FILE"
fi
cat <<EOF > "$NIX_USER_CONF_FILES"
substituters = $NIX_S3_CACHE_LOCATION $NIXOS_CACHE_LOCATION
trusted-public-keys = $NIXOS_CACHE_SIGN_KEY $NIX_SIGN_KEY
trusted-substituters = $NIXOS_CACHE_LOCATION $NIX_S3_CACHE_LOCATION
always-allow-substitutes = true
EOF
else
echo "== nix already configured =="
fi
if [[ "$CONFIG_CHANGED" -eq 1 || ! -f "$HOME/.aws/credentials" ]]; then
echo "== SETTING UP AWS CREDENTIALS FOR NIX CACHE =="
mkdir -p "$HOME/.aws"
cat <<EOF > "$HOME/.aws/credentials"
[default]
aws_access_key_id=$AWS_ACCESS_KEY
aws_secret_access_key=$AWS_SECRET_ACCESS_KEY
EOF
else
echo "== aws credentials for nix cache already configured =="
fi
if [[ "$CONFIG_CHANGED" -eq 1 || ! -d "$HOME/.ssh" ]]; then
echo "== SETTING UP SSH CLIENT =="
mkdir -p "$HOME/.ssh"
rm -fr "$HOME/.ssh/id_gitea"
echo "$GITEA_SSH_KEY" > "$HOME/.ssh/id_gitea"
chmod 0400 "$HOME/.ssh/id_gitea"
else
echo "== ssh client already configured =="
fi
if [[ "$CONFIG_CHANGED" -eq 1 || ! -f "$HOME/.netrc" ]]; then
echo "== SETTING UP NETRC =="
cat <<EOF > "$HOME/.netrc"
machine gitea.puzzleyou.net
login $RUNNER_USERNAME
password $RUNNER_PASSWORD
EOF
chmod 600 "$HOME/.netrc"
else
echo "== netrc already configured =="
fi
if [[ "$CONFIG_CHANGED" -eq 1 || ! -f "$HOME/.pypirc" ]]; then
echo "== SETTING UP PYPIRC =="
cat <<EOF > "$HOME/.pypirc"
[distutils]
index-servers = gitea
[gitea]
repository = $GITEA_INSTANCE_SCHEME://$GITEA_INSTANCE/api/packages/$GITEA_ORGANIZATION/pypi
username = $RUNNER_USERNAME
password = $RUNNER_PASSWORD
EOF
else
echo "== pypirc already configured =="
fi
if [[ "$CONFIG_CHANGED" -eq 1 || ! -f "$HOME/.config/git/config" ]]; then
echo "== SETTING UP GIT =="
git config --global user.email "action-runner@cluster.local"
git config --global user.name "action-runner"
git config --global credential.helper store
cat <<EOF > "$HOME/.git-credentials"
$GITEA_INSTANCE_SCHEME://$RUNNER_USERNAME:$RUNNER_PASSWORD@$GITEA_INSTANCE
EOF
else
echo "== git already configured =="
fi
echo "$CURRENT_CONFIG_HASH" > "$LAST_CONFIG_HASH_FILE"
if [[ -v GITHUB_ENV ]]; then
echo "== POPULATING GITHUB_ENV =="
cat <<EOF >> "$GITHUB_ENV"
CARGO_NET_GIT_FETCH_WITH_CLI=$CARGO_NET_GIT_FETCH_WITH_CLI
TWINE_NON_INTERACTIVE=$TWINE_NON_INTERACTIVE
NIX_S3_CACHE_LOCATION=$NIX_S3_CACHE_LOCATION
EOF
else
echo "== \$GITHUB_ENV is not set. not running as an action. =="
fi