setup-forgejo/forgejo.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

87 lines
3 KiB
Bash
Executable file

#!/bin/bash
# SPDX-License-Identifier: MIT
set -e
DIR=/tmp
if ${VERBOSE:-false}; then set -x; fi
: ${CONTAINER:=forgejo}
: ${RETRY_DELAYS:=1 1 5 5 15 30}
function retry() {
rm -f $DIR/retry.out
success=false
for delay in $RETRY_DELAYS ; do
if "$@" >> $DIR/retry.out 2>&1 ; then
success=true
break
fi
cat $DIR/retry.out
echo waiting $delay
sleep $delay
done
if test $success = false ; then
cat $DIR/retry.out
return 1
fi
}
function run() {
local image="$1"
local version="$2"
if test "$version" != "1.19" && dpkg --compare-versions "$version" "lt" "1.19.0-3"; then
actions_unit="actions.actions"
else
actions_unit="repo.actions"
fi
docker run --restart unless-stopped --name ${CONTAINER} \
-e "RUN_MODE=dev" \
-e "FORGEJO__security__INSTALL_LOCK=true" \
-e "FORGEJO__log__LEVEL=trace" \
-e "FORGEJO__actions__ENABLED=true" \
-e "FORGEJO__queue__TYPE=immediate" \
-e "FORGEJO__queue.push_update__TYPE=immediate" \
-e "FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true" \
-e "FORGEJO__repository__DEFAULT_PUSH_CREATE_PRIVATE=false" \
-e "FORGEJO__repository__DEFAULT_REPO_UNITS=repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki,repo.projects,repo.packages,$actions_unit" \
-d $image:$version
local ip="$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" ${CONTAINER})"
echo $ip > forgejo-ip
docker exec ${CONTAINER} sed -i -e "s|localhost|$ip|" /data/gitea/conf/app.ini
docker restart ${CONTAINER}
}
function setup() {
local user="${1:-root}"
local password="${2:-admin1234}"
local image="${3:-codeberg.org/forgejo/forgejo}"
local version="${4:-1.20}"
run $image $version
sleep 5 # for some reason trying to run "forgejo admin" while forgejo is booting will permanently break everything
if docker exec --user 1000 ${CONTAINER} forgejo admin user list --admin | grep "$user" ; then
docker exec --user 1000 ${CONTAINER} forgejo admin user change-password --username "$user" --password "$password"
else
retry docker exec --user 1000 ${CONTAINER} forgejo admin user create --admin --username "$user" --password "$password" --email "$user@example.com"
fi
#
# The 'sudo' scope was removed in Forgejo v1.20 and is ignored
#
docker exec --user 1000 ${CONTAINER} forgejo admin user generate-access-token -u $user --raw --scopes 'all,sudo' > forgejo-token
retry forgejo-curl.sh --user "$user" --password "$password" --token @forgejo-token login http://$(cat forgejo-ip):3000
#
# Redundant with forgejo-curl.sh, kept around for backward compatibility 09/2023
#
( echo -n 'Authorization: token ' ; cat forgejo-token ) > forgejo-header
( echo "#!/bin/sh" ; echo 'curl -sS -H "Content-Type: application/json" -H @'$(pwd)/forgejo-header' "$@"' ) > forgejo-api && chmod +x forgejo-api
}
function teardown() {
docker stop ${CONTAINER} >& /dev/null || true
docker rm -f ${CONTAINER} >& /dev/null || true
}
"$@"