From a89ef7c9ea9703bf0b34063576efbf0aa0ba8f15 Mon Sep 17 00:00:00 2001 From: "thomas g. lopes" Date: Mon, 9 Mar 2026 15:39:14 +0000 Subject: [PATCH] handy --- .gitea/workflows/handy-update.yml | 114 ++++++++++++++++++++++++++++++ modules/packages.nix | 3 +- modules/pkgs/handy.nix | 28 ++++++++ modules/pkgs/zen-browser.nix | 3 +- 4 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 .gitea/workflows/handy-update.yml create mode 100644 modules/pkgs/handy.nix diff --git a/.gitea/workflows/handy-update.yml b/.gitea/workflows/handy-update.yml new file mode 100644 index 0000000..fed5429 --- /dev/null +++ b/.gitea/workflows/handy-update.yml @@ -0,0 +1,114 @@ +name: handy update + +on: + schedule: + - cron: "40 6 * * *" + workflow_dispatch: + +jobs: + update-handy: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: check latest handy release and update file + id: update + shell: bash + run: | + set -euo pipefail + + FILE="modules/pkgs/handy.nix" + + current_version=$(python - <<'PY' + import re + s=open('modules/pkgs/handy.nix').read() + m=re.search(r'version\s*=\s*"([^"]+)";', s) + print(m.group(1) if m else "") + PY + ) + + latest_version=$(python - <<'PY' + import json, urllib.request + url='https://api.github.com/repos/cjpais/Handy/releases/latest' + with urllib.request.urlopen(url) as r: + data=json.load(r) + tag=data.get('tag_name','').lstrip('v') + print(tag) + PY + ) + + echo "current=$current_version" + echo "latest=$latest_version" + + if [ -z "$latest_version" ] || [ "$latest_version" = "$current_version" ]; then + echo "updated=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + url="https://github.com/cjpais/Handy/releases/download/v${latest_version}/Handy_${latest_version}_amd64.AppImage" + new_hash=$(nix store prefetch-file --json "$url" | python -c 'import json,sys; print(json.load(sys.stdin)["hash"])') + + python - <> "$GITHUB_OUTPUT" + echo "version=$latest_version" >> "$GITHUB_OUTPUT" + + - name: create branch and commit + if: steps.update.outputs.updated == 'true' + shell: bash + run: | + set -euo pipefail + branch="bot/handy-${{ steps.update.outputs.version }}" + + git config user.name "gitea actions" + git config user.email "actions@localhost" + + git checkout -B "$branch" + git add modules/pkgs/handy.nix + git commit -m "update handy to ${{ steps.update.outputs.version }}" + git push --force origin "$branch" + + - name: open pull request + if: steps.update.outputs.updated == 'true' + env: + GITEA_TOKEN: ${{ gitea.token }} + shell: bash + run: | + set -euo pipefail + + api="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}" + branch="bot/handy-${{ steps.update.outputs.version }}" + + existing=$(curl -fsS \ + -H "Authorization: token ${GITEA_TOKEN}" \ + "${api}/pulls?state=open" \ + | python -c 'import json,sys; d=json.load(sys.stdin); b="'"$branch"'"; print(next((str(pr["number"]) for pr in d if pr.get("head",{}).get("ref")==b), ""))') + + if [ -n "$existing" ]; then + echo "PR already exists: #$existing" + exit 0 + fi + + curl -fsS -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${api}/pulls" \ + -d "$(cat <