update/navibeat
 1#!/usr/bin/env bash
 2set -euo pipefail
 3
 4FORGEJO_TOKEN="${FORGEJO_TOKEN:?FORGEJO_TOKEN not set}"
 5
 6export NIXPKGS_ALLOW_UNFREE=1
 7
 8MAIN_BRANCH=$(git symbolic-ref --short HEAD)
 9REPO_REMOTE_URL=$(git remote get-url origin)
10
11if [[ "$FORGEJO_TOKEN" =~ ^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$ ]]; then
12	IS_JWT=1
13else
14	IS_JWT=0
15fi
16
17fj auth add-token "$FORGEJO_TOKEN"
18
19if [[ "$REPO_REMOTE_URL" == https://* ]]; then
20	if [[ "$IS_JWT" -eq 1 ]]; then
21		FORGEJO_HOST="${REPO_REMOTE_URL#https://}"
22		FORGEJO_HOST="${FORGEJO_HOST%%/*}"
23		git config --local "http.https://${FORGEJO_HOST}/.extraHeader" "Authorization: Bearer ${FORGEJO_TOKEN}"
24	else
25		git remote set-url origin "https://oauth2:${FORGEJO_TOKEN}@${REPO_REMOTE_URL#https://}"
26	fi
27fi
28
29git config user.name "Ineffa"
30git config user.email "ineffa@noreply.git.trin.one"
31
32FAILED=""
33PENDING=""
34
35update_pkg() {
36	local PKG="$1"
37	local OLD_VERSION NEW_VERSION
38
39	git checkout -f "$MAIN_BRANCH"
40	git checkout -- . 2>/dev/null || true
41	git clean -fd -- pkgs/ 2>/dev/null || true
42
43	if git ls-remote --exit-code origin "refs/heads/update/$PKG" >/dev/null 2>&1; then
44		echo ">>> $PKG: PR already open, skipping"
45		PENDING="$PENDING $PKG"
46		return
47	fi
48
49	OLD_VERSION=$(nix-instantiate --eval --strict -A "$PKG.version" . 2>/dev/null | tr -d '"')
50
51	if ! ./scripts/update-package "$PKG"; then
52		echo ">>> $PKG: update script failed" >&2
53		FAILED="$FAILED $PKG"
54		return
55	fi
56
57	if [ -z "$(git status --porcelain -- pkgs/)" ]; then
58		echo ">>> $PKG: no changes"
59		return
60	fi
61
62	if ! nix-instantiate --show-trace -A "$PKG" . >/dev/null 2>&1; then
63		echo ">>> $PKG: evaluation failed after update" >&2
64		FAILED="$FAILED $PKG"
65		return
66	fi
67
68	NEW_VERSION=$(nix-instantiate --eval --strict -A "$PKG.version" . 2>/dev/null | tr -d '"')
69
70	python3 ./scripts/gen-readme.py
71
72	git switch -c "update/$PKG"
73	git add -A
74	git commit -m "$PKG: $OLD_VERSION -> $NEW_VERSION"
75	git push --set-upstream origin "update/$PKG"
76	fj pr create "$PKG: $OLD_VERSION -> $NEW_VERSION" \
77		--body "Automated update by CI.
78
79$PKG: \`$OLD_VERSION\` -> \`$NEW_VERSION\`"
80}
81
82for PKG in $(./scripts/update-package --list | jq -r '.[]'); do
83	echo "::group::$PKG"
84	update_pkg "$PKG"
85	echo "::endgroup::"
86done
87
88if [ -n "$PENDING" ]; then
89	echo ""
90	echo "Pending (PR already open):$PENDING"
91fi
92if [ -n "$FAILED" ]; then
93	echo ""
94	echo "Finished with failures:$FAILED" >&2
95	exit 1
96fi
97echo ""
98echo "All packages up to date."