mirror of
https://github.com/callstack/agent-device.git
synced 2026-09-14 20:06:34 +08:00
255deb6c28
* ci: fold single-grep jobs into steps, call named pnpm scripts - Merge ios-runner-swift-compat and no-test-di-seams (each just checkout + one rg assertion) into steps of a new static-checks job, keeping each step's own failure message. Removes two job-scheduling/ checkout overheads and two PR status-check lines. - Replace the layering-guard job's inlined copies of check:layering and depgraph:test with the named pnpm scripts, removing the silent-drift risk between the workflow and package.json. - Fix the same drift in conformance-regenerate.yml, which inlined maestro:conformance:regenerate byte-for-byte. - Leave affected-selector's inline node invocation as-is: R8's zero-dep closure check (scripts/layering/zero-dep-jobs.ts) finds a job's entry scripts by matching literal paths in the run: block, so switching to `pnpm check:affected:test` would zero out its entries and make R8 fail closed. Documented inline why this one stays inlined. - Leave publish-mcp-registry.yml's sync-mcp-metadata --check alone: that job never runs the setup-node-pnpm action, so pnpm isn't provisioned there at all. Refs #1462 * ci: teach R8 to resolve pnpm script names, drop affected-selector's inline copy R8's zero-dep-job entry scan matched literal script paths in a run: block, so a bare `pnpm <script>` invocation found zero entries and R8 failed closed — the reason affected-selector kept an inline node command instead of calling pnpm check:affected:test (#1462). zeroDepJobs now also resolves a pnpm script name against package.json and scans the resolved command for entry paths, so affected-selector can call the named script like every other job. Also replaced the other workflows' inlined copies of named package.json scripts (test:replay:*, perf, perf:android, maestro:conformance:differential, check:mcp-metadata, size) with their pnpm names, keeping each job's CI-specific trailing flags — found via a repo-wide sweep for any run: block whose text duplicates a scripts entry. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L67kDSTAJwaoLCwANEJFRM * fix: revert publish-mcp-registry pnpm regression, recurse R8 alias resolution publish-mcp-registry.yml's job only provisions Node via actions/setup-node, never the repo's setup-node-pnpm action, so pnpm is never installed there — the earlier sweep's `pnpm check:mcp-metadata` would have broken the release path. Reverted to the direct node invocation with a comment explaining why, matching the PR's own stated rationale for leaving it alone. zeroDepJobs' pnpm-alias resolution only expanded one level: a resolved script that itself invoked another named pnpm script had its entries silently dropped from R8's closure. resolveRunEntries now recurses through chained aliases with a per-chain visited set, so a nested alias's entries are found and a cycle stops re-expanding a repeated name instead of recursing forever. Added coverage for both the chained and cyclic cases. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L67kDSTAJwaoLCwANEJFRM --------- Co-authored-by: Claude <noreply@anthropic.com>
88 lines
2.8 KiB
YAML
88 lines
2.8 KiB
YAML
name: Size
|
|
|
|
on:
|
|
pull_request:
|
|
paths-ignore:
|
|
- 'docs/**'
|
|
- 'website/**'
|
|
- 'README.md'
|
|
- '.github/actions/build-docs/action.yml'
|
|
- '.github/workflows/deploy.yml'
|
|
- '.github/workflows/pr-preview.yml'
|
|
- '.github/workflows/pr-preview-cleanup.yml'
|
|
|
|
permissions:
|
|
contents: read
|
|
pull-requests: write
|
|
|
|
concurrency:
|
|
group: size-${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
bundle-size:
|
|
name: Bundle Size
|
|
if: github.event.pull_request.head.repo.full_name == github.repository
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Setup toolchain
|
|
uses: ./.github/actions/setup-node-pnpm
|
|
|
|
- name: Preserve report script
|
|
run: cp scripts/size-report.mjs /tmp/agent-device-size-report.mjs
|
|
|
|
# dist is fully determined by the base commit, so reuse it across PR runs
|
|
# against the same base. Startup medians are still measured fresh on this
|
|
# runner so the base/PR comparison stays same-machine.
|
|
- name: Restore base dist cache
|
|
id: base-dist-cache
|
|
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.2.3
|
|
with:
|
|
path: dist
|
|
key: size-base-dist-${{ github.event.pull_request.base.sha }}
|
|
|
|
- name: Measure base size
|
|
run: |
|
|
git checkout --detach "${{ github.event.pull_request.base.sha }}"
|
|
pnpm install --frozen-lockfile
|
|
if [ "${{ steps.base-dist-cache.outputs.cache-hit }}" != "true" ]; then
|
|
pnpm build
|
|
fi
|
|
node /tmp/agent-device-size-report.mjs \
|
|
--startup-runs 7 \
|
|
--json /tmp/agent-device-size-base.json
|
|
|
|
# Save immediately: the job-end dist belongs to the PR head, not the base.
|
|
- name: Save base dist cache
|
|
if: steps.base-dist-cache.outputs.cache-hit != 'true'
|
|
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.2.3
|
|
with:
|
|
path: dist
|
|
key: size-base-dist-${{ github.event.pull_request.base.sha }}
|
|
|
|
- name: Measure PR size
|
|
run: |
|
|
git checkout --detach "${{ github.event.pull_request.head.sha }}"
|
|
pnpm install --frozen-lockfile
|
|
pnpm build
|
|
pnpm size \
|
|
--compare /tmp/agent-device-size-base.json \
|
|
--startup-runs 7 \
|
|
--json .tmp/size-report.json \
|
|
--markdown .tmp/size-report.md
|
|
|
|
- name: Add job summary
|
|
run: cat .tmp/size-report.md >> "$GITHUB_STEP_SUMMARY"
|
|
|
|
- name: Comment on PR
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
run: pnpm size --post-comment .tmp/size-report.md
|