ci: adopt detect-changes gating, runloopai actions, pnpm 10 workspace security pins, drop ink-big-text#243
Open
jason-rl wants to merge 4 commits into
Open
ci: adopt detect-changes gating, runloopai actions, pnpm 10 workspace security pins, drop ink-big-text#243jason-rl wants to merge 4 commits into
jason-rl wants to merge 4 commits into
Conversation
5472e66 to
9e756d9
Compare
Comment on lines
+10
to
+23
| name: Check dependency age | ||
| runs-on: ubuntu-latest | ||
|
|
||
| steps: | ||
| - name: Check out Git repository | ||
| uses: runloopai/checkout@main | ||
|
|
||
| - name: Check dependency age (supply-chain gate) | ||
| uses: runloopai/lisan-al-gaib-action@main | ||
| with: | ||
| ecosystems: npm | ||
| min-age-days: '7' | ||
| warn-age-days: '14' | ||
| bypass-keyword: 'bypass-age-gate' |
121f99f to
eb1d883
Compare
eb1d883 to
d29b861
Compare
… overrides, drop ink-big-text Adapts runloopai/runloop-fe#1919's CI-consolidation and supply-chain patterns into rl-cli. CI (ci.yml): - detect-changes job gates all check jobs (format/lint/build/test) via tj-actions/changed-files path groups + yq-enumerated self-change detection - Conditional runs-on (ubuntu-latest when running, ubuntu-slim when skipping) and job-level if: ensures required status checks satisfy the branch ruleset even when skipped - Push trigger on main with push-aware concurrency (run_id key, never cancels) - runloopai/* action wrappers throughout (checkout, pnpm-action, setup-node, github-script, upload-artifact) - Removes the old aggregator job (ready-to-merge) and the inlined dependency-check job (now a separate dependency-age-check.yml) dependency-age-check.yml: adds push trigger with path filters so the supply-chain gate re-runs on main merges that touch lockfiles. pnpm 10 + security overrides: - Bumps packageManager to pnpm@10.33.0 and moves pnpm field to pnpm-workspace.yaml (pnpm 10 ignores package.json#pnpm) - Overrides keyed by Dependabot advisory vulnerable_version_range with exact first_patched_version values (no carets) for 23 CVE advisories - minimumReleaseAge: 10080 (7 days) with @runloop/api-client excluded ink-big-text: replaced runtime cfonts rendering with a pre-rendered BANNER_ART template literal; removes the cfonts/window-size/define-property transitive dep subtree. Divergences from runloop-fe#1919 (intentional): - Job IDs kept lowercase with hyphens (detect-changes, not detect_changes) and no job-level name: fields — branch ruleset requires bare job IDs as required status checks - node-version: "20" explicit (no .nvmrc in this repo) - yq bracket path .jobs["detect-changes"].outputs for hyphenated job ID - jobToOutputKey = {} (no shard jobs in rl-cli) - minimumReleaseAge: 10080 minutes (7 days, matching lisan-al-gaib min-age-days)
d29b861 to
7574efb
Compare
609b8cf to
9034de6
Compare
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.
Description
Adapts the CI consolidation and supply-chain hardening patterns from
runloopai/runloop-fe#1919into rl-cli, and removes theink-big-textruntime dependency.Type of Change
Related Issues
Closes #
Changes Made
ci.yml— adopt runloop-fe#1919 patternsdetect-changesjob: gatesformat/lint/build/testviatj-actions/changed-files(SHA-pinned) + inlinedci.ymlself-change detection. Self-change detection now enumerates job keys viayqrather than a hardcoded list, so new jobs are automatically detected.runloopai/*action wrappers:runloopai/checkout@main,runloopai/pnpm-action@master,runloopai/setup-node@main,runloopai/github-script@main,runloopai/upload-artifact@mainthroughout. Third-partytj-actions/changed-filesremains SHA-pinned.mainwith push-aware concurrency (run_idkey for push — never cancels main builds;refkey for PRs — cancels superseded runs).runs-on: when a job will do real work it getsubuntu-latest; when skipped it stays onubuntu-slim. Job-levelif:withfailure() || (success() && (pull_request || output != 'false'))ensures required status checks always report even when skipped.name:fields: GitHub uses the job ID as the status-check context whenname:is absent. Omitting them preserves the lowercase-hyphen job-ID contexts the branch ruleset requires (detect-changes,format,lint,build,test).ready-to-mergeaggregator and the old inlineddependency-checkjob.dependency-age-check.yml— separated supply-chain gateMoves the dependency age gate out of
ci.ymlinto its own workflow usingrunloopai/lisan-al-gaib-action@main(already in place). Adds apushtrigger with path filters so the gate re-runs on main merges that touch the lockfile or workspace configuration.release.yml— App token for release-please (unchanged from prior commit)actions/create-github-app-token@v3mints a short-lived token for release-please so its PRs fire a normalpull_requestevent, eliminating the need forpull_request_target.pnpm 10 +
pnpm-workspace.yaml— security pinspackageManagertopnpm@10.33.0and removes the"pnpm"field frompackage.json(pnpm 10 reads these settings frompnpm-workspace.yamlinstead).pnpm-workspace.yaml:minimumReleaseAge: 10080(7-day supply-chain gate matchinglisan-al-gaib'smin-age-days),@runloop/api-clientexcluded from the age gate,onlyBuiltDependencies: [esbuild].vulnerable_version_range, value is the exactfirst_patched_version(no carets). Replaces the old scoped/caret-based overrides inpackage.json#pnpm.ink-big-textremovalsrc/components/Banner.tsx: replaces the runtimecfonts/ink-big-text render with a pre-renderedBANNER_ARTtemplate literal, removing thecfonts/window-sizetransitive dependency subtree.jest.mock("ink-big-text", …)from all three test setup files and removesink-big-textfromjest.config.jstransformIgnorePatterns.Lockfile hygiene
.gitattributes:pnpm-lock.yaml -merge linguist-vendored(prevents garbage merge conflicts; drops lockfile from GitHub language stats)..prettierignore: addspnpm-lock.yaml.Testing
pnpm run build(tsc) → cleanpnpm run lint→ 0 errors (pre-existing warnings only)pnpm run format:check→ passespnpm run test:components→ 34 suites, 296 tests passactionlint .github/workflows/ci.yml .github/workflows/dependency-age-check.yml→ cleanyq -r '.jobs | keys | .[]'andyq -r '.jobs["detect-changes"].outputs | keys | .[]'onci.ymlreturn expected keysEnd-to-end caveat: the
detect-changes/yq/self-change logic and thedependency-check/minimumReleaseAgeage gates only fully exercise in GitHub Actions and depend onyqbeing present onubuntu-slim. First CI run on this PR is the real validation.Manual prerequisites before merging:
contents: write+pull-requests: write, install it on this repo, and add repo secretsDEPLOY_APP_CLIENT_IDandDEPLOY_APP_PRIVATE_KEY. Also ensure Settings → Actions → "Allow GitHub Actions to create and approve pull requests" is enabled.ready-to-mergeand adddetect-changesso the full required set is:detect-changes,format,lint,build,test,dependency-check,pr-title-check. Ifdetect-changesis omitted, a runner outage silently skips all downstream jobs and unblocks merge.Checklist