setup-forgejo/forgejo-runner.sh
Earl Warren 87d8b85700
cleanup the runner cache when uploading self action
if the cache is not cleared, the action that was just uploaded
with the latest changes won't be used, the cached version will.
2023-10-12 15:47:32 +02:00

85 lines
2.5 KiB
Bash
Executable file

#!/bin/bash
# SPDX-License-Identifier: MIT
set -ex
SELF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
: ${FORGEJO_RUNNER_CONFIG:=$SELF_DIR/runner-config.yaml}
function dependencies() {
if ! which curl daemon > /dev/null ; then
apt-get install -y -qq curl daemon
fi
}
function download() {
local runner_repository="$1"
local version="$2"
if ! which forgejo-runner > /dev/null; then
if ! curl -L --fail -sS $runner_repository/releases/download/$version/forgejo-runner-${version#v}-linux-amd64 > /bin/forgejo-runner ; then
# backward compatibility for for the naming scheme prior to 3.0.0
curl -L --fail -sS $runner_repository/releases/download/$version/forgejo-runner-linux-amd64 > /bin/forgejo-runner
fi
chmod 755 /bin/forgejo-runner
fi
}
function register() {
local forgejo="$1"
mktemp -d > forgejo-runner-home
docker exec --user 1000 forgejo forgejo actions generate-runner-token > forgejo-runner-token
timeout --signal=KILL 30 forgejo-runner register --no-interactive --instance "$forgejo" --name runner --token $(cat forgejo-runner-token) --labels docker:docker://code.forgejo.org/oci/node:16-bullseye,ubuntu-latest:docker://code.forgejo.org/oci/node:16-buster,self-hosted
}
function run() {
rm -f forgejo-runner.log
daemon --chdir=$(pwd) --unsafe \
--env="TERM=$TERM" --env="HOME=$(cat forgejo-runner-home)" --env="PATH=$PATH" --env="USER=$USER" --env="TERM=dumb" --env="USERNAME=$USERNAME" --env="LANG=$LANG" \
--pidfile=$(pwd)/forgejo-runner-pid --errlog=$(pwd)/forgejo-runner.log --output=$(pwd)/forgejo-runner.log -- \
forgejo-runner --config $FORGEJO_RUNNER_CONFIG daemon
sleep 1
cat forgejo-runner.log
}
function reload() {
teardown
rm -f forgejo-runner.log
run
}
function setup() {
local runner_repository="${1:-https://code.forgejo.org/forgejo/runner}"
local version="${2:-v3.0.1}"
local forgejo="${3:-http://$(cat forgejo-ip):3000/}"
dependencies
download $runner_repository $version
register $forgejo
run
}
function stop_daemon() {
local daemon=$1
local DIR=.
if test -f $DIR/$daemon-pid ; then
local pid=$(cat $DIR/$daemon-pid)
kill -TERM $pid
pidwait $pid || true
for delay in 1 1 2 2 5 5 ; do
if ! test -f $DIR/$daemon-pid ; then
break
fi
sleep $delay
done
! test -f $DIR/$daemon-pid
fi
}
function teardown() {
stop_daemon forgejo-runner
rm -fr $(cat forgejo-runner-home)
}
"$@"