Files
awesome-coding-agents/.github/workflows/update.yml
T
tiennm99andGitHub 5d66d4757c chore: project hardening — dep swap, CI gates, dependabot, action bumps (#8)
* chore: project hardening — dep swap, CI gates, dependabot, action bumps

- swap gopkg.in/yaml.v3 (upstream archived Apr 2025) for maintained
  github.com/goccy/go-yaml; same Unmarshal API, tags unchanged
- add CI workflow: go vet/test/build + golangci-lint + govulncheck
  on PRs and main pushes
- add dependabot for gomod + github-actions (weekly)
- bump actions to latest majors in update.yml (clears Node 20
  deprecation annotations); workflow logic untouched
- README/history refreshed by E2E verification run (29 agents)

* fix: check Close/Remove error returns (errcheck)

Write paths (writeSnapshots, renderReadme) now propagate close errors —
a failed close there can hide lost data. Read/cleanup paths ignore
explicitly with _ =.
2026-08-09 02:48:03 +07:00

103 lines
3.5 KiB
YAML

name: Update rankings
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
push:
branches: [main]
paths:
- 'data/agents.yml'
- 'site/**'
- 'templates/**'
- '**.go'
- 'go.mod'
- '.github/workflows/update.yml'
permissions:
# Uses GITHUB_TOKEN intentionally — a PAT would cause infinite trigger loops
# on the auto-commit ("chore: daily ranking refresh") because GITHUB_TOKEN-authored
# pushes do NOT re-trigger workflows, whereas a PAT would.
contents: write
# Pages deploy happens in THIS workflow (a separate push-triggered Pages
# workflow would never fire — see GITHUB_TOKEN note above).
pages: write
id-token: write
concurrency:
group: update-rankings
cancel-in-progress: false
jobs:
update:
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deploy.outputs.page_url }}
steps:
- uses: actions/checkout@v7
- uses: actions/setup-go@v7
with:
go-version: 'stable'
cache: true
- name: Run updater
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: go run .
- name: Commit changes
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add README.md data/history.jsonl
if git diff --staged --quiet; then
echo "no changes"
exit 0
fi
git commit -m "chore: daily ranking refresh"
# Rebase + retry guards against the race where two runs commit near-simultaneously.
# Strategy: plain rebase first; only force-resolve bot-generated files (README.md,
# data/history.jsonl) when they are the sole conflicts. If any human-maintained file
# (e.g. data/agents.yml) conflicts, abort and fail loudly so a human can investigate.
for attempt in 1 2 3; do
if git push; then exit 0; fi
echo "push attempt $attempt rejected, rebasing on origin/main"
if git pull --rebase origin main; then
# Clean rebase — no conflicts; loop back to try push again.
continue
fi
# Rebase stopped on conflicts. Inspect which files are unresolved.
conflicted=$(git diff --name-only --diff-filter=U)
echo "conflicted files: $conflicted"
# Only auto-resolve if ALL conflicts are in bot-generated files.
non_bot=$(echo "$conflicted" | grep -v -E '^(README\.md|data/history\.jsonl)$' || true)
if [ -n "$non_bot" ]; then
echo "ERROR: conflict in human-maintained file(s): $non_bot — aborting rebase"
git rebase --abort
exit 1
fi
# Safe to force-resolve: keep our (freshest) bot-generated content.
git checkout --theirs README.md data/history.jsonl 2>/dev/null || true
git add README.md data/history.jsonl
GIT_EDITOR=true git rebase --continue
done
exit 1
# site/data.json was generated by the updater run above; deploy the
# static dashboard (site/) to GitHub Pages every run.
- name: Configure Pages
uses: actions/configure-pages@v6
with:
enablement: true
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v5
with:
path: site
- name: Deploy to GitHub Pages
id: deploy
uses: actions/deploy-pages@v5