The previous publish.yml used `Comfy-Org/publish-node-action@main` to
upload the registry archive. That action runs its own internal
`actions/checkout@v4` step before zipping, which wipes the working
directory back to a fresh git checkout. Since `js/` and `web/` are
gitignored build outputs (Vite emits them per `[tool.comfy].includes`
in pyproject.toml force-includes them past .gitignore), our `pnpm run
build` step before the publish action got silently undone — the
upload zip ended up with empty `js/` + `web/` directories.
Observed in the v2.0.0 publish run (job 26577663233):
Creating zip file...
Including additional directories: js, web
Warning: Included directory 'js' does not exist, creating empty directory
Warning: Included directory 'web' does not exist, creating empty directory
Upload successful.
End-user impact: the registry-hosted v2.0.0 zip shipped with only the
Python engine (engine/, wp_nodes/, wp_api/) — no canvas widgets, no
manager SPA. ComfyUI loaded the Python side fine but every JS-driven
surface (Context widget, debug viewer, assembler helper, /wp/ SPA
route) failed to mount. Registry security scanner also flagged the
version (`NodeVersionStatusFlagged`), likely because of the empty
critical-include trees.
Fix: skip the wrapper action and call `comfy node publish` directly
via comfy-cli. No internal checkout means our `pnpm run build`
artifacts survive into the publish call.
Also added a `Verify build output` step that fails the job if `js/`
or `web/` is missing or empty after `pnpm run build`. Catches a
silently-broken build at the workflow level instead of letting it
become another empty registry archive.
Drops six pieces of repo plumbing in one go.
publish workflow (.github/workflows/publish.yml)
Fires on every published GitHub release + manual dispatch. Builds
the extension + manager SPA, then invokes Comfy-Org/publish-node-action
with REGISTRY_ACCESS_TOKEN so the ComfyUI Manager listing stays in
lockstep with semantic-release tags. Without this the README's
"search Wildcard Pipeline in the ComfyUI Manager" path would never
see new versions.
issue + PR forms (.github/ISSUE_TEMPLATE/, PULL_REQUEST_TEMPLATE.md)
- config.yml: blank issues off, three contact links (Discord first,
Discussions, Wiki).
- bug_report.yml: structured form with version chip, multi-select
surface dropdown covering all 10 nodes + 5 SPA areas + engine +
build, ComfyUI version, OS, Python version, repro, expected vs
actual, traceback (shell render), workflow JSON (json render),
WP Debug warnings paste-box.
- feature_request.yml: problem + proposal + alternatives + scope +
importance dropdown; nudges toward "describe the underlying
problem, not just the solution".
- PULL_REQUEST_TEMPLATE.md: summary, conventional-commit type
checkboxes mapped to release impact, related-issues line,
local-verification gate checklist, screenshots prompt for
visible changes, risk callout box.
release-zip + cleaner notes (.releaserc.js + scripts/pack-release.mjs)
- Switched commit-analyzer + release-notes-generator to the
conventionalcommits preset (already a transitive dep, no install).
- Marked chore/docs/style/test/build/ci as hidden:true so they
don't render in the GitHub release body. Only feat/fix/perf/
refactor/revert show. Past releases (v1.8.0) keep their long
notes; v1.9.0+ ships clean.
- New scripts/pack-release.mjs zips the deployable file set
(engine/, wp_nodes/, wp_api/, js/, web_dist/, public/, docs/help/,
__init__.py, pyproject.toml, README.md, LICENSE) into
dist/ComfyUI-Wildcard-Pipeline-v<version>.zip.
- @semantic-release/exec prepareCmd runs the version-stamping
AND the pack-release.mjs invocation so the zip carries the
right version in its name.
- @semantic-release/github assets config attaches the zip to the
GitHub release page so manual installers can grab a single
artifact instead of cloning at a specific tag.
Notes on what's NOT changed:
- ci.yml + release.yml stay as-is — local versions are a strict
superset of origin's (coverage gate, perf gate, fuzz job,
bundle-size budget). Release workflow already had the env +
permissions needed for semantic-release.
- bundle-size-pr.yml stays (local-only, useful).