diff options
| author | crystal <crystal@noreply.codeberg.org> | 2023-02-06 03:29:43 -0700 | 
|---|---|---|
| committer | crystal <crystal@noreply.codeberg.org> | 2023-02-06 03:29:43 -0700 | 
| commit | 514499661e8a567e26b8281e0f505c8601ff2edf (patch) | |
| tree | 4c8b0c7dcfaff81efd503d7d190a18b9caadbf49 /.ci-make.sh | |
initial commit
Diffstat (limited to '.ci-make.sh')
| -rwxr-xr-x | .ci-make.sh | 118 | 
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 +		  | 
