#!/bin/sh CI_VERIFY_API="https://codeberg.org" # Query the Forgejo API at this URL to check upstream CI status CI_VERIFY_REPO="forgejo/forgejo" # Check this repo at the Forgejo API for upstream CI status CI_VERIFY_RETRY_TIME=120 # How long to wait in seconds before retrying if the pipeline is pending CI_VERIFY_RETRY_COUNT=30 # How many times to retry before giving up if the pipeline is pending case "$1" in "submodule-build") cd "$2" make build EXIT_STATUS=$? mv gitea ../"$3" exit $EXIT_STATUS ;; "submodule-make") cd "$2" shift;shift make "$@" exit $? ;; "ci-verify") RETRY_LOOPS=0 while [ $RETRY_LOOPS -le $CI_VERIFY_RETRY_COUNT ] ; do RETRY_LOOPS=$(($RETRY_LOOPS + 1)) CURRENT_COMMIT=$(git submodule status "$2/" | cut -d ' ' -f2) CI_VERIFY=$(curl $CI_VERIFY_API/api/v1/repos/$CI_VERIFY_REPO/commits/$CURRENT_COMMIT/status | jq --jsonargs .state) case "$CI_VERIFY" in '"success"') echo "CI pipeline passed!" exit 0 ;; '"pending"') echo "CI pipeline still pending, checking again in $CI_VERIFY_RETRY_TIME seconds..." sleep $CI_VERIFY_RETRY_TIME ;; *) echo "ERROR: Bad pipeline status $CI_VERIFY" exit 1 ;; esac done exit 255 ;; "download-binary") if [ $CI_COMMIT_TAG ] ; then CI_RELEASE_ASSETS=$(curl $CI_VERIFY_API/api/v1/repos/$CI_VERIFY_REPO/releases/tags/$CI_COMMIT_TAG | jq -c '.assets[]' | grep linux-amd64) CI_RELEASE_BINARY_URL=$(echo "$CI_RELEASE_ASSETS" | grep linux-amd64\" | jq -r --jsonargs .browser_download_url) CI_RELEASE_SHA256=$(curl $(echo "$CI_RELEASE_ASSETS" | grep linux-amd64.sha256\" | jq -r --jsonargs .browser_download_url) | cut -d ' ' -f1) wget -nv --content-disposition $CI_RELEASE_BINARY_URL DOWNLOAD_SHA256=$(sha256sum forgejo-*-linux-amd64 | cut -d ' ' -f1) if [ $CI_RELEASE_SHA256 != $DOWNLOAD_SHA256 ] ; then echo "ERROR: Downloaded file didn't match expected SHA256 sum" exit 1 fi mv forgejo-*-linux-amd64 $2 chmod +x $2 exit 0 else echo "not a tag, skipping download" exit 0 fi ;; "package-prep") mkdir deb/forgejo-bin mkdir deb/forgejo-sqlite-bin mv forgejo-bin deb/forgejo-bin/forgejo mv forgejo-sqlite-bin deb/forgejo-sqlite-bin/forgejo if [ -x forgejo-bin-dl ] ; then mkdir deb/forgejo-bin-dl mv forgejo-bin-dl deb/forgejo-bin-dl/forgejo mv deb/.forgejo-bin.install deb/debian/forgejo-bin.install ln -s forgejo.preinst deb/debian/forgejo-bin.preinst ln -s forgejo.postinst deb/debian/forgejo-bin.postinst ln -s forgejo.prerm deb/debian/forgejo-bin.prerm echo >> deb/debian/control cat deb/.forgejo-bin.control >> deb/debian/control fi ;; "package-build") cd deb dpkg-buildpackage -b exit $? ;; "package-clean") rm *dbgsym*.deb || true exit 0 ;; "pkg-gen-sha256") for deb in *.deb ; do sha256sum $deb > $deb.sha256 done ;; "preview-sha256") for p in *.sha256 ; do echo $p cat $p done ;; "test-userinst-prep") cp ./etc/default/forgejo /etc/default/forgejo mkdir -p /etc/systemd/system/forgejo.service.d cp ./etc/systemd/system/forgejo.service.d/override.conf /etc/systemd/system/forgejo.service.d/override.conf ;; "install-run-test") export DEBIAN_FRONTEND=noninteractive apt update apt install -y ./"$2" [ -f "/etc/default/forgejo" ] && . /etc/default/forgejo [ -z "$FORGEJO_HOME" ] && FORGEJO_HOME=/var/lib/forgejo [ -z "$FORGEJO_USER" ] && FORGEJO_USER=forgejo sudo -u $FORGEJO_USER USER=$FORGEJO_USER \ HOME=$FORGEJO_HOME GITEA_WORK_DIR=$FORGEJO_HOME \ forgejo web -q --config /etc/forgejo/app.ini & sleep 10 curl http://localhost:3000/ | grep -A 4 "Powered by Forgejo" exit $? ;; "install-repo-test") export DEBIAN_FRONTEND=noninteractive apt update -qq apt install -y apt-utils apt-listchanges apt install -y ./"$2" apt update -qq apt upgrade -y apt update -qq apt install -y "$3" sudo -u forgejo USER=forgejo \ HOME=/var/lib/forgejo GITEA_WORK_DIR=/var/lib/forgejo \ forgejo web -q --config /etc/fogejo/app.ini & sleep 10 curl http://localhost:3000/ | grep -A 4 "Powered by Forgejo" exit $? ;; "verify-data-dir-chmod") DATA_DIR_CHMOD="$(stat -c %a /var/lib/forgejo)" if [ "$DATA_DIR_CHMOD" = "750" ]; then exit 0 else exit 100 fi ;; "force-clean-forgejo") export DEBIAN_FRONTEND=noninteractive apt install -y psmisc killall forgejo exit $? ;; "forgejo-test-deps") echo "deb http://deb.debian.org/debian/ bookworm-backports main contrib" > /etc/apt/sources.list.d/backports.list export DEBIAN_FRONTEND=noninteractive apt update -qq apt install -qq --no-install-recommends -y git-lfs apt install -qq -y -t bookworm-backports golang-$DEP_GOLANG_VER ln -sf /usr/lib/go-$DEP_GOLANG_VER/bin/go /usr/local/bin/go adduser --quiet --comment forgejo --disabled-password forgejo chown -R forgejo:forgejo . if [ "$DEP_GOLANG_NODEB_REV" ];then su forgejo -c "./.ci-make.sh forgejo-test-deps_upgrade-go $DEP_GOLANG_VER $DEP_GOLANG_NODEB_REV" fi ;; "forgejo-test-deps_upgrade-go") go install golang.org/dl/go$2.$3@latest ln -s ~/go/bin/go$2.$3 ~/go/bin/go export PATH="$HOME/go/bin:$PATH" go download go version ;; esac