main
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."