fix(ci): no release for merges that cannot reach a consumer (fixes #3023) - #3081
Closed
mfal wants to merge 1 commit into
Closed
fix(ci): no release for merges that cannot reach a consumer (fixes #3023)#3081mfal wants to merge 1 commit into
mfal wants to merge 1 commit into
Conversation
Contributor
Coverage Report for ./packages/components/
File CoverageNo changed files found. |
mfal
marked this pull request as ready for review
September 2, 2026 08:55
mfal
marked this pull request as draft
September 2, 2026 08:55
Contributor
🚀 Preview DeploymentPreview environments are ready:
Images:
|
The relevance gate decided by repo-root paths only, so everything under packages/** was publish-relevant wholesale. A Storybook config edit cut 1.0.14, a `--project=unit` glob in a package's scripts cut 1.0.12 — both with an empty changelog, because the changelog is decided by commit type while relevance is decided by paths (#3023). The criterion is now consumer effect, not tarball membership. The two differ in both directions: a tarball carries the package's `scripts`, yet only the install lifecycle runs on a consumer's machine. - Package-local denylist: `.storybook/**`, the Storybook image's `Dockerfile`/`.dockerignore`, `e2e/**`, `src/tests/**`, `*.stories.*` and `*.test.*`. - Every `package.json` is judged by its key diff, not just the root one. `scripts` is irrelevant unless the diff touches `preinstall`, `install`, `postinstall` or `prepare` — no Flow package has one today, which is why the guard belongs in code. - `packages/*/dev/**` stays relevant although #3023 proposed skipping it: `components/dev/vite/*` shapes the emitted CSS layers, the component-index and status-registry generators write shipped `dist/assets/*.json`, and `codemods/dev/generate` writes the published MIGRATION.md. - A `stories/` DIRECTORY stays relevant too, only the story files are skipped: `createDocPropertiesJson.ts` parses every `.tsx` under `src/` and ignores only `*.stories.tsx`, so `Button/stories/lib.tsx` contributes five entries to the published doc-properties.json. Tests and stories also leave `dist/types`. `unplugin-dts` emitted declarations for all of `src`, which put 196 of flow-remote-react-components@1.1.10's 799 tarball entries under `dist/types/tests/**` and 252 story entries into flow-react-components. All eight release builds now share `publishedDtsOptions` from packages/core. No consumer loses a type: no package's `exports` has a wildcard subpath, so those declarations were unreachable. The globs cannot move into the shared tsconfig preset — its `exclude` governs `tsc --noEmit`, and that would stop type-checking the tests. `@mittwald/flow-core` is now a declared devDependency of ext-bridge, remote-core and remote-elements, which newly import it — that is also the nx graph edge their build cache needs to invalidate on a core change. Verified by replaying every non-release commit on main since #2933 through the changed classifier: #3010 and #3008 flip to no-publish, and no commit that produced a legitimate release flips with them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
mfal
force-pushed
the
claude/docs-ci-no-release-ac12f4
branch
from
September 2, 2026 11:53
d0f60ae to
1145994
Compare
Member
Author
|
Superseded by #3098 and closing. #3080 had already taken the same ground further: it carries the package-local denylist including Nothing is lost: #3098 contains #3080's commit and carries over the one thing this branch had that it lacked — the 🤖 Closed by Claude Code |
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.
Relevance was decided by repo-root paths, so everything under
packages/**counted as publish-relevant wholesale. Two of the empty-changelog releases in #3023 came from that, and one class the issue does not list came later.What no longer publishes
Per PUSH, since that is what the
decidejob classifies:packages/components/.storybook/preview.tsxDockerfile/.dockerignoreTwo cases from #3023's evidence table are not closed, and that is deliberate — see "Not in scope":
package.jsonscriptsdiff andsrc/tests/visual/**drop out, butremote-react-components/CONTRIBUTE.mdanddev/cross-version/crossVersionRunner.tsstay relevantpatches/for@mfalkenberg/react-live-ssr, a dependency onlyapps/docsimportsThe change
The criterion is consumer effect, not tarball membership. The two differ in both directions, and only the first decides: a tarball carries the package's
scripts, yet nothing but the install lifecycle runs on a consumer's machine..storybook/**, the Storybook image'sDockerfile/.dockerignore,e2e/**,src/tests/**,*.stories.*,*.test.*.package.jsonis judged by its key diff, not only the root one.scriptsis irrelevant unless the diff touchespreinstall,install,postinstallorprepare. No Flow package defines one today — which is exactly why the guard belongs in code and not in someone's memory. Thedecidejob now fetches before/after for every changed manifest.packages/*/dev/**stays relevant, although Patch releases with an empty changelog: relevance is path-based, the changelog is type-based #3023 proposed skipping it. It is a build input:components/dev/vite/*is imported byvite.build.config.tsand shapes the emitted CSS layers,dev/component-indexanddev/status-registrywrite shippeddist/assets/*.json, andcodemods/dev/generatewrites the publishedMIGRATION.md.stories/directory stays relevant too — only the story files are skipped.createDocPropertiesJson.tsparses every.tsxundersrc/and ignores only*.stories.tsx, socomponents/Button/stories/lib.tsxcontributes five entries to the publisheddoc-properties.json.patches/entry for a dependency only a private project imports (1.1.5). Ruling it out needs the lockfile's importer graph including transitive edges, where a wrong answer swallows a real release. A test pins the current behaviour so the gap stays deliberate.Tests and stories leave
dist/types.unplugin-dtsemitted declarations for all ofsrc:flow-react-components*.stories.d.ts+ 126 mapsflow-remote-react-componentsdist/types/tests/**All eight release builds now share
publishedDtsOptionsfrompackages/core. No consumer loses a type: no package'sexportshas a wildcard subpath, so those declarations were unreachable. The globs cannot move into the shared tsconfig preset instead — itsexcludegovernstsc --noEmit, and that would stop type-checking the tests.@mittwald/flow-coreis now a declared devDependency ofext-bridge,remote-coreandremote-elements, which newly import it. That is also the nx graph edge their build cache needs in order to invalidate on acorechange.Verification
mainsince ci: skip the release for docs- and CI-only merges #2933 through the changed classifier: build(components): use the next-themes client entry in Storybook #3010 and ci: build the preview apps in CI and let the image only package them #3008 flip to no-publish, and no commit that produced a legitimate release flips with them.nextis symmetric — docs-onlychore(sync):merges produce no-next.Nbump (docs: add Documentation section to CONTRIBUTE.md #3067, docs: split Upgrades off the Versionierung page #3064, docs(Modal): remove the confusing "Show CloseButton" section #3056, fix(docs): stop repeating the version as the release headline #3054 among others).buildandtest:compilegreen for all eight touched packages; after the build, story/test declarations indist/typesdrop from 252+6 to 18 incomponentsand from 196 to 2 inremote-react-components. The remainder are real source modules the doc-properties generator sees, matching the denylist exactly.decidejob's shell loop was exercised locally against the no-match case (set -euo pipefailplusgrep || true).Not in scope
Tracked in #3083:
changelogPresetdecision, and an explanation for why 1.1.6 appears in the components changelog while 1.1.1 does not.files) and the test-only subdirectories ofdev/. Those two are why ci: shard the visual and cross-version suites, and gate PRs on the iframe harness #3006 and test: add contribute info and explicit set visual light theme #3003 still publish.Fixes #3023.
🤖 Generated with Claude Code