Skip to content

Commit d29b861

Browse files
committed
ci: adopt detect-changes gating, runloopai actions, pnpm 10 workspace 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)
1 parent 6203000 commit d29b861

13 files changed

Lines changed: 595 additions & 332 deletions

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pnpm-lock.yaml -merge linguist-vendored

.github/workflows/ci.yml

Lines changed: 342 additions & 117 deletions
Large diffs are not rendered by default.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Dependency Age Check
2+
3+
on:
4+
push:
5+
branches: [main]
6+
paths:
7+
- .github/workflows/dependency-age-check.yml
8+
- pnpm-workspace.yaml
9+
- pnpm-lock.yaml
10+
pull_request:
11+
branches: [main]
12+
# labeled/unlabeled needed so the bypass-age-gate label re-triggers the gate
13+
types: [opened, synchronize, reopened, labeled, unlabeled]
14+
15+
concurrency:
16+
group: ${{ github.workflow }}-${{ github.event_name == 'push' && github.run_id || github.ref }}
17+
18+
jobs:
19+
dependency-check:
20+
name: Check dependency age
21+
runs-on: ubuntu-latest
22+
23+
steps:
24+
- name: Check out Git repository
25+
uses: runloopai/checkout@main
26+
27+
- name: Check dependency age (supply-chain gate)
28+
uses: runloopai/lisan-al-gaib-action@main
29+
with:
30+
ecosystems: npm,actions
31+
min-age-days: '7'
32+
warn-age-days: '14'
33+
bypass-keyword: 'bypass-age-gate'

.github/workflows/release.yml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,25 @@ on:
44
push:
55
branches: [main]
66

7-
permissions:
8-
contents: write
9-
pull-requests: write
10-
117
jobs:
128
release:
139
runs-on: ubuntu-slim
1410
outputs:
1511
release_created: ${{ steps.release.outputs.release_created }}
1612
tag_name: ${{ steps.release.outputs.tag_name }}
1713
steps:
18-
- uses: googleapis/release-please-action@v4
14+
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
15+
id: app-token
16+
with:
17+
client-id: ${{ secrets.DEPLOY_APP_CLIENT_ID }}
18+
private-key: ${{ secrets.DEPLOY_APP_PRIVATE_KEY }}
19+
permission-contents: write
20+
permission-pull-requests: write
21+
22+
- uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0
1923
id: release
2024
with:
25+
token: ${{ steps.app-token.outputs.token }}
2126
config-file: release-please-config.json
2227
manifest-file: .release-please-manifest.json
2328

.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ coverage
66
*.log
77
package-lock.json
88
src/mcp/index.js
9+
pnpm-lock.yaml

jest.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export default {
6666

6767
// Transform ignore patterns for node_modules
6868
transformIgnorePatterns: [
69-
'node_modules/(?!(conf|@runloop|ink|react|ink-big-text|ink-gradient|ink-spinner|ink-text-input|ink-select-input|ink-box|ink-text|ink-testing-library|figures|is-unicode-supported)/)'
69+
'node_modules/(?!(conf|@runloop|ink|react|ink-gradient|ink-spinner|ink-text-input|ink-select-input|ink-box|ink-text|ink-testing-library|figures|is-unicode-supported)/)'
7070
],
7171

7272
// Treat these extensions as ESM

package.json

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@
2828
"test:e2e": "NODE_OPTIONS='--experimental-vm-modules' jest --config jest.e2e.config.js --forceExit",
2929
"test:router": "NODE_OPTIONS='--experimental-vm-modules' jest --config jest.router.config.js --forceExit",
3030
"docs:commands": "pnpm run build && node scripts/generate-command-docs.js",
31-
"prepare": "husky"
31+
"prepare": "husky",
32+
"actions:update": "actions-up --min-age 14 --exclude 'runloopai/.+'"
3233
},
33-
"packageManager": "pnpm@9.15.4",
34+
"packageManager": "pnpm@10.33.0",
3435
"keywords": [
3536
"runloop",
3637
"cli",
@@ -83,7 +84,6 @@
8384
"figures": "6.1.0",
8485
"gradient-string": "3.0.0",
8586
"ink": "6.6.0",
86-
"ink-big-text": "2.0.0",
8787
"ink-gradient": "3.0.0",
8888
"ink-link": "5.0.0",
8989
"ink-spinner": "5.0.0",
@@ -94,38 +94,6 @@
9494
"yaml": "2.8.3",
9595
"zustand": "5.0.10"
9696
},
97-
"pnpm": {
98-
"onlyBuiltDependencies": [
99-
"esbuild"
100-
],
101-
"overrides": {
102-
"tmp": "^0.2.6",
103-
"qs": "^6.15.2",
104-
"ws": "^8.20.1",
105-
"hono": "4.12.24",
106-
"@hono/node-server": "^1.19.14",
107-
"@modelcontextprotocol/sdk>ajv": "^8.18.0",
108-
"express-rate-limit": "^8.3.2",
109-
"fast-uri": "3.1.2",
110-
"ip-address": "10.1.1",
111-
"tar": "^7.5.13",
112-
"flatted": "^3.4.2",
113-
"handlebars": "^4.7.9",
114-
"eslint>minimatch": "^3.1.3",
115-
"eslint-plugin-react>minimatch": "^3.1.3",
116-
"glob>minimatch": "^3.1.3",
117-
"test-exclude>minimatch": "^3.1.3",
118-
"@typescript-eslint/typescript-estree>minimatch": "^9.0.9",
119-
"jest-util>picomatch": "^2.3.2",
120-
"anymatch>picomatch": "^2.3.2",
121-
"eslint>ajv": "^6.14.0",
122-
"minimatch>brace-expansion": "^1.1.13",
123-
"node-forge": "^1.4.0",
124-
"micromatch>picomatch": "^2.3.2",
125-
"tinyglobby>picomatch": "^4.0.4",
126-
"path-to-regexp": "^8.4.2"
127-
}
128-
},
12997
"devDependencies": {
13098
"@anthropic-ai/mcpb": "2.1.2",
13199
"@types/adm-zip": "0.5.7",
@@ -135,6 +103,7 @@
135103
"@types/tar-stream": "3.1.4",
136104
"@typescript-eslint/eslint-plugin": "8.54.0",
137105
"@typescript-eslint/parser": "8.54.0",
106+
"actions-up": "^1.14.2",
138107
"esbuild": "0.27.2",
139108
"eslint": "9.39.2",
140109
"eslint-plugin-react": "7.37.5",

0 commit comments

Comments
 (0)