hermes-agent/.github/workflows
Teknium 5e685999af
fix(ci): make the CI timing report unflakeable (#59818)
The 'CI timing report' job is pure observability — it collects per-job/step
durations from the GitHub API after the run and publishes an HTML gantt
report + PR-vs-main timing diff. It gates nothing (all-checks-pass does not
include it), yet it could redden a PR: the script makes dozens of paginated
API calls with the shared repo GITHUB_TOKEN and had zero retry handling, so
a single 403 (rate-limit burst when several PRs run CI concurrently) failed
the job. Observed twice in a row on PR #59805.

- api_get(): retry 403/429/5xx and connection errors with exponential
  backoff, honoring Retry-After / X-RateLimit-Reset (max 5 attempts, 120s
  cap). Non-transient statuses (404 etc.) still fail fast.
- main(): exhausted retries raise TimingsUnavailable, caught to emit a
  degraded summary line + placeholder HTML artifact and exit 0 — a metrics
  collector must never fail the PR's checks. No timings JSON is written on
  the degraded path so an empty baseline can never be cached.
- ci.yml: baseline-save steps on main skip gracefully when no JSON exists.

Verified with a mocked urlopen harness: retry-then-success (3 attempts),
exhausted-retries -> TimingsUnavailable, 404 fails fast without retry,
degraded main() exits 0 with summary + placeholder and no JSON, and the
--from-json happy path is unchanged.
2026-07-06 12:44:07 -07:00
..
ci.yml fix(ci): make the CI timing report unflakeable (#59818) 2026-07-06 12:44:07 -07:00
contributor-check.yml ci: refactor paths & clones 2026-06-23 09:30:50 -07:00
deploy-site.yml fix(docs): reuse healthy skills index during Pages deploys (#45616) 2026-06-13 06:46:07 -07:00
docker-lint.yml change(ci): docker-publish.yml -> docker.yml 2026-06-26 19:15:18 -07:00
docker.yml security(ci): pass untrusted refs through env, not run: interpolation 2026-07-03 12:44:30 -04:00
docs-site-checks.yml ci: refactor paths & clones 2026-06-23 09:30:50 -07:00
history-check.yml ci: refactor paths & clones 2026-06-23 09:30:50 -07:00
lint.yml security(ci): pass untrusted refs through env, not run: interpolation 2026-07-03 12:44:30 -04:00
osv-scanner.yml ci: refactor paths & clones 2026-06-23 09:30:50 -07:00
skills-index-freshness.yml feat(skills-hub): health checks, freshness badge, and a watchdog cron (#32345) 2026-05-25 23:10:45 -07:00
skills-index.yml change(ci): upload-artifact from v4 -> v7 2026-06-26 19:15:18 -07:00
supply-chain-audit.yml ci: refactor paths & clones 2026-06-23 09:30:50 -07:00
tests.yml change(ci): slice files in matrix job 2026-06-26 19:15:18 -07:00
typecheck.yml change(ci): pretty names 2026-06-26 19:15:18 -07:00
upload_to_pypi.yml change(ci): upload-artifact from v4 -> v7 2026-06-26 19:15:18 -07:00
uv-lockfile-check.yml change(ci): update all UV installs 2026-06-26 19:15:18 -07:00