#!/bin/bash set -ex function wait_for() { rm -f /tmp/setup-forgejo.out success=false for delay in 1 1 5 5 15 15 15 30 30 30 30 ; do if "$@" >> /tmp/setup-forgejo.out 2>&1 ; then success=true break fi cat /tmp/setup-forgejo.out echo waiting $delay sleep $delay done if test $success = false ; then cat /tmp/setup-forgejo.out return 1 fi } function run() { local image="$1" docker run --name forgejo \ -e "RUN_MODE=dev" \ -e "FORGEJO__security__INSTALL_LOCK=true" \ -e "FORGEJO__log__LEVEL=debug" \ -e "FORGEJO__server__ROOT_URL=http://0.0.0.0:3000/" \ -e "FORGEJO__actions__ENABLED=true" \ -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.actions" \ -d $image local ip="$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" forgejo)" echo $ip > forgejo-ip docker exec forgejo sed -i -e "s|/0.0.0.0:3000/|/$ip:3000/|" /data/gitea/conf/app.ini docker restart forgejo } function setup() { local user="${1:-root}" local password="${2:-admin1234}" local image="${3:-codeberg.org/forgejo/forgejo:1.19}" run $image sleep 5 # for some reason trying to run "forgejo admin" while forgejo is booting will permanently break everything if docker exec --user 1000 forgejo forgejo admin user list --admin | grep "$user" ; then docker exec --user 1000 forgejo forgejo admin user change-password --username "$user" --password "$password" else wait_for docker exec --user 1000 forgejo forgejo admin user create --admin --username "$user" --password "$password" --email "$user@example.com" fi docker exec --user 1000 forgejo forgejo admin user generate-access-token -u $user --raw > forgejo-token ( 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 forgejo >& /dev/null || true docker rm -f forgejo >& /dev/null || true } "$@"