Repository navigation
fix(ci): restore Examples Smoke as a working regression detector - #577
Merged
Merged
Conversation
Contributor
Release Preview — v0.40.0 → v0.41.1
Merging this PR will create a new release PR with the following changes: Changelogmonorepo 0.40.0 → 0.41.1
Updated automatically by ReleaseKit |
Two coupled failures let a release-logic regression (private-npm-package skip) break the smoke unnoticed for weeks: 1. The npm-single fixture's root package.json was `private: true`, so once private packages became skipped-at-discovery it was the only package and got filtered out — "No packages found in workspace". A single consumer's one package is the publishable one, so build it non-private (monorepo roots stay private; their members ship). Verified: the dry-run then reaches "Publish complete". 2. The workflow only triggered on examples/harness paths, never on packages/** — the release code it actually exercises — so the regression never re-ran the smoke. Broaden the triggers to packages/**, package.json, and pnpm-lock.yaml, and add a nightly schedule as a backstop. Regenerated examples-smoke.yml (paths expanded, no YAML anchors — GitHub Actions doesn't reliably support them). Closes #575 Closes #576 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011i1KvoyxATU3bz5V5Sf1Xu
goosewobbler
force-pushed
the
fix/smoke-fixture-and-triggers
branch
from
July 19, 2026 20:26
1c6237b to
da07f47
Compare
Merged
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.
Closes #575, closes #576.
Background
The Examples Smoke workflow (runs
releasekit release --dry-runagainst shipped example configs) had been silently broken on main since ~2026-06-23. #482 (skip private npm packages by default) meets the smoke's privatenpm-singlefixture — but the workflow is path-gated to the examples/harness, so it never re-ran when the release code changed. A comments-only PR (#574) incidentally touched a smoke path weeks later and surfaced it.Fixes
1. Fixture (#575) —
scripts/examples-smoke/build-fixture.tsThe
npm-singlefixture's rootpackage.jsonwasprivate: true; as the sole package it got skipped at discovery → "No packages found in workspace". A single consumer's one package is the publishable one, so build it non-private. Monorepo fixtures keep their private root (members are public and discovered). Verified locally: the dry-run then reaches[SUCCESS] Publish complete.2. Triggers (#576) —
scripts/examples-smoke/generate-smoke-workflow.ts(+ regeneratedexamples-smoke.yml)The workflow only triggered on
examples/**/scripts/examples-smoke/**— the smoke's inputs, not the code it tests. Now also triggers on:packages/**,package.json,pnpm-lock.yaml— so any release-affecting change re-runs it before merge.schedule:(0 3 * * *) as a backstop for anything the path filter misses.The workflow is generated; edited the generator and ran
pnpm examples:smoke:generate(drift-checked byexamples:smoke:check). Each trigger gets its ownpathsarray so the YAML has no anchors — GitHub Actions doesn't reliably support them.Validation
This PR touches
scripts/examples-smoke/**and the workflow file, so Examples Smoke runs on the PR itself — validating the fixture fix end-to-end in CI (previously-failingnpm-singlescenarios should now pass).🤖 Generated with Claude Code
Greptile Summary
This PR restores the Examples Smoke workflow as a working regression detector by fixing two independent root causes: a
private: trueflag on thenpm-singlefixture root (causing all fivenpm-singlescenarios to silently produce "No packages found in workspace"), and overly narrow path triggers that let release-logic regressions slip past the smoke entirely.build-fixture.ts):buildNpmSinglenow explicitly passes{ private: false }towriteRootPackageJson; sinceextrais spread after the hardcodedprivate: true, the override is correctly applied and the single-package root becomes discoverable at release time.generate-smoke-workflow.ts+ regeneratedexamples-smoke.yml):packages/**,package.json, andpnpm-lock.yamlare added to the path filter for bothpushandpull_request, and a nightlyschedulebackstop (0 3 * * *) is introduced to catch any regressions the path filter still misses.Confidence Score: 5/5
Safe to merge — both fixes are minimal, targeted, and validated by the smoke workflow running against this very PR.
The
private: falseoverride is correctly applied via the existingextraspread inwriteRootPackageJson, the regenerated YAML exactly matches the generator output, and the new path filters and nightly schedule only expand coverage without removing anything. No production code is touched.No files require special attention.
Important Files Changed
private: falsefor thenpm-singlefixture root so releasekit can discover the single package at release time; the spread ordering inwriteRootPackageJsonguarantees the override takes effect.packages/**,package.json, andpnpm-lock.yamltotriggerPaths(shared acrosspushandpull_request), and adds a nightlyschedulebackstop; no logic issues.pushandpull_request, nightlyscheduleat 03:00 UTC, andworkflow_dispatchpreserved.Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD A[Code push / PR / nightly schedule] --> B{Path filter matches?\nexamples/**, scripts/examples-smoke/**\npackages/**, package.json\npnpm-lock.yaml} B -- Yes --> C[prepare job\nCheckout + build releasekit\nPack tarballs] B -- No --> Z[Workflow skipped] C --> D[build-fixture.ts\nfor each scenario] D --> E{fixture type?} E -- npm-single --> F[writeRootPackageJson\nprivate: false ✅] E -- npm-monorepo --> G[writeRootPackageJson\nprivate: true root\n+ workspace members] E -- npm-cargo-monorepo --> H[writeRootPackageJson\nprivate: true root\n+ npm + cargo members] F --> I[Upload fixture bundle] G --> I H --> I I --> J[smoke-minimal\nsmoke-label-driven\nsmoke-oidc\nsmoke-prerelease\nsmoke-standing-pr] I --> K[smoke-monorepo-rust] J --> L[pnpm exec releasekit release --dry-run\n✅ reaches publish] K --> M[cargo probe + pnpm exec releasekit release --dry-run]%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%% flowchart TD A[Code push / PR / nightly schedule] --> B{Path filter matches?\nexamples/**, scripts/examples-smoke/**\npackages/**, package.json\npnpm-lock.yaml} B -- Yes --> C[prepare job\nCheckout + build releasekit\nPack tarballs] B -- No --> Z[Workflow skipped] C --> D[build-fixture.ts\nfor each scenario] D --> E{fixture type?} E -- npm-single --> F[writeRootPackageJson\nprivate: false ✅] E -- npm-monorepo --> G[writeRootPackageJson\nprivate: true root\n+ workspace members] E -- npm-cargo-monorepo --> H[writeRootPackageJson\nprivate: true root\n+ npm + cargo members] F --> I[Upload fixture bundle] G --> I H --> I I --> J[smoke-minimal\nsmoke-label-driven\nsmoke-oidc\nsmoke-prerelease\nsmoke-standing-pr] I --> K[smoke-monorepo-rust] J --> L[pnpm exec releasekit release --dry-run\n✅ reaches publish] K --> M[cargo probe + pnpm exec releasekit release --dry-run]Reviews (2): Last reviewed commit: "fix(ci): restore Examples Smoke as a wor..." | Re-trigger Greptile