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: install nix uses: cachix/install-nix-action@v27 with: nix_path: nixpkgs=channel:nixos-unstable - 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"])') export LATEST_VERSION="$latest_version" export NEW_HASH="$new_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: ${{ secrets.tea_token }} shell: bash run: | set -euo pipefail api="https://gitea.unrail.xyz/api/v1/repos/thomas/nixos-config" branch="bot/handy-${{ steps.update.outputs.version }}" echo "Checking for existing PRs..." existing=$(curl -sS \ -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 echo "Creating PR..." curl -sS -X POST \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ "${api}/pulls" \ -d "$(cat <