setup-forgejo/forgejo-runner.sh

97 lines
3 KiB
Bash
Raw Normal View History

2023-03-24 17:42:52 -04:00
#!/bin/bash
2023-04-01 05:08:06 -04:00
# SPDX-License-Identifier: MIT
2023-03-24 17:42:52 -04:00
set -ex
PS4='${BASH_SOURCE[0]}:$LINENO: ${FUNCNAME[0]}: '
SELF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source $SELF_DIR/forgejo-runner-lib.sh
: ${FORGEJO_RUNNER_CONFIG:=$SELF_DIR/runner-config.yaml}
2023-03-24 17:42:52 -04:00
function dependencies() {
if ! which make curl daemon > /dev/null ; then
apt-get install -y -qq make curl daemon
2023-03-24 17:42:52 -04:00
fi
}
function download() {
local runner_repository="$1"
local version="$2"
2023-03-24 17:42:52 -04:00
if ! which forgejo-runner > /dev/null; then
if ! curl -L --fail -sS $runner_repository/releases/download/$version/forgejo-runner-${version#v}-linux-amd64 > /usr/local/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 > /usr/local/bin/forgejo-runner
fi
chmod 755 /usr/local/bin/forgejo-runner
fi
2023-03-24 17:42:52 -04:00
}
function register() {
local forgejo="$1"
mktemp -d > forgejo-runner-home
docker exec --user 1000 forgejo forgejo actions generate-runner-token > forgejo-runner-token
2024-12-06 12:05:18 -05:00
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:lxc://debian:bullseye,lxc-bullseye:lxc://debian:bullseye,lxc-bookworm:lxc://debian:bookworm
2023-03-24 17:42:52 -04:00
}
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
2023-03-27 13:39:19 -04:00
sleep 1
cat forgejo-runner.log
2023-03-24 17:42:52 -04:00
}
2023-07-08 08:06:13 -04:00
function reload() {
teardown
rm -f forgejo-runner.log
2023-07-08 08:06:13 -04:00
run
}
2023-03-24 17:42:52 -04:00
function setup() {
local default_runner_repository="$(cat $SELF_DIR/RUNNER_REPOSITORY)"
local runner_repository="${1:-${default_runner_repository}}"
local default_version="$(cat $SELF_DIR/RUNNER_VERSION)"
local version="${2:-${default_version}}"
2023-03-27 13:39:19 -04:00
local forgejo="${3:-http://$(cat forgejo-ip):3000/}"
2023-03-24 17:42:52 -04:00
dependencies
if [[ "$version" =~ ^@ ]] ; then
local branch=${version##@}
build_runner $runner_repository $branch
else
download $runner_repository $version
fi
2023-03-24 17:42:52 -04:00
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
2023-03-24 17:42:52 -04:00
fi
}
function teardown() {
stop_daemon forgejo-runner
rm -fr $(cat forgejo-runner-home)
}
2023-03-24 17:42:52 -04:00
"$@"