Repository navigation
Gate CI on typecheck, lint, tests and a release bundle - #787
Merged
Merged
Conversation
CI ran npm ci and two Debug native builds. Debug loads JS from Metro at runtime, so the JavaScript was never compiled or bundled, and typecheck, lint and tests were never invoked. Broken JS could not fail a build. The checks now run in their own job on ubuntu, with the native builds left on macOS. Bundling in release mode is what catches a missing import. Two things had to be fixed for the gates to go green: AirshipConfig.ts holds credentials and is gitignored, so the example could never typecheck or bundle in CI. The committed AirshipConfig.ts.example is copied into place. The example imported @react-navigation/native, @react-navigation/stack and @react-native-clipboard/clipboard with nothing declaring them anywhere, and zero entries in the lockfile; they resolved only from stale node_modules in a working checkout. They are declared now, with the two native peers @react-navigation/stack needs. Verified from a real install: typecheck reports no errors and the bundle writes. The example's own typecheck backlog is fixed here too. One was a defect: addCustomEvent was passed properties: undefined, and CustomEvent requires it. setup-java moves to v4 and Ruby off 3.0.1, which is past end of life. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…gate-typecheck-lint-test # Conflicts: # example/src/screens/HomeScreen.tsx # example/src/screens/MessageDetailsScreen.tsx # package-lock.json
Declaring @react-native-clipboard/clipboard autolinks it into the iOS build for the first time, and the pod fails to link: it calls UTTypeConformsTo, UTTypeCopyPreferredTagWithClass, kUTTagClassMIMEType and kUTTypeImage, while its podspec declares only React-Core, so nothing carries those symbols. Fixed in the Podfile rather than by pinning an older release; 1.16.3 is the latest and still ships the same podspec. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Ulrico972
approved these changes
Oct 26, 2026
added 3 commits
October 27, 2026 10:58
…e-typecheck-lint-test
…e-typecheck-lint-test
…e-typecheck-lint-test
Apekka
approved these changes
Oct 28, 2026
crow
approved these changes
Oct 28, 2026
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.
What do these changes do?
Run typecheck, lint, tests and a release-mode bundle on every pull request, in
their own job, and update the native job's toolchain.
Why are these changes necessary?
CI ran
npm ciand two Debug native builds. A Debug build loads its JavaScriptfrom Metro at runtime, so the JS was never compiled or bundled, and typecheck,
lint and tests were never invoked at all. Broken JavaScript could not fail a
build — which is how the example's missing imports went unnoticed.
How did you verify these changes?
From a real install in a clean worktree: typecheck reports no errors, lint
exits 0, and the bundle writes.
npm testfails here because the suite is#785.
Anything else a reviewer should know?
Two things had to be fixed before the gates could go green, and both are worth
a look on their own.
example/src/AirshipConfig.tsholds credentials and is gitignored, so theexample could never typecheck or bundle in CI. The committed
AirshipConfig.ts.exampleis copied into place.The example imported
@react-navigation/native,@react-navigation/stackand@react-native-clipboard/clipboardwith nothing declaring them in eitherpackage.json and zero entries in the lockfile. They resolved only from stale
node_modulesin a long-lived checkout, so a fresh clone could not typecheck,bundle or run the example. They are declared now, together with the two native
peers
@react-navigation/stackneeds.The example's typecheck backlog is cleared here too. One of those was a defect
rather than a type complaint:
addCustomEventwas passedproperties: undefined, andCustomEventrequires that field.Stacked on #786, which the lint step depends on, and merged in already to keep
the example edits from conflicting. Merge #785 first so
npm testexists.Making the four checks required on
mainis a branch protection setting, notpart of this change.
🤖 Generated with Claude Code