Skip to content

fix(ci): restore Examples Smoke as a working regression detector - #577

Merged
goosewobbler merged 1 commit into
mainfrom
fix/smoke-fixture-and-triggers
Jul 19, 2026
Merged

goosewobbler merged 1 commit into
mainfrom
fix/smoke-fixture-and-triggers

Conversation

@goosewobbler

@goosewobbler goosewobbler commented Jul 19, 2026 •

Copy link
Copy Markdown
Owner

Closes #575, closes #576.

Background

The Examples Smoke workflow (runs releasekit release --dry-run against shipped example configs) had been silently broken on main since ~2026-06-23. #482 (skip private npm packages by default) meets the smoke's private npm-single fixture — 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.ts
The npm-single fixture's root package.json was private: 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 (+ regenerated examples-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.
  • a nightly 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 by examples:smoke:check). Each trigger gets its own paths array 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-failing npm-single scenarios 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: true flag on the npm-single fixture root (causing all five npm-single scenarios to silently produce "No packages found in workspace"), and overly narrow path triggers that let release-logic regressions slip past the smoke entirely.

  • Fixture fix (build-fixture.ts): buildNpmSingle now explicitly passes { private: false } to writeRootPackageJson; since extra is spread after the hardcoded private: true, the override is correctly applied and the single-package root becomes discoverable at release time.
  • Trigger expansion (generate-smoke-workflow.ts + regenerated examples-smoke.yml): packages/**, package.json, and pnpm-lock.yaml are added to the path filter for both push and pull_request, and a nightly schedule backstop (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: false override is correctly applied via the existing extra spread in writeRootPackageJson, 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

Filename Overview
scripts/examples-smoke/build-fixture.ts Sets private: false for the npm-single fixture root so releasekit can discover the single package at release time; the spread ordering in writeRootPackageJson guarantees the override takes effect.
scripts/examples-smoke/generate-smoke-workflow.ts Adds packages/**, package.json, and pnpm-lock.yaml to triggerPaths (shared across push and pull_request), and adds a nightly schedule backstop; no logic issues.
.github/workflows/examples-smoke.yml Generated output faithfully reflects the generator: expanded path filters under both push and pull_request, nightly schedule at 03:00 UTC, and workflow_dispatch preserved.

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]
Loading
%%{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]
Loading

Reviews (2): Last reviewed commit: "fix(ci): restore Examples Smoke as a wor..." | Re-trigger Greptile

@goosewobbler goosewobbler added this to the 0.42.0 milestone Jul 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Previous release v0.41.0 is partially published (4/4 packages on the registry; no tags/GitHub release created).
Retry it via release:retry on the merged standing PR (#555), or merging this PR supersedes it — the next release re-publishes everything at the new version.

Release Preview — v0.40.0 → v0.41.1

Note: Labels on this PR are advisory in standing-pr mode. Bumps come from conventional commits in the standing PR; override by editing labels on the standing PR itself. Add release:immediate to bypass the standing PR and release this PR directly.

Merging this PR will create a new release PR with the following changes:

Changelog

monorepo 0.40.0 → 0.41.1

Fixed

  • restore Examples Smoke as a working regression detector (ci) (#575, #576)

All packages → 0.41.1 (sync versioning)

  • @releasekit/version
  • @releasekit/notes
  • @releasekit/publish
  • @releasekit/release

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
goosewobbler force-pushed the fix/smoke-fixture-and-triggers branch from 1c6237b to da07f47 Compare July 19, 2026 20:26
@goosewobbler
goosewobbler merged commit eaa2dd4 into main Jul 19, 2026
34 checks passed
@goosewobbler
goosewobbler deleted the fix/smoke-fixture-and-triggers branch July 19, 2026 21:06
@github-actions github-actions Bot mentioned this pull request Jul 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant