Merge pull request 'chore(cleanup): shfmt and .editorconfig applied to all scripts' (#296) from earl-warren/setup-forgejo:wip-shfmt into main

Reviewed-on: https://code.forgejo.org/actions/setup-forgejo/pulls/296
This commit is contained in:
earl-warren 2025-01-28 20:40:36 +00:00
commit 3897b689c2
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG key ID: F128CBE6AB3A7201
7 changed files with 151 additions and 141 deletions

10
.editorconfig Normal file
View file

@ -0,0 +1,10 @@
root = true
[*]
indent_style = space
indent_size = 4
tab_width = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

View file

@ -3,19 +3,13 @@
set -e
SELF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source $SELF_DIR/forgejo-lib.sh
: ${DIR:=/tmp/forgejo-binary}
if ${VERBOSE:-false}; then set -x; fi
function maybe_sudo() {
if test $(id -u) != 0 ; then
SUDO=sudo
fi
}
function ensure_user() {
local user=$1
@ -28,7 +22,7 @@ function ensure_user() {
function dependencies() {
maybe_sudo
if ! which sudo curl daemon jq git-lfs ip sqlite3 envsubst unzip > /dev/null ; then
if ! which sudo curl daemon jq git-lfs ip sqlite3 envsubst unzip >/dev/null; then
$SUDO apt-get update -qq
$SUDO apt-get -q install -y -qq sudo curl daemon jq git-lfs iproute2 sqlite3 gettext-base unzip
fi
@ -44,14 +38,14 @@ function cleanup_logs() {
function download() {
local url="$1"
if ! test -f $DIR/forgejo ; then
curl -sS $url > $DIR/forgejo.tmp
if file $DIR/forgejo.tmp | grep --quiet 'Zip archive' ; then
unzip $DIR/forgejo.tmp -d $DIR
rm -f $DIR/forgejo.tmp
else
mv $DIR/forgejo.tmp $DIR/forgejo
fi
if ! test -f $DIR/forgejo; then
curl -sS $url >$DIR/forgejo.tmp
if file $DIR/forgejo.tmp | grep --quiet 'Zip archive'; then
unzip $DIR/forgejo.tmp -d $DIR
rm -f $DIR/forgejo.tmp
else
mv $DIR/forgejo.tmp $DIR/forgejo
fi
chmod +x $DIR/forgejo
fi
echo $DIR/forgejo --version
@ -68,10 +62,10 @@ function create_user() {
fi
$DIR/forgejocli admin user create --admin --username "$user" --password "$password" --email "$user@example.com"
$DIR/forgejocli admin user generate-access-token -u "$user" --raw --scopes all > $DIR/forgejo-token
$DIR/forgejocli admin user generate-access-token -u "$user" --raw --scopes all >$DIR/forgejo-token
local url="http://$(cat $DIR/forgejo-ip):3000"
echo "$url" > $DIR/forgejo-url
echo "http://${user}:${password}@$(cat $DIR/forgejo-ip):3000" > $DIR/forgejo-auth-url
echo "$url" >$DIR/forgejo-url
echo "http://${user}:${password}@$(cat $DIR/forgejo-ip):3000" >$DIR/forgejo-auth-url
retry forgejo-curl.sh --user "$user" --password "$password" --token @$DIR/forgejo-token login "$url"
echo forgejo-curl.sh api_json $url/api/forgejo/v1/version
forgejo-curl.sh api_json $url/api/forgejo/v1/version
@ -84,14 +78,14 @@ function myip() {
function start_forgejo() {
local work_path=$DIR/forgejo-work-path
daemon --chdir=$DIR --unsafe --env="TERM=$TERM" --env="HOME=$HOME" --env="PATH=$PATH" --pidfile=$DIR/forgejo-pid --errlog=$DIR/forgejo-err.log --output=$DIR/forgejo-out.log -- $DIR/forgejo --config $work_path/app.ini --work-path $work_path
if ! retry grep --no-messages --quiet 'Starting server on' $work_path/log/forgejo.log ; then
if ! retry grep --no-messages --quiet 'Starting server on' $work_path/log/forgejo.log; then
cat $DIR/*.log
cat $work_path/log/*.log
return 1
fi
echo "$DIR/forgejo --config $work_path/app.ini --work-path $work_path" '"$@"' > $DIR/forgejocli
echo "$DIR/forgejo --config $work_path/app.ini --work-path $work_path" '"$@"' >$DIR/forgejocli
chmod +x $DIR/forgejocli
myip > $DIR/forgejo-ip
myip >$DIR/forgejo-ip
}
function reset_forgejo() {
@ -99,7 +93,7 @@ function reset_forgejo() {
local work_path=$DIR/forgejo-work-path
rm -fr $work_path
mkdir -p $work_path
IP=$(myip) WORK_PATH=$work_path envsubst < $SELF_DIR/$config-app.ini > $work_path/app.ini
IP=$(myip) WORK_PATH=$work_path envsubst <$SELF_DIR/$config-app.ini >$work_path/app.ini
}
function teardown() {

View file

@ -9,15 +9,15 @@ source $(dirname $0)/lxc-helpers-lib.sh
function install_docker() {
if ! systemctl is-active --quiet docker; then
lxc_install_docker_inside
lxc_install_docker_inside
fi
}
function install_other() {
local packages="sudo git"
if ! which $packages ; then
apt-get update -qq
apt-get install -y -qq $packages
if ! which $packages; then
apt-get update -qq
apt-get install -y -qq $packages
fi
}

View file

@ -11,8 +11,8 @@ function retry() {
local tmp=/tmp
rm -f $tmp/retry.out
success=false
for delay in $RETRY_DELAYS ; do
if "$@" >> $tmp/retry.out 2>&1 ; then
for delay in $RETRY_DELAYS; do
if "$@" >>$tmp/retry.out 2>&1; then
success=true
break
fi
@ -20,7 +20,7 @@ function retry() {
echo waiting $delay
sleep $delay
done
if test $success = false ; then
if test $success = false; then
cat $tmp/retry.out
return 1
fi
@ -30,12 +30,12 @@ function stop_daemon() {
local daemon=$1
local dir=${2:-.}
if test -f $dir/$daemon-pid ; then
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
for delay in 1 1 2 2 5 5; do
if ! test -f $dir/$daemon-pid; then
break
fi
sleep $delay
@ -45,13 +45,13 @@ function stop_daemon() {
}
function dependency_go() {
go_version="1.21.4.linux-amd64" # Set the desired Go version here
go_version="1.21.4.linux-amd64" # Set the desired Go version here
if ! which wget tar > /dev/null ; then
apt-get install -y -qq wget tar
if ! which wget tar >/dev/null; then
apt-get install -y -qq wget tar
fi
if ! which go > /dev/null ; then
if ! which go >/dev/null; then
wget --quiet "https://go.dev/dl/go$go_version.tar.gz"
tar zxf "go$go_version.tar.gz"
export PATH="$(pwd)/go/bin:$PATH"
@ -70,12 +70,12 @@ function build_runner() {
local tmp=$(mktemp -d)
(
cd $tmp
checkout "$git"
dependency_go
cd forgejo-runner
git checkout "$version"
make build
cd $tmp
checkout "$git"
dependency_go
cd forgejo-runner
git checkout "$version"
make build
)
mv $tmp/forgejo-runner/forgejo-runner $dir
$dir/forgejo-runner --version

View file

@ -4,15 +4,15 @@
set -e
PS4='${BASH_SOURCE[0]}:$LINENO: ${FUNCNAME[0]}: '
SELF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source $SELF_DIR/forgejo-lib.sh
: ${FORGEJO_RUNNER_CONFIG:=$SELF_DIR/runner-config.yaml}
: ${DIR:=$(pwd)}
function dependencies() {
if ! which make curl daemon > /dev/null ; then
apt-get install -y -qq make curl daemon
if ! which make curl daemon >/dev/null; then
apt-get install -y -qq make curl daemon
fi
}
@ -20,32 +20,32 @@ function download() {
local runner_repository="$1"
local version="$2"
if ! which $DIR/forgejo-runner > /dev/null; then
if ! curl -L --fail -sS $runner_repository/releases/download/$version/forgejo-runner-${version#v}-linux-amd64 > $DIR/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 > $DIR/forgejo-runner
fi
chmod 755 $DIR/forgejo-runner
if ! which $DIR/forgejo-runner >/dev/null; then
if ! curl -L --fail -sS $runner_repository/releases/download/$version/forgejo-runner-${version#v}-linux-amd64 >$DIR/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 >$DIR/forgejo-runner
fi
chmod 755 $DIR/forgejo-runner
fi
}
function register() {
local forgejo="$1"
mktemp -d > $DIR/forgejo-runner-home
mktemp -d >$DIR/forgejo-runner-home
$DIR/forgejocli actions generate-runner-token | tee $DIR/forgejo-runner-token
(
cd $DIR
timeout --signal=KILL 30 $DIR/forgejo-runner register --no-interactive --instance "$forgejo" --name runner --token $(cat $DIR/forgejo-runner-token) \
--labels docker:docker://code.forgejo.org/oci/node:20-bookworm,docker-bookworm:docker://code.forgejo.org/oci/node:20-bookworm,lxc-bookworm:lxc://debian:bookworm,ubuntu-latest:docker://code.forgejo.org/oci/node:20-bookworm,self-hosted:lxc://debian:bookworm,lxc-bullseye:lxc://debian:bullseye
cd $DIR
timeout --signal=KILL 30 $DIR/forgejo-runner register --no-interactive --instance "$forgejo" --name runner --token $(cat $DIR/forgejo-runner-token) \
--labels docker:docker://code.forgejo.org/oci/node:20-bookworm,docker-bookworm:docker://code.forgejo.org/oci/node:20-bookworm,lxc-bookworm:lxc://debian:bookworm,ubuntu-latest:docker://code.forgejo.org/oci/node:20-bookworm,self-hosted:lxc://debian:bookworm,lxc-bullseye:lxc://debian:bullseye
)
}
function run() {
rm -f $DIR/forgejo-runner.log
daemon --chdir=$DIR --unsafe \
--env="TERM=$TERM" --env="HOME=$(cat $DIR/forgejo-runner-home)" --env="PATH=$PATH" --env="USER=$USER" --env="TERM=dumb" --env="USERNAME=$USERNAME" --env="LANG=$LANG" \
--pidfile=$DIR/forgejo-runner-pid --errlog=$DIR/forgejo-runner.log --output=$DIR/forgejo-runner.log -- \
$DIR/forgejo-runner --config $FORGEJO_RUNNER_CONFIG daemon
--env="TERM=$TERM" --env="HOME=$(cat $DIR/forgejo-runner-home)" --env="PATH=$PATH" --env="USER=$USER" --env="TERM=dumb" --env="USERNAME=$USERNAME" --env="LANG=$LANG" \
--pidfile=$DIR/forgejo-runner-pid --errlog=$DIR/forgejo-runner.log --output=$DIR/forgejo-runner.log -- \
$DIR/forgejo-runner --config $FORGEJO_RUNNER_CONFIG daemon
sleep 1
cat $DIR/forgejo-runner.log
}
@ -63,11 +63,11 @@ function setup() {
local forgejo="${3:-$(cat $DIR/forgejo-url)}"
dependencies
if [[ "$version" =~ ^@ ]] ; then
local branch=${version##@}
build_runner $runner_repository $branch $DIR
if [[ "$version" =~ ^@ ]]; then
local branch=${version##@}
build_runner $runner_repository $branch $DIR
else
download $runner_repository $version
download $runner_repository $version
fi
register $forgejo
run
@ -75,8 +75,8 @@ function setup() {
function teardown() {
stop_daemon forgejo-runner $DIR
if test -f $DIR/forgejo-runner-home ; then
rm -fr $(cat $DIR/forgejo-runner-home)
if test -f $DIR/forgejo-runner-home; then
rm -fr $(cat $DIR/forgejo-runner-home)
fi
}

View file

@ -3,7 +3,7 @@
set -ex
SELF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source $SELF_DIR/forgejo-lib.sh
: ${LOOPS:=80}
@ -18,8 +18,8 @@ function branch_tip() {
local repo="$2"
local branch="$3"
forgejo.sh retry forgejo-curl.sh api_json $url/api/v1/repos/$repo/branches/$branch >& /dev/null
forgejo-curl.sh api_json $url/api/v1/repos/$repo/branches/$branch | jq --raw-output .commit.id
forgejo.sh retry forgejo-curl.sh api_json $url/api/v1/repos/$repo/branches/$branch >&/dev/null
forgejo-curl.sh api_json $url/api/v1/repos/$repo/branches/$branch | jq --raw-output .commit.id
}
function get_status() {
@ -37,15 +37,15 @@ function check_status() {
local expected_status="$4"
local expected_description="$5"
get_status $url $repo $sha > /tmp/status.json
local status="$(jq --raw-output .state < /tmp/status.json)"
local description="$(jq --raw-output .statuses[0].description < /tmp/status.json)"
get_status $url $repo $sha >/tmp/status.json
local status="$(jq --raw-output .state </tmp/status.json)"
local description="$(jq --raw-output .statuses[0].description </tmp/status.json)"
if test "$status" = "$expected_status" && test -z "$expected_description" -o "$description" = "$expected_description"; then
echo OK
echo OK
elif test "$status" = "failure" -o "$status" = "success"; then
echo NOK
echo NOK
else
echo RETRY
echo RETRY
fi
}
@ -69,16 +69,16 @@ function wait_status() {
local description="$5"
for i in $(seq $LOOPS); do
if test $(check_status "$url" "$repo" "$sha" "$status" "$description") != RETRY ; then
break
fi
test "$FORGEJO_RUNNER_LOGS" && tail $FORGEJO_RUNNER_LOGS
sleep $LOOP_DELAY
if test $(check_status "$url" "$repo" "$sha" "$status" "$description") != RETRY; then
break
fi
test "$FORGEJO_RUNNER_LOGS" && tail $FORGEJO_RUNNER_LOGS
sleep $LOOP_DELAY
done
if test $(check_status "$url" "$repo" "$sha" "$status" "$description") != "OK" ; then
get_status $url $repo $sha | jq .statuses
test "$FORGEJO_RUNNER_LOGS" && cat $FORGEJO_RUNNER_LOGS
return 1
if test $(check_status "$url" "$repo" "$sha" "$status" "$description") != "OK"; then
get_status $url $repo $sha | jq .statuses
test "$FORGEJO_RUNNER_LOGS" && cat $FORGEJO_RUNNER_LOGS
return 1
fi
}
@ -95,23 +95,23 @@ function push() {
local workflows=$dir/.forgejo/workflows/*.yml
if test "$(echo $workflows)" != "$workflows"; then
sed -i \
sed -i \
-e "s|SELF|$url/$owner/$self_action|g" \
-e "s|FORGEJO_TOKEN|$token|g" \
$dir/.forgejo/workflows/*.yml
-e "s|FORGEJO_TOKEN|$token|g" \
$dir/.forgejo/workflows/*.yml
fi
(
cd $dir
git init
git checkout -b main
git config user.email root@example.com
git config user.name username
git add .
git commit -m 'initial commit'
git remote add origin $url/$owner/$project
git push --force -u origin main
sha=$(git rev-parse HEAD)
echo $sha > SHA
cd $dir
git init
git checkout -b main
git config user.email root@example.com
git config user.name username
git add .
git commit -m 'initial commit'
git remote add origin $url/$owner/$project
git push --force -u origin main
sha=$(git rev-parse HEAD)
echo $sha >SHA
)
}
@ -124,8 +124,8 @@ function push_workflow() {
local token="$6"
if test -z "$token"; then
echo missing token argument
return 1
echo missing token argument
return 1
fi
push "$directory" "$url" "$owner" "$project" "$self_action" "$token"
@ -144,8 +144,8 @@ function run_workflow() {
}
function clear_runner_cache() {
if test -f $DIR/forgejo-runner-home ; then
rm -fr $(cat $DIR/forgejo-runner-home)/.cache/act
if test -f $DIR/forgejo-runner-home; then
rm -fr $(cat $DIR/forgejo-runner-home)/.cache/act
fi
}
@ -161,24 +161,24 @@ function push_self_action() {
git diff --exit-code
git clone . $dir
(
cd $dir
rm -fr .forgejo .git
git init
git checkout -b main
git remote add origin "$url/$owner/$self_action"
git config user.email root@example.com
git config user.name username
git add .
git commit -m 'initial commit'
git push --force origin main
git tag --force $tag HEAD
git push --force origin $tag
cd $dir
rm -fr .forgejo .git
git init
git checkout -b main
git remote add origin "$url/$owner/$self_action"
git config user.email root@example.com
git config user.name username
git add .
git commit -m 'initial commit'
git push --force origin main
git tag --force $tag HEAD
git push --force origin $tag
)
}
function dependencies() {
if ! which jq curl > /dev/null ; then
apt-get -qq install -y jq curl
if ! which jq curl >/dev/null; then
apt-get -qq install -y jq curl
fi
}

View file

@ -3,7 +3,7 @@
set -e
SELF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source $SELF_DIR/forgejo-lib.sh
if ${VERBOSE:-false}; then set -x; fi
@ -15,27 +15,27 @@ function run() {
local version="$2"
if test "$version" != "1.19" && dpkg --compare-versions "$version" "lt" "1.19.0-3"; then
actions_unit="actions.actions"
actions_unit="actions.actions"
else
actions_unit="repo.actions"
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
-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 'docker exec --user 1000 '${CONTAINER}' forgejo "$@"' > $DIR/forgejocli
echo 'docker exec --user 1000 '${CONTAINER}' forgejo "$@"' >$DIR/forgejocli
chmod +x $DIR/forgejocli
echo $ip > $DIR/forgejo-ip
echo "http://$(cat $DIR/forgejo-ip):3000" > $DIR/forgejo-url
echo $ip >$DIR/forgejo-ip
echo "http://$(cat $DIR/forgejo-ip):3000" >$DIR/forgejo-url
docker exec ${CONTAINER} sed -i -e "s|localhost|$ip|" /data/gitea/conf/app.ini
docker restart ${CONTAINER}
}
@ -49,27 +49,33 @@ function setup() {
run $image $version
sleep 5 # for some reason trying to run "forgejo admin" while forgejo is booting will permanently break everything
if $DIR/forgejocli admin user list --admin | grep "$user" ; then
$DIR/forgejocli admin user change-password --username "$user" --password "$password"
if $DIR/forgejocli admin user list --admin | grep "$user"; then
$DIR/forgejocli admin user change-password --username "$user" --password "$password"
else
retry $DIR/forgejocli admin user create --admin --username "$user" --password "$password" --email "$user@example.com"
retry $DIR/forgejocli 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
#
echo "http://${user}:${password}@$(cat $DIR/forgejo-ip):3000" > $DIR/forgejo-auth-url
$DIR/forgejocli admin user generate-access-token -u $user --raw --scopes 'all,sudo' > $DIR/forgejo-token
echo "http://${user}:${password}@$(cat $DIR/forgejo-ip):3000" >$DIR/forgejo-auth-url
$DIR/forgejocli admin user generate-access-token -u $user --raw --scopes 'all,sudo' >$DIR/forgejo-token
retry forgejo-curl.sh --user "$user" --password "$password" --token @$DIR/forgejo-token login http://$(cat $DIR/forgejo-ip):3000
#
# Redundant with forgejo-curl.sh, kept around for backward compatibility 09/2023
#
( echo -n 'Authorization: token ' ; cat $DIR/forgejo-token ) > $DIR/forgejo-header
( echo "#!/bin/sh" ; echo 'curl -sS -H "Content-Type: application/json" -H @'$DIR/forgejo-header' "$@"' ) > $DIR/forgejo-api && chmod +x $DIR/forgejo-api
(
echo -n 'Authorization: token '
cat $DIR/forgejo-token
) >$DIR/forgejo-header
(
echo "#!/bin/sh"
echo 'curl -sS -H "Content-Type: application/json" -H @'$DIR/forgejo-header' "$@"'
) >$DIR/forgejo-api && chmod +x $DIR/forgejo-api
}
function teardown() {
docker stop ${CONTAINER} >& /dev/null || true
docker rm -f ${CONTAINER} >& /dev/null || true
docker stop ${CONTAINER} >&/dev/null || true
docker rm -f ${CONTAINER} >&/dev/null || true
}
"$@"