Conversation
…mplate The platform force-pushes template branches (main/stage/develop) verbatim into every generated Work repo — BranchSyncService.syncAllBranches with forcePush: true. So anything repo-specific hardcoded here lands in all 14 instances, and per-repo edits there are destroyed on the next sync. The only durable fix is for this file to be correct in ANY repo. k8s-build.yml — the image name was hardcoded to `directory-web-template`, so every instance tried to push to the TEMPLATE package. Its GITHUB_TOKEN may only write its own package, so instance builds have failed since 2026-07-09 with: 403 Forbidden ... push ghcr.io/ever-works/directory-web-template:prod Replaced `matrix.image` with `matrix.suffix` + github.event.repository.name, so each repo pushes its OWN package. Also added an absent-Dockerfile guard: only this template carries apps/docs, so the `-docs` leg now skips cleanly instead of failing everywhere else. ci.yml — `lint-and-build` is gated to this repository. Running the full web lint+build in all 14 instances burned self-hosted runners without gating anything a Work owner acts on. Gated, not deleted (no-removal rule), so the template keeps its own CI and no future sync can restore a version that runs everywhere. Instance default branches are unprotected, so a skipped job cannot leave a required check pending.
…mplate The platform force-pushes template branches (main/stage/develop) verbatim into every generated Work repo — BranchSyncService.syncAllBranches with forcePush: true. So anything repo-specific hardcoded here lands in all 14 instances, and per-repo edits there are destroyed on the next sync. The only durable fix is for this file to be correct in ANY repo. k8s-build.yml — the image name was hardcoded to `directory-web-template`, so every instance tried to push to the TEMPLATE package. Its GITHUB_TOKEN may only write its own package, so instance builds have failed since 2026-07-09 with: 403 Forbidden ... push ghcr.io/ever-works/directory-web-template:prod Replaced `matrix.image` with `matrix.suffix` + github.event.repository.name, so each repo pushes its OWN package. Also added an absent-Dockerfile guard: only this template carries apps/docs, so the `-docs` leg now skips cleanly instead of failing everywhere else. ci.yml — `lint-and-build` is gated to this repository. Running the full web lint+build in all 14 instances burned self-hosted runners without gating anything a Work owner acts on. Gated, not deleted (no-removal rule), so the template keeps its own CI and no future sync can restore a version that runs everywhere. Instance default branches are unprotected, so a skipped job cannot leave a required check pending.
fix(ci): make template workflows repo-agnostic; gate web CI to the template
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
| ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}${{ matrix.suffix }}:${{ steps.t.outputs.tag }} | ||
| ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}${{ matrix.suffix }}:sha-${{ github.sha }} | ||
| cache-from: type=registry,ref=ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}${{ matrix.suffix }}:buildcache | ||
| cache-to: type=registry,ref=ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}${{ matrix.suffix }}:buildcache,mode=max |
There was a problem hiding this comment.
Repository casing breaks GHCR references
The image tags and registry cache references interpolate github.repository_owner and github.event.repository.name without normalization. A generated repository whose owner or name includes uppercase characters produces invalid ghcr.io/... repository references, so the build cannot publish its images or use its registry cache. Lowercase these components once and use the normalized value consistently for tags, cache-from, and cache-to.
Artifacts
Focused GHCR uppercase-reference validation source
- The executed Go source reconstructs the workflow’s two tag and shared cache-reference templates, then validates them with the Docker Distribution reference parser; it demonstrates the exact focused check.
Uppercase GHCR workflow references rejected
- Captured output of the executed original-template run with uppercase owner and repository values; all image and cache references are rejected because the repository name must be lowercase.
Lowercased GHCR workflow references accepted
- Captured output of the executed comparison run after lowercasing the owner and repository values; all equivalent image and cache references are accepted, confirming normalization resolves the failure.
Greptile SummaryThis change makes template workflows repository-aware, limits the web lint-and-build job to the canonical template repository, derives GHCR image and cache names from the current repository, and skips the documentation image when its Dockerfile is absent. The GHCR name construction was exercised with uppercase owner and repository values. The generated image and cache references were rejected because container repository names must be lowercase, so affected repositories cannot publish images or use the registry cache until the workflow normalizes those values. Confidence Score: 3/5Not safe to merge until T-Rex findings are addressed. The workflow failure was reproduced using uppercase repository components and affects image publication and registry-cache use for repositories whose names contain uppercase characters. T-Rex reproduced 2 failing behaviors at runtime in .github/workflows/k8s-build.yml; the change needs fixes before it is safe to merge. Files Needing Attention: .github/workflows/k8s-build.yml
What T-Rex did
|
Cascades #998 to
stage. Makesk8s-build.ymlderive its image name from the repo (fixing the 403 that has broken every instance's build since 2026-07-09) and gateslint-and-buildto the template. Needed onmainbecause that is the branch the platform force-pushes into the 14 Work repos.