mirror of
https://code.forgejo.org/actions/setup-forgejo
synced 2025-07-10 10:46:00 +02:00
forgejo-binary runs forgejo from binary instead of OCI
This commit is contained in:
parent
0dee755317
commit
c18ce57fad
5 changed files with 223 additions and 5 deletions
121
forgejo-binary.sh
Executable file
121
forgejo-binary.sh
Executable file
|
@ -0,0 +1,121 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
set -e
|
||||
|
||||
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
|
||||
|
||||
dependencies
|
||||
adduser --quiet --comment $user --disabled-password $user
|
||||
adduser $user sudo
|
||||
adduser $user docker
|
||||
sed -i -e 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/' /etc/sudoers
|
||||
}
|
||||
|
||||
function dependencies() {
|
||||
maybe_sudo
|
||||
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
|
||||
}
|
||||
|
||||
function cleanup_logs() {
|
||||
local work_path=$DIR/forgejo-work-path
|
||||
|
||||
rm -f $DIR/*.log
|
||||
rm -f $work_path/log/*.log
|
||||
}
|
||||
|
||||
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
|
||||
chmod +x $DIR/forgejo
|
||||
fi
|
||||
echo $DIR/forgejo --version
|
||||
$DIR/forgejo --version
|
||||
}
|
||||
|
||||
function create_user() {
|
||||
local user="$1"
|
||||
local password="$2"
|
||||
local work_path=$DIR/forgejo-work-path
|
||||
|
||||
if test -f $work_path/forgejo-token; then
|
||||
return
|
||||
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
|
||||
export DOT=$DIR
|
||||
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
|
||||
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
|
||||
}
|
||||
|
||||
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 '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
|
||||
chmod +x $DIR/forgejocli
|
||||
hostname -I | cut -f1 -d' ' > $DIR/forgejo-ip
|
||||
}
|
||||
|
||||
function reset_forgejo() {
|
||||
local config=$1
|
||||
local work_path=$DIR/forgejo-work-path
|
||||
rm -fr $work_path
|
||||
mkdir -p $work_path
|
||||
WORK_PATH=$work_path envsubst < $SELF_DIR/$config-app.ini > $work_path/app.ini
|
||||
}
|
||||
|
||||
function teardown() {
|
||||
stop_daemon forgejo $DIR
|
||||
cleanup_logs
|
||||
}
|
||||
|
||||
function setup() {
|
||||
local user="${1:-root}"
|
||||
local password="${2:-admin1234}"
|
||||
local url="${3:-https://codeberg.org/forgejo/forgejo/releases/download/v1.21.2-1/forgejo-1.21.2-1-linux-amd64}"
|
||||
|
||||
dependencies
|
||||
download "$url"
|
||||
reset_forgejo forgejo-binary
|
||||
start_forgejo
|
||||
create_user "$user" "$password"
|
||||
}
|
||||
|
||||
mkdir -p $DIR
|
||||
|
||||
"$@"
|
Loading…
Add table
Add a link
Reference in a new issue