summaryrefslogtreecommitdiff
path: root/.ci-make.sh
diff options
context:
space:
mode:
authorcrystal <crystal@noreply.codeberg.org>2023-02-06 03:29:43 -0700
committercrystal <crystal@noreply.codeberg.org>2023-02-06 03:29:43 -0700
commit514499661e8a567e26b8281e0f505c8601ff2edf (patch)
tree4c8b0c7dcfaff81efd503d7d190a18b9caadbf49 /.ci-make.sh
initial commit
Diffstat (limited to '.ci-make.sh')
-rwxr-xr-x.ci-make.sh118
1 files changed, 118 insertions, 0 deletions
diff --git a/.ci-make.sh b/.ci-make.sh
new file mode 100755
index 0000000..f402daa
--- /dev/null
+++ b/.ci-make.sh
@@ -0,0 +1,118 @@
+#!/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 seconds..."
+ sleep $CI_VERIFY_RETRY
+ ;;
+ *)
+ 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 --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")
+ apt install ./"$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 --config /etc/forgejo/app.ini &
+ sleep 10
+ curl http://localhost:3000/
+ exit $?
+ ;;
+esac
+