ci: split CI into reusable workflows with an orchestrator - #65
Merged
Conversation
Refactor the monolithic ci.yml into per-purpose reusable workflows (_test, _lint, _pr-title, _preview, _console, _screenshots), each `on: workflow_call`, orchestrated by ci.yml which calls them as jobs and aggregates their results into the single `All checks green` gate. Mirrors the dcd-monorepo pattern (reusable phases + inline aggregator). Behaviour and the required "All checks green" context are unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Primajin
temporarily deployed
to
pr-preview/pr-65
August 20, 2026 13:13 — with
GitHub Actions
Inactive
Owner
Author
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
Contributor
|
Contributor
Console Logs✅ No logs were captured |
Contributor
2026-08-20T13:15:15.377Z-iPad_Pro_landscape-88aaa38.png2026-08-20T13:15:15.377Z-iPad_Pro-88aaa38.png2026-08-20T13:15:15.377Z-iPhone_13-88aaa38.png |
Contributor
There was a problem hiding this comment.
Pull request overview
Refactors the repository’s GitHub Actions CI pipeline by splitting the previously monolithic .github/workflows/ci.yml into multiple reusable workflows (_*.yml) and turning ci.yml into an orchestrator that runs those phases and preserves the single required “All checks green” gate.
Changes:
- Replaced inline job definitions in
ci.ymlwith reusable-workflow calls for test, lint, PR title, preview deploy, console logs, and screenshots. - Added reusable workflows for each CI phase (
_test,_lint,_pr-title,_preview,_console,_screenshots). - Kept the “All checks green” aggregator job as the single status gate while allowing individual phase jobs to be skipped without failing the gate.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| .github/workflows/ci.yml | Orchestrates reusable workflows and aggregates results into the “All checks green” gate. |
| .github/workflows/_test.yml | Reusable workflow for Node install + coverage + Codecov upload. |
| .github/workflows/_lint.yml | Reusable workflow for linting and auto-fix (incl. GPG setup). |
| .github/workflows/_pr-title.yml | Reusable workflow for PR title syncing + semantic PR title validation. |
| .github/workflows/_preview.yml | Reusable workflow to build and deploy PR previews with gh-pages concurrency control. |
| .github/workflows/_console.yml | Reusable workflow to poll preview URL and collect console logs. |
| .github/workflows/_screenshots.yml | Reusable workflow to poll preview URL and capture screenshots + upload artifacts. |
Suppressed comments (2)
.github/workflows/ci.yml:66
secrets: inheritis unnecessary for this job and broadens secret exposure to the called workflow (which runs third-party actions). Prefergithub.tokenin the reusable workflow and avoid inheriting all secrets here.
uses: ./.github/workflows/_screenshots.yml
secrets: inherit
.github/workflows/_pr-title.yml:103
- Use
github.tokenfor the semantic PR action instead ofsecrets.GITHUB_TOKENso this reusable workflow doesn't require inheriting secrets from the caller.
- uses: amannn/action-semantic-pull-request@v6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+36
to
+37
| uses: ./.github/workflows/_pr-title.yml | ||
| secrets: inherit |
Comment on lines
+45
to
+46
| uses: ./.github/workflows/_preview.yml | ||
| secrets: inherit |
Comment on lines
+55
to
+56
| uses: ./.github/workflows/_console.yml | ||
| secrets: inherit |
Comment on lines
+13
to
+16
| - uses: actions/github-script@v9 | ||
| with: | ||
| github-token: ${{ secrets.GITHUB_TOKEN }} | ||
| script: | |
Comment on lines
+37
to
+43
| - name: Use WebApp Console Log Action | ||
| uses: Primajin/webapp-console-log-action@v1.8.2 | ||
| with: | ||
| webapp-url: ${{ env.PREVIEW_URL }} | ||
| regexp-error: 'Failed \D+ 404 \(\)' | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
Comment on lines
+37
to
+47
| - name: screenshots-ci-action | ||
| uses: Primajin/screenshots-ci-action@v3 | ||
| with: | ||
| devices: iPhone 13,iPad Pro,iPad Pro landscape | ||
| fullPage: false | ||
| noDesktop: true | ||
| releaseId: 315671617 | ||
| type: png | ||
| url: ${{ env.PREVIEW_URL }} | ||
| env: | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Refactors the monolithic
ci.ymlinto per-purpose reusable workflows (_test,_lint,_pr-title,_preview,_console,_screenshots, eachon: workflow_call) orchestrated byci.yml, which calls them as jobs and aggregates results into the singleAll checks greengate — mirroring the dcd-monorepo pattern (reusable phases + inline aggregator). Thegh-pagesconcurrency lives inside_preview.yml(invoked only on PRs). Behaviour and the requiredAll checks greencontext are unchanged.