Repository navigation
[3.10] Pack the 231-ID set on the 3.10.0 tag path and add Studio npm publish (#8725) - #9066
Conversation
…#8725) (#9042) * fix(ci): pack the 231-ID set on the 3.10.0 tag path (#8725) Reuse prepare_consolidated_release_candidate.py for a 3.10.0 tag release/dispatch pack instead of Core-only Compile+Pack, and add a gated publish_npm job for the Studio wasm/react pair. Stable 3.10.x nuget.org promote stays fail-closed; stable npm exits before upload. Keep Elsa.Testing.Extensions unpackable so the candidate set matches the 231-ID guard. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> * fix(ci): keep Studio BPMN packages out of the 231-ID 3.10 set Main evaluates Elsa.Studio.Bpmn and Elsa.Studio.Bpmn.BpmnJs as packable under ConsolidatedReleaseCandidate. The 3.10 ID-set guard does not list them, so mark both unpackable for the tag pack. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> * fix(ci): refresh the candidate inventory baseline to 231 IDs Record the current main evaluation (231 packages, 159 exclusions) so prepare_consolidated_release_candidate.py can pack the same set as validate_packages_id_set.txt. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> * fix(ci): fail-close npmjs until trusted publishing is confirmed Keep Feedz npm first on publish_npm, then stop every ref before the npmjs.com upload until trusted publishing is confirmed for elsa-workflows/elsa-core. Pin the unconditional fail-closed step in the gates validator. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> * fix(ci): address #9042 R1 npm split and main-only baseline Drop the BPMN unpackable workaround, split the Studio npm pair into a credential-free build_npm job, publish Feedz only with a dist-tag and already-published handling, and reject stable 3.10.x npm in selection. The inventory baseline stays per branch: this commit does not treat main's evaluation as the release/3.10.0 set. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> * fix(ci): refresh main's candidate inventory baseline from main Regenerate consolidated-candidate-inventory-baseline.json from this branch's evaluation (233 packages, 157 exclusions). This is main's inventory only; a [3.10] pick must rebuild it from release/3.10.0. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> * fix(ci): require tests before the Studio npm pair build build_npm now needs the packages build job so a tag npm dispatch still runs tests and the main/release/* commit check. Match npmjs host names with a regex instead of a substring. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> * fix(ci): refresh main's candidate inventory after the X6 module Regenerate the per-branch baseline from current main: 233 packages and 158 exclusions, including Elsa.Studio.Bpmn.X6 as a nonpackable row. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> (cherry picked from commit 4b34093)
Record this branch's evaluation (231 packages, 135 exclusions) so the 3.10.0 tag pack matches validate_packages_id_set.txt. This is not main's inventory. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
|
@elsa-workflows-bot review |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
[Medium impact] No outstanding findings block merging. The previously reported Studio npm build failure is addressed in the current workflow. SummaryThis PR adds the 231-package build path for the
Reviews (2) · Last reviewed commit: "fix(ci): keep packages build_npm from wr..." · Reviewed by Greptile |
There was a problem hiding this comment.
Elsa 3 Code Review: REQUEST_CHANGES + HIGH @ b04e078
Code Review, Round 1/6
This is the [3.10] pick of #9042 (4b34093b). The pick itself is faithful, but one inherited bug stops the new build_npm job on any allowed tag, so this can't merge as is.
What I checked
- Faithful backport. Every changed line in the 8 script, test and skill files matches #9042.
packages.ymlandpackage-publisher-gates.mddiffer only in the comment and doc wording about the per-branch baseline. Nothing else changes behaviour. - Baseline matches the ID set.
consolidated-candidate-inventory-baseline.jsonat this head has 231 packages and 135 exclusions (366 projects). The package IDs exactly matchscripts/validate_packages_id_set.txt(231 on each side, no differences). Every listed project exists on this branch, with no duplicates.evidence.source_commitis the cherry-pick commit4c272d6f. The follow-up commit only touches the JSON, so the evaluation still holds for this head. There are no Studio BPMN/X6 rows, so main's 233/158 inventory did not leak in. - Patch safety on release/3.10.0. Branch pushes and non-
3.10.0tags still run Core-onlyCompile+Pack. Only a3.10.0releaseevent, or a non-promote dispatch from that tag, takes the consolidated pack. That pack writes to./packages, so the existingelsa-nuget-packagesupload and thePACKAGES_DIR231-ID guard see the same bytes. The consolidated pack's own clean-worktree check is safe, because its imports stay underscripts/integration-program/and that folder ignores__pycache__/. Stable 3.10.x npm is rejected both in selection and in the job.build_npmkeepsneeds: build. The npmjs host check uses a regex. - The other changes apply to every
buildrun: the 180-minute timeout and the extra 8.0/9.0 SDKs. There's no rootglobal.json, so SDK selection still resolves to 10.x. That's acceptable, and it's the same as main.
Blocking
build_npmfailssource-checkoutbefore it builds anything (packages.yml, the "Build the Studio npm pair" step). This confirms Greptile's P1.prove_studio_npm_pair.pyloads.agents/skills/elsa-release/scripts/verify_packages.pywithspec_from_file_locationplusexec_module, and that writes.agents/skills/elsa-release/scripts/__pycache__/. No.gitignorecovers that path: the root file only ignoresextensions/src/**/__pycache__/, and thescripts/integration-program/one doesn't reach.agents/.prove()then requires an emptygit status --porcelainand fails withsource-checkout. Every allowedpublish_npmdispatch (3.10.x prerelease tags) therefore fails, and nothing gets published.studio-npm-pair.ymlavoids this withPYTHONDONTWRITEBYTECODE: '1'.- Fix: add
env: PYTHONDONTWRITEBYTECODE: '1'to thebuild_npmjob or step. Prefer that overpython3 -B: the gates validator finds the step by the exactNPM_PAIR = "python3 scripts/integration-program/prove_studio_npm_pair.py"substring, and-Bwould break that match. Pin the env invalidate_packages_workflow_gates.py, with a test intest_validate_packages_workflow_gates.py, so the regression can't come back. - The same bug is already on main through #9042. Land the fix on main and add it to this pick, or carry the same commit on both branches, so the two workflows don't drift.
- Fix: add
Non-blocking
- Greptile P2:
validate-packages-gates.ymlnow triggers onprove_studio_npm_pair.pyand its test, but none of its commands runstest_prove_studio_npm_pair.py, because thetest_prove_consolidated*.pydiscovery skips it. Other PR workflows do run it, so this is a gap in this check, not lost coverage. It's worth adding a focused discovery line when the blocker fix touches this area. - Carried from #9042: publish WASM before React explicitly instead of relying on glob order, the
publish_npminput description, and the npmjswith:check. The already-published detection only grepsEPUBLISHCONFLICT|cannot publish over. Feedz may answer a re-publish with a different error (for example a 409), which would turn a rerun red. That's fine for now, but worth confirming on the first prerelease dispatch. - Maintainability: the
refs/tags/3.10.0and stable-3.10.xif:expressions are now repeated across the setup-python, Compile+Pack, Pack and Upload steps. A follow-up on main could compute them once as step outputs. It's not a reason to hold this pick. - The cherry-pick message carries the full squash history, including "Keep Elsa.Testing.Extensions unpackable", which isn't in the final diff. That only matters for anyone reading the log.
CI
At posting time, validate-gates, select-tests, retained-testing-helper, CLA, GitGuardian and Greptile are green. ubuntu-latest and import-rehearsal-tests are still running. This verdict doesn't depend on them.
— Code Review (Elsa 3), via Elsa Review
Set PYTHONDONTWRITEBYTECODE on the job so importing verify_packages does not create an unignored __pycache__ before the pair helper's source-checkout check. Pin that env in the gates validator. Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com> (cherry picked from commit 6a70171)
|
@elsa-workflows-bot review |
There was a problem hiding this comment.
Elsa 3 Code Review: APPROVE + HIGH @ e54f5e3
Code Review, Round 2/6
The R1 blocker is fixed, and the delta since b04e078a is small and contained. Approving.
What I checked (delta b04e078a..e54f5e3e, 3 files, +14/-0)
- R1 blocker fixed.
build_npmnow sets job-levelenv: PYTHONDONTWRITEBYTECODE: '1'(packages.yml:526-527), the same settingstudio-npm-pair.ymluses. Python reads it at startup, so the in-processexec_moduleof.agents/skills/elsa-release/scripts/verify_packages.pyno longer writes__pycache__/, and thesource-checkoutporcelain check atprove_studio_npm_pair.py:457(and the re-check at :517) sees a clean tree. The helper's child processes, which run with a filtered env, only runnpmanddotnet, so dropping the variable there doesn't matter. Because the setting is job-level, it covers every Python step in the job, and the pair command keeps the exactpython3 scripts/integration-program/prove_studio_npm_pair.pytext, so the gatesNPM_PAIRmatch still holds. - Validator pin.
build_npm_violationsnow rejects a missing or non-"1"PYTHONDONTWRITEBYTECODE(it safely tolerates a non-dictenv).test_build_npm_must_set_pythondontwritebytecoderemoves the block throughmutated(), which asserts that its anchor occurs exactly once.packages.ymlhas only oneenv:block of that shape, so the test targetsbuild_npmand nothing else.validate-gatesis green on this head, which covers both the real-workflow pass and the new rejection. - Same commit as main. The delta matches #9067 (
6a70171f) line for line, sorelease/3.10.0and main won't drift once #9067 lands. - No regressions. Nothing else changed. The baseline (231/135, equal to the ID set), the Core-only behaviour on branches and non-
3.10.0tags, and the stable-3.10.x npm rejection are all as I verified in R1.
Non-blocking (carried, not reasons to hold)
- Greptile P2:
validate-packages-gates.ymlstill doesn't discovertest_prove_studio_npm_pair.py. Other PR workflows run it, so this is a gap in this check only. It's a good follow-up on main. - From #9042: publish WASM before React explicitly instead of relying on glob order, tidy the
publish_npminput description, and confirm on the first prerelease dispatch that Feedz's re-publish error matches theEPUBLISHCONFLICT|cannot publish overdetection. - Maintainability: compute the repeated
refs/tags/3.10.0and stable-3.10.xif:expressions once, as a follow-up on main.
Threads
Both Greptile threads are resolved. The P1 is fixed on this head and the P2 was answered as non-blocking. CodeRabbit skipped this PR because of its non-default base.
CI
All checks are green on this head: validate-gates, ubuntu-latest, import-rehearsal-tests, select-tests, retained-testing-helper, CLA, GitGuardian and Greptile. run-affected-tests was skipped.
This PR changes CI workflows on the release path, so I'm approving and leaving the merge to the Lead/owner (--match-head-commit e54f5e3e067295616eef96d8344c6914d869d42a).
— Code Review (Elsa 3), via Elsa Review
Cherry-pick of #9042 (main
4b34093b) ontorelease/3.10.0.Refs #8725
git cherry-pick -x 4b34093bapplied cleanly. The candidate inventory baseline was regenerated fromrelease/3.10.0itself: 366 projects, 231 packages, 135 exclusions. That package set is the 231-ID list. This is not main's 233/158 inventory.build_npmneedsbuild.publish_npmpublishes the Studio pair to Feedz only. npmjs.com is not in this job. Stable 3.10.x npm stays fail-closed. No publish or Feedz dispatch was run.Scope
Checklist