Skip to content

Commit edca35d

Browse files
chore(deps): Renovate config, packageManager-derived pnpm in CI, repo-wide format (#1444)
* chore(deps): add Renovate config and enforce packageManager pnpm version in CI Refs #1422 Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * chore: bump pnpm to 11.17.0 and format the whole repo with oxfmt format/format:check drop their hand-maintained path list: oxfmt already skips node_modules and honors .gitignore, so the only exclusion list is .oxfmtrc.json ignorePatterns. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test(mutation): accept either quote style in the affected-lane path filter Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * chore(deps): keep fixture-app runtime deps as individual Renovate PRs Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Co-authored-by: Michał Pierzchała <[email protected]> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
1 parent e89ef9e commit edca35d

52 files changed

Lines changed: 569 additions & 297 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.codex/config.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
[features]
2-
collaboration_modes = true
2+
collaboration_modes = true

‎.fallowrc.json‎

Lines changed: 9 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,12 @@
3333
"scripts/write-xcuitest-cache-metadata.mjs",
3434
"scripts/help-conformance-sample-outputs.d.mts"
3535
],
36-
"ignoreDependencies": [
37-
"@theme"
38-
],
36+
"ignoreDependencies": ["@theme"],
3937
"ignoreExports": [
4038
{
4139
"comment": "Authoritative supported-command list; sole consumer is the conformance oracle (scripts/maestro-conformance, an ignored tooling tree).",
4240
"file": "src/compat/maestro/program-ir-command-parser.ts",
43-
"exports": [
44-
"SUPPORTED_MAESTRO_COMMAND_NAMES"
45-
]
41+
"exports": ["SUPPORTED_MAESTRO_COMMAND_NAMES"]
4642
},
4743
{
4844
"comment": "Daemon route handlers are reached only through the dynamic `import()` table in request-handler-chain.ts, which --production analysis cannot follow to a consumer.",
@@ -60,16 +56,12 @@
6056
{
6157
"comment": "Published package surface (see package.json#exports); consumed by SDK users, not internally.",
6258
"file": "src/sdk/*.ts",
63-
"exports": [
64-
"*"
65-
]
59+
"exports": ["*"]
6660
},
6761
{
6862
"comment": "Tool config default exports, loaded by the tool rather than imported.",
6963
"file": "{tsdown.config.ts,vitest.mutation.config.ts,website/rspress.config.ts,test/skillgym/skillgym.config.ts,test/skillgym/suites/*.ts}",
70-
"exports": [
71-
"default"
72-
]
64+
"exports": ["default"]
7365
},
7466
{
7567
"comment": "Type-level `AssertTrue<...>` registry-totality guards. Exported only so `noUnusedLocals` keeps them alive; a consumer would defeat the point.",
@@ -84,44 +76,28 @@
8476
{
8577
"comment": "Mutation-lane seam: readTestScope is consumed by vitest.mutation.config.ts, a tool config outside --production analysis.",
8678
"file": "scripts/mutation/test-scope.ts",
87-
"exports": [
88-
"readTestScope"
89-
]
79+
"exports": ["readTestScope"]
9080
},
9181
{
9282
"comment": "Mutation-lane completeness gate: ownedTestFiles enumerates the whole derived ownership map, which only the assertion in ownership.test.ts consumes — a production consumer would defeat the point.",
9383
"file": "scripts/mutation/ownership.ts",
94-
"exports": [
95-
"ownedTestFiles"
96-
]
84+
"exports": ["ownedTestFiles"]
9785
},
9886
{
9987
"comment": "Help-benchmark conformance seams: helpTopicIds feeds the topic-coverage gate and PRIVATE_AX_RECOVERY_SAMPLE feeds the skillgym suite; both consumers are test-tree files outside --production analysis.",
10088
"file": "{src/cli/parser/cli-help.ts,scripts/help-conformance-sample-outputs.mjs}",
101-
"exports": [
102-
"helpTopicIds",
103-
"PRIVATE_AX_RECOVERY_SAMPLE"
104-
]
89+
"exports": ["helpTopicIds", "PRIVATE_AX_RECOVERY_SAMPLE"]
10590
}
10691
],
107-
"usedClassMembers": [
108-
"name",
109-
"listActiveLeases",
110-
"delete",
111-
"values",
112-
"elapsedMs",
113-
"isExpired"
114-
],
92+
"usedClassMembers": ["name", "listActiveLeases", "delete", "values", "elapsedMs", "isExpired"],
11593
"rules": {
11694
"unused-types": "error",
11795
"duplicate-exports": "off"
11896
},
11997
"production": {
12098
"dupes": true
12199
},
122-
"publicPackages": [
123-
"agent-device"
124-
],
100+
"publicPackages": ["agent-device"],
125101
"audit": {
126102
"deadCodeBaseline": "fallow-baselines/dead-code.json",
127103
"healthBaseline": "fallow-baselines/health.json"

‎.github/actions/boot-ios-test-simulator/action.yml‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
name: "Boot iOS Test Simulator"
2-
description: "Resolve and boot the preferred iOS simulator for replay tests"
1+
name: 'Boot iOS Test Simulator'
2+
description: 'Resolve and boot the preferred iOS simulator for replay tests'
33

44
inputs:
55
runtime-version:
6-
description: "Preferred iOS runtime version"
6+
description: 'Preferred iOS runtime version'
77
required: true
88
preferred-device-name:
9-
description: "Preferred simulator device name"
9+
description: 'Preferred simulator device name'
1010
required: false
11-
default: "iPhone 17 Pro"
11+
default: 'iPhone 17 Pro'
1212
boot-timeout-seconds:
13-
description: "Maximum time to wait for simulator bootstatus"
13+
description: 'Maximum time to wait for simulator bootstatus'
1414
required: false
15-
default: "300"
15+
default: '300'
1616

1717
outputs:
1818
simulator-udid:
19-
description: "UDID of the booted iOS simulator"
19+
description: 'UDID of the booted iOS simulator'
2020
value: ${{ steps.boot.outputs.simulator-udid }}
2121

2222
runs:
23-
using: "composite"
23+
using: 'composite'
2424
steps:
2525
- name: Resolve and boot iOS test simulator
2626
id: boot

‎.github/actions/setup-android-replay-host/action.yml‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
name: "Setup Android Replay Host"
2-
description: "Prepare the Android CI host for replay tests and expose the agent-device home path"
1+
name: 'Setup Android Replay Host'
2+
description: 'Prepare the Android CI host for replay tests and expose the agent-device home path'
33

44
outputs:
55
agent-home-dir:
6-
description: "Resolved agent-device home directory"
6+
description: 'Resolved agent-device home directory'
77
value: ${{ steps.agent-home.outputs.dir }}
88

99
runs:
10-
using: "composite"
10+
using: 'composite'
1111
steps:
1212
- name: Resolve agent-device home
1313
id: agent-home

‎.github/actions/setup-apple-replay/action.yml‎

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,43 @@
1-
name: "Setup Apple Replay"
2-
description: "Resolve shared Apple replay cache/build state and expose the agent-device home path"
1+
name: 'Setup Apple Replay'
2+
description: 'Resolve shared Apple replay cache/build state and expose the agent-device home path'
33

44
inputs:
55
derived-path:
6-
description: "Derived data path used by the replay runner"
6+
description: 'Derived data path used by the replay runner'
77
required: true
88
cache-key-prefix:
9-
description: "Prefix for the cache key"
9+
description: 'Prefix for the cache key'
1010
required: true
1111
cache-key-suffix:
12-
description: "Optional suffix for the cache key"
12+
description: 'Optional suffix for the cache key'
1313
required: false
14-
default: ""
14+
default: ''
1515
build-command:
16-
description: "Command used to refresh replay artifacts before use"
16+
description: 'Command used to refresh replay artifacts before use'
1717
required: true
1818
xcuitest-platform:
19-
description: "Optional AGENT_DEVICE_XCUITEST_PLATFORM value"
19+
description: 'Optional AGENT_DEVICE_XCUITEST_PLATFORM value'
2020
required: false
21-
default: ""
21+
default: ''
2222
xcuitest-destination:
23-
description: "Optional AGENT_DEVICE_XCUITEST_DESTINATION value"
23+
description: 'Optional AGENT_DEVICE_XCUITEST_DESTINATION value'
2424
required: false
25-
default: ""
25+
default: ''
2626
build-before-use:
27-
description: "Whether this setup action should refresh replay artifacts after restoring the cache"
27+
description: 'Whether this setup action should refresh replay artifacts after restoring the cache'
2828
required: false
29-
default: "true"
29+
default: 'true'
3030

3131
outputs:
3232
agent-home-dir:
33-
description: "Resolved agent-device home directory"
33+
description: 'Resolved agent-device home directory'
3434
value: ${{ steps.agent-home.outputs.dir }}
3535
cache-hit:
36-
description: "Whether a replay cache was restored before any build refresh"
36+
description: 'Whether a replay cache was restored before any build refresh'
3737
value: ${{ steps.restore-prebuilt.outputs.cache-hit }}
3838

3939
runs:
40-
using: "composite"
40+
using: 'composite'
4141
steps:
4242
- name: Resolve Xcode cache key
4343
id: xcode

‎.github/actions/setup-fixture-app/action.yml‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
name: "Setup Fixture App"
2-
description: "Install a ready Release build of examples/test-app on the booted iOS simulator, from the shared build cache"
1+
name: 'Setup Fixture App'
2+
description: 'Install a ready Release build of examples/test-app on the booted iOS simulator, from the shared build cache'
33

44
# Any job that needs a controlled app to drive can use this instead of an Apple
55
# system app. It fetches the Release binary that test-app-build-cache.yml
@@ -18,17 +18,17 @@ description: "Install a ready Release build of examples/test-app on the booted i
1818

1919
inputs:
2020
device-name:
21-
description: "Simulator device name used for the inline-build fallback"
21+
description: 'Simulator device name used for the inline-build fallback'
2222
required: false
23-
default: "iPhone 17 Pro"
23+
default: 'iPhone 17 Pro'
2424
install:
25-
description: "Install the app onto the booted simulator"
25+
description: 'Install the app onto the booted simulator'
2626
required: false
27-
default: "true"
27+
default: 'true'
2828

2929
outputs:
3030
app-path:
31-
description: "Path to the ready .app bundle"
31+
description: 'Path to the ready .app bundle'
3232
value: ${{ steps.locate.outputs.app-path }}
3333
app-id:
3434
description: "Bundle identifier read from the app's Info.plist"
@@ -38,7 +38,7 @@ outputs:
3838
value: ${{ steps.fetch.outputs.source }}
3939

4040
runs:
41-
using: "composite"
41+
using: 'composite'
4242
steps:
4343
# Installed even on a hit, because the fingerprint is derived from the
4444
# dependency graph and cannot be computed without it.

‎.github/actions/setup-node-pnpm/action.yml‎

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ inputs:
66
description: 'Node.js version'
77
required: false
88
default: '24.13'
9-
pnpm-version:
10-
description: 'pnpm version'
11-
required: false
12-
default: '11.1.2'
139
install-deps:
1410
description: 'Whether to install dependencies with pnpm install --frozen-lockfile'
1511
required: false
@@ -18,10 +14,28 @@ inputs:
1814
runs:
1915
using: 'composite'
2016
steps:
17+
# package.json `packageManager` is the single source of truth for the pnpm
18+
# version. This action carries no default of its own: a second default is
19+
# how local (corepack) and CI pnpm versions drift apart silently.
20+
- name: Resolve pnpm version from packageManager
21+
id: package-manager
22+
run: |
23+
set -euo pipefail
24+
spec="$(node -p "require('$GITHUB_WORKSPACE/package.json').packageManager ?? ''")"
25+
case "$spec" in
26+
pnpm@[0-9]*) ;;
27+
*)
28+
echo "package.json packageManager must be pnpm@<version>, got '${spec}'" >&2
29+
exit 1
30+
;;
31+
esac
32+
echo "pnpm-version=${spec#pnpm@}" >> "$GITHUB_OUTPUT"
33+
shell: bash
34+
2135
- name: Setup pnpm
2236
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
2337
with:
24-
version: ${{ inputs.pnpm-version }}
38+
version: ${{ steps.package-manager.outputs.pnpm-version }}
2539

2640
- name: Setup Node.js
2741
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
@@ -32,6 +46,21 @@ runs:
3246
# miss (any lockfile-changing PR) the post-job cache save fails the job.
3347
cache: ${{ inputs.install-deps == 'true' && 'pnpm' || '' }}
3448

49+
# Corepack resolves the same `packageManager` field locally, so a mismatch
50+
# here means CI is running a pnpm nobody develops against.
51+
- name: Assert pnpm matches packageManager
52+
env:
53+
EXPECTED_PNPM_VERSION: ${{ steps.package-manager.outputs.pnpm-version }}
54+
run: |
55+
set -euo pipefail
56+
actual="$(pnpm --version)"
57+
if [ "$actual" != "$EXPECTED_PNPM_VERSION" ]; then
58+
echo "pnpm ${actual} is installed but package.json pins pnpm@${EXPECTED_PNPM_VERSION}" >&2
59+
exit 1
60+
fi
61+
echo "pnpm ${actual} matches package.json packageManager"
62+
shell: bash
63+
3564
- name: Install dependencies
3665
if: ${{ inputs.install-deps == 'true' }}
3766
run: pnpm install --frozen-lockfile

‎.github/actions/upload-agent-device-artifacts/action.yml‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
name: "Upload Agent Device Artifacts"
2-
description: "Upload shared agent-device diagnostics, session logs, and replay artifacts"
1+
name: 'Upload Agent Device Artifacts'
2+
description: 'Upload shared agent-device diagnostics, session logs, and replay artifacts'
33

44
inputs:
55
artifact-name:
6-
description: "Artifact name"
6+
description: 'Artifact name'
77
required: true
88
agent-home-dir:
9-
description: "Resolved agent-device daemon state directory"
9+
description: 'Resolved agent-device daemon state directory'
1010
required: true
1111
runner-derived-path:
12-
description: "Optional Apple runner derived data path to upload cache metadata and Xcode logs"
12+
description: 'Optional Apple runner derived data path to upload cache metadata and Xcode logs'
1313
required: false
14-
default: ".agent-device-no-runner-derived"
14+
default: '.agent-device-no-runner-derived'
1515

1616
runs:
17-
using: "composite"
17+
using: 'composite'
1818
steps:
1919
- name: Upload artifacts
2020
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2

0 commit comments

Comments
 (0)