Commit Graph

3 Commits

Author SHA1 Message Date
Jordan Ritter 4fd823c56f fix(ci): add allowlist to GHCR drift audit to prevent false positives
The audit checks repository == null on the Packages API to detect
unlinked packages. But some packages (showcase-pocketbase) have Actions
access configured manually via the UI, so pushes work fine despite
repository being null. There is no API to detect manual Actions access,
so this adds an explicit VERIFIED_ACCESS allowlist that excludes
known-good packages from the alert.
2026-04-29 11:33:55 -07:00
Jordan Ritter affa31dc6c refactor(showcase): update CI/CD workflows for showcase-harness rename
Update showcase_deploy.yml: change detection filter key
(showcase_ops → showcase_harness), deploy matrix entry, dispatch
option name, notify job name (notify-ops → notify-harness), and
GitHub secret references (SHOWCASE_OPS_* → SHOWCASE_HARNESS_*).

Update showcase_keep-alive.yml and ghcr_unlinked_packages.yml
comment references.
2026-04-28 13:48:20 -07:00
Jordan Ritter 45772ce1da feat(ci): daily GHCR unlinked-package audit + Slack alert
Adds a scheduled GitHub Actions workflow that detects when CopilotKit
org container packages drift into an unlinked state (`repository: null`
on the GHCR API) and posts a Slack alert with deep links to the UI fix.

This drift breaks future workflow builds with `403 Forbidden` on push
to GHCR — the workflow `GITHUB_TOKEN` only has package-write
permissions when the package is linked to the actor's repo. We hit
this twice in quick succession: `showcase-ops` (caught manually after
a failed deploy) and `showcase-pocketbase` (caught by a preemptive
scan). There is no GitHub API to programmatically link a package to
a repo — it is UI-only — so the only way to prevent future surprises
is to detect drift early.

Schedule: daily at 14:00 UTC, plus `workflow_dispatch` for ad-hoc
runs. Exits 0 on drift (the Slack message IS the alert; failing the
workflow on a schedule would create noisy red CI checks).

Requires two new repo secrets:
- `ORG_READ_PACKAGES_PAT` (read:packages, org-scoped to CopilotKit)
- `SLACK_WEBHOOK_GHCR_DRIFT` (CopilotKit-internal alerts webhook)

Workflow fails loudly if the PAT is missing; logs a warning and
continues if the webhook is missing.
2026-04-26 17:28:46 -07:00