test(sentry): release smoke checklist and scripted API tripwire#197
Merged
Conversation
Part of #69. Adds docs/sentry-release-smoke.md (pre-release manual checklist, cross-checked against the span/tag names the code actually emits), scripts/sentry-tripwire.mjs (polls Sentry's API and asserts the comapeo.boot trace arrived with the expected structure, with a pure assertion core unit-tested via node --test), and a manual-dispatch workflow that runs the tripwire against an already-launched test build.
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.
Part of #69 (the final acceptance item — running the checklist and signing off at one release — is a process step and stays open on the issue).
Adds the pre-release Sentry smoke checklist (
docs/sentry-release-smoke.md), the scripted API tripwire (scripts/sentry-tripwire.mjs), and a manual-dispatch workflow that runs the tripwire from CI. The checklist is linked from CONTRIBUTING.md's release steps and the workflow table in docs/TESTING.md.The checklist was cross-checked against what the code emits today rather than copied from the issue, which had drifted in three places. The Node-side boot phases (
boot.loader-init,boot.manager-init) are not child spans of thecomapeo.boottransaction — they arrive as their own transactions on the same trace, since they are root spans in the Node SDK. Per-RPCrpc.client/rpc.servertraces only exist under thedebugtoggle, so the setup section requiresdebugDefault: true. AndcaptureApplicationDatais actually theapplicationUsageDatatoggle (plugin keyapplicationUsageDataDefault).For trace discovery the tripwire does not need an injected trace id: there is no debug hook to force one today (the native SDK generates it at each launch), and adding one would touch both native bridges. Instead the script polls for the newest
comapeo.boottransaction matching a distinctivesentry.environmentvalue, which the config plugin already propagates to the RN, native, and Node SDKs — so one plugin option uniquely marks a test build with no code changes.--trace <id>is still supported when a specific trace id is known. Discovery uses the org-level Discover events endpoint (the per-project events list from the issue sketch only returns error events, not transactions), then fetches each event's raw JSON and asserts: boot transaction present withop: comapeo.boot, expected native child spans per platform, Node-sideboot.loader-init/boot.manager-initon the same trace (cross-process stitching),contexts.device.family == "Android"on the FGS transaction,proc/layer/comapeo.rntags, environment/release match, and no rootkey/coordinate PII markers. The assertion core is a pure function over fetched JSON (scripts/lib/sentry-tripwire-core.mjs) with anode --testsuite, wired into lint.yml via a newtest:scriptsscript.The workflow (
sentry-tripwire.yml) deliberately does not build or launch an app: you launch a test-DSN build yourself (local device or BrowserStack session per the checklist) and then dispatch the workflow with the same environment or trace id. Building and driving an emulator in CI felt disproportionate for a manual pre-release check and would make the run flaky on ingestion latency; the script itself is dependency-free, so the job is checkout + setup-node + run. It needs aSENTRY_TRIPWIRE_TOKENsecret (read access to the test project's events).