Skip to content

Delete custom CI gates that stock tools cover - #220

Merged
arun279 merged 1 commit into
feat/expo-nativefrom
chore/delete-custom-gates
Oct 24, 2026
Merged

arun279 merged 1 commit into
feat/expo-nativefrom
chore/delete-custom-gates

Conversation

@arun279

@arun279 arun279 commented Oct 24, 2026

Copy link
Copy Markdown
Owner

Removes repository scripts and tests that rebuilt checks pnpm, oxlint, actions/cache, TanStack Query and Reassure already provide. Apart from the cache buster wiring, no product code changes.

What was deleted and what replaces it

Deleted Replacement
scripts/check-changed-coverage.mjs, scripts/core-coverage-scope.json, the "Gate changed core coverage" CI step, the Coverage-Rationale: PR-body escape, test/ci/changed-coverage.test.ts Nothing. It only counted core Vitest coverage, so it failed PRs whose core hooks were covered by the native Jest suites. The repo had no global coverage thresholds, and nothing else read the report, so vitest run no longer collects coverage and @vitest/coverage-v8 is removed.
scripts/write-buster.mjs, generated packages/core/src/runtime/persist-buster.ts, buster:check, buster:bump TanStack's documented buster option, set to the expo-updates updateId (the embedded update's id in a store build, the downloaded update's id after an OTA update). When updates are off, as in development, it falls back to expo-application's version and build number. Every build or update now starts with one cold sync. A new composition-root test checks that a cache saved by an earlier build, or by an earlier update of the same build, is removed and not restored.
scripts/check-node-version.mjs, the preinstall and check:node scripts engineStrict: true in pnpm-workspace.yaml, plus the existing engines.node. Checked locally: with a mismatched Node, both pnpm install and pnpm run exit 1 with ERR_PNPM_UNSUPPORTED_ENGINE. Without engineStrict they only warn.
scripts/jest-cache-key.mjs, test/ci/jest-cache-key.test.ts An actions/cache key from hashFiles('.nvmrc', 'pnpm-lock.yaml', 'packages/native/babel.config.js', 'packages/native/jest.config.js'). The repo has no local Babel plugins, so those files cover what the script hashed.
scripts/check-quality-budget.mjs, test/ci/quality-budget.test.ts oxlint typescript/ban-ts-comment (bans @ts-expect-error, @ts-ignore and @ts-nocheck), and oxlint no-warning-comments with the terms oxlint-disable, eslint-disable and lint/complexity/noExcessiveCognitiveComplexity. That covers Biome complexity suppressions too, so no grep is needed. The script's single-owner checks for DAY_MS, the day-key formatter, storage keys and readFailureOf are dropped, with no replacement.
test/support/stall-guard.ts, its reporter entry, test/ci/stall-guard.test.ts and fixtures, test/ci/ipc-serialization.test.ts Each job's timeout-minutes.
test/support/git-env.ts, test/ci/git-env.test.ts The repository Vitest config deletes GIT_* from the environment before workers start. Checked locally: with GIT_DIR pointed at another repository, the git-using tests pass and leave it untouched. Without the strip, they fail.
test/ci/local-jest-workers.test.ts, test/ci/spell-coverage.test.ts, test/ci/executable-scripts.test.ts Nothing. They checked config text against itself.
The job-timeouts table of slowest run times A 14-line test that every job with runs-on sets timeout-minutes.
scripts/check-native-assets.mjs, .native-assets.json, test/ci/native-assets.test.ts Nothing. It was a byte-exact change detector.
scripts/check-render-counts.mjs, scripts/render-count-baselines.json, the base-tree checkout and both base-measuring steps in render-performance, the Render-Count: PR-body escape, .github/actions/use-tree-node, test/ci/render-performance.test.ts, test/ci/second-tree-node.test.ts Each Reassure scenario now asserts its render count from measureRenders itself (expect(meanCount).toBe(n)), using the same numbers as the old baselines. render-performance is now a plain pnpm --dir packages/native perf:render run. The 20% duration gate on "Library first mount" is dropped. The base-tree action and its test only existed for the base checkout.

Also removed:

  • The check job's fetch-depth: 0 and pull-requests: read, and the same two settings on render-performance. Only the deleted gates used them.
  • The README.md text about the removed escapes, plus a stale mention of the Binary-Size: escape and the footprint-base job.
  • The cspell words only the deleted files used.

The footprint job already only posts a report. No Product-Growth, Binary-Size or Comment-Load parsing remained.

Required checks

.github/required-checks.json is unchanged, because every job keeps its name. No ruleset changes are needed.

Net lines

Category Before After Net
scripts/ 1,238 708 -530
test/ (test/ci and test/support) 2,144 1,280 -864
of which test/ci 1,939 1,128 -811
.github/ 921 831 -90
Product code (packages/core/src, packages/native/src, packages/native/app) -1
Native tests (render count assertions, buster test) +38
Root config, lockfile, README, .native-assets.json -366
Total -1,813 (+111, -1,924)

Verification

  • pnpm check passes.
  • actionlint is clean.
  • pnpm --dir packages/native perf:render passes.
  • Each new assertion was broken once and failed as expected: a wrong render count, a buster that ignores the update id, a job without timeout-minutes, and a TypeScript or complexity suppression comment.

Remove repository scripts and tests that reimplemented checks already
provided by pnpm, oxlint, actions/cache, TanStack Query and Reassure:

- The changed-coverage gate and its Coverage-Rationale escape. Nothing
  else read the coverage report, so Vitest no longer collects it.
- write-buster.mjs and the generated persist-buster.ts. The persisted
  query cache is now busted by the running expo-updates update id, or
  the native version and build number when updates are off, so each
  build or update starts with one cold sync.
- check-node-version.mjs. engineStrict makes pnpm install and pnpm run
  fail under any Node other than engines.node.
- jest-cache-key.mjs, replaced by a hashFiles() cache key.
- check-quality-budget.mjs, replaced by oxlint ban-ts-comment and
  no-warning-comments over suppression directives.
- The Vitest stall guard, the IPC, git-env, local Jest worker, spell
  coverage and executable-script tests. Test git processes now run
  without the hook's GIT_* variables, stripped in the Vitest config.
  The job timeout table is now a check that every job sets one.
- check-native-assets.mjs and .native-assets.json.
- The render-count gate, its baselines, its base-tree checkout and the
  use-tree-node action. The Reassure tests assert each scenario's
  render count themselves.
@github-actions

Copy link
Copy Markdown

Pull request footprint

measurement base to head
Product code lines in core/src, native/src, native/app, and native/modules -2
Test lines in test, packages/*/{test,__tests__,e2e}, and .maestro -744
CI and tooling lines in .github and scripts -580
Product comment lines identified by a comment prefix +1
JavaScript bundle at head size
Expo ios bundle 5624 kB
Expo android bundle 5662 kB

@arun279
arun279 merged commit 8e56140 into feat/expo-native Oct 24, 2026
10 checks passed
@arun279
arun279 deleted the chore/delete-custom-gates branch October 24, 2026 06:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant