-
Notifications
You must be signed in to change notification settings - Fork 638
docs: add release process guide #9548
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
af9cb5b
bd50533
c3169f7
4591db6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,111 @@ | ||
| # Release Process | ||
|
|
||
| How versions are bumped, branches are created, and artifacts are published. | ||
|
|
||
| ## Version Semantics by Bump Type | ||
|
|
||
| All releases start from the same workflow (`release-version-bump.yaml`), but | ||
| the downstream effects differ based on bump type and target branch. | ||
|
|
||
| ### Minor bump on `main` (new development cycle) | ||
|
|
||
| A minor bump **freezes** the previous minor into stabilization branches and | ||
| starts a new cycle. | ||
|
|
||
| ``` | ||
| main: ──A──B──C──D──[bump to 1.42.0]──E──F──G── ... | ||
| │ | ||
| ├── core/1.41 (branched from D) | ||
| └── cloud/1.41 (branched from D) | ||
| ``` | ||
|
|
||
| Commits A–D are the "1.41" work. E–G are new "1.42" development. | ||
|
|
||
| The `core/1.41` and `cloud/1.41` branches are created from the commit | ||
| **before** the version bump — they capture everything on `main` while it was | ||
| at `1.41.x`. This is why the branches are named after the *previous* minor: | ||
| they represent the **stabilized 1.41 release line**, not the new 1.42 cycle. | ||
|
|
||
| The v1.41.0 GitHub release is published and marked "latest". `core/` and | ||
| `cloud/` labels are created for backporting. | ||
|
|
||
| ### Patch bump on `main` (daily snapshot) | ||
|
|
||
| A patch bump on `main` (e.g., `1.42.0` → `1.42.1`) simply publishes. **No | ||
| branches are created.** The GitHub release is published and marked "latest". | ||
|
|
||
| This is what the nightly cron does — it's a convenience snapshot of `main`. | ||
|
|
||
| ### Patch bump on `core/X.Y` (hotfix) | ||
|
|
||
| A patch bump on a stable branch (e.g., `core/1.41` from `1.41.5` → `1.41.6`) | ||
| publishes a hotfix. **No branches are created.** The GitHub release is created | ||
| as a **draft** — it must be manually published with "Set as latest release" | ||
| **unchecked**, so `main` remains the "latest". | ||
|
|
||
| ### Where the same commits end up | ||
|
|
||
| When a minor bump happens instead of a patch bump, the unreleased commits are | ||
| **dual-homed** — they appear in both places: | ||
|
|
||
| ``` | ||
| v1.40.1 ── A ── B ── C ── [bump to 1.41.0] | ||
| ``` | ||
|
Comment on lines
+25
to
+29
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add language specifier to fenced code block. The fenced code block should include a language identifier for proper syntax highlighting and markdown compliance. 📝 Proposed fix-```
+```text
v1.40.1 ── A ── B ── C ── [bump to 1.41.0]Verify each finding against the current code and only fix it if needed. In |
||
|
|
||
| - **If this were a patch bump** (1.40.1 → 1.40.2): A, B, C become v1.40.2. | ||
| - **As a minor bump** (1.40.1 → 1.41.0): A, B, C become v1.41.0 on `main`, | ||
| AND they sit on `core/1.40` where they could later ship as v1.40.2 via a | ||
| patch bump on that branch. | ||
|
|
||
| There's no divergence — it's the same commits in both. The only difference is | ||
| whether future work (1.41+ features) gets mixed in, which the branch prevents. | ||
| This is intentional — `core/1.40` exists so ComfyUI can stay on the 1.40.x | ||
| line and receive patches without jumping to 1.41. The same code ends up in | ||
| both places because it was developed during the 1.40 era — 1.41.0 just happens | ||
| to be the first release that includes it on `main`. | ||
|
|
||
| ## Summary Table | ||
|
|
||
| | Bump | Target | New branches? | GitHub release | | ||
| |---|---|---|---| | ||
| | Minor | `main` | ✅ `core/` + `cloud/` for previous minor | Published, "latest" | | ||
| | Patch | `main` | ❌ | Published, "latest" | | ||
| | Patch | `core/X.Y` | ❌ | **Draft** (uncheck "latest") | | ||
| | Prerelease | any | ❌ | Draft + prerelease | | ||
|
|
||
| ## Backporting | ||
|
|
||
| When a fix on `main` needs to go to a stable branch: | ||
|
|
||
| 1. Add `needs-backport` + version label (e.g., `1.41`) to the merged PR | ||
| 2. `pr-backport.yaml` cherry-picks the merge commit and creates a backport PR | ||
| 3. If conflicts arise, the workflow comments with details and an agent prompt | ||
|
|
||
| ## Publishing | ||
|
|
||
| Every merged PR with the `Release` label triggers `release-draft-create.yaml`: | ||
|
|
||
| | Channel | Package | | ||
| |---|---| | ||
| | GitHub Releases | `dist.zip` | | ||
| | PyPI | `comfyui-frontend-package` | | ||
| | npm | `@comfyorg/comfyui-frontend-types` | | ||
|
|
||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Description: Verify package names match repository configuration
echo "Checking npm package name..."
if [ -f "package.json" ]; then
npm_name=$(jq -r '.name' package.json)
echo "Found in package.json: $npm_name"
if [ "$npm_name" = "@comfyorg/comfyui-frontend-types" ]; then
echo "✓ npm package name matches documentation"
else
echo "⚠ npm package name differs from documentation"
fi
fi
echo ""
echo "Checking PyPI package name..."
for pyfile in pyproject.toml setup.py setup.cfg; do
if [ -f "$pyfile" ]; then
echo "Found: $pyfile"
case "$pyfile" in
pyproject.toml)
if grep -q "name.*comfyui-frontend-package" "$pyfile"; then
echo "✓ PyPI package name matches documentation"
else
echo "PyPI package name in $pyfile:"
grep "name" "$pyfile" | head -1
fi
;;
setup.py)
if grep -q "name.*comfyui-frontend-package" "$pyfile"; then
echo "✓ PyPI package name matches documentation"
else
echo "PyPI package name in $pyfile:"
grep "name" "$pyfile" | head -1
fi
;;
esac
fi
doneRepository: Comfy-Org/ComfyUI_frontend Length of output: 225 🏁 Script executed: # Find configuration files related to PyPI/Python packaging
find . -type f \( -name "pyproject.toml" -o -name "setup.py" -o -name "setup.cfg" -o -name "*.toml" \) 2>/dev/null | head -20Repository: Comfy-Org/ComfyUI_frontend Length of output: 105 🏁 Script executed: # Search for references to the PyPI package name in the repository
rg "comfyui-frontend-package" --type md --type txt --type toml --type yaml -iRepository: Comfy-Org/ComfyUI_frontend Length of output: 296 🏁 Script executed: # Check if there's a separate types package or verify npm package details
cat package.json | jq '.description, .version, .keywords' 2>/dev/nullRepository: Comfy-Org/ComfyUI_frontend Length of output: 130 🏁 Script executed: cat ./comfyui_frontend_package/setup.py | head -30Repository: Comfy-Org/ComfyUI_frontend Length of output: 347 Fix the npm package name in the documentation. The npm package name should be 🤖 Prompt for AI Agents |
||
| ## Bi-weekly ComfyUI Integration | ||
|
|
||
| `release-biweekly-comfyui.yaml` runs every other Monday: | ||
|
|
||
| 1. Checks ComfyUI's `requirements.txt` for the current frontend version | ||
| 2. If the next `core/` branch has unreleased commits, triggers a patch bump | ||
| 3. Creates a draft PR to `Comfy-Org/ComfyUI` updating `requirements.txt` | ||
|
|
||
| ## Workflow Reference | ||
|
|
||
| | Workflow | Purpose | | ||
| |---|---| | ||
| | `release-version-bump.yaml` | Bump version, create Release PR | | ||
| | `release-draft-create.yaml` | Build + publish to GitHub/PyPI/npm | | ||
| | `release-branch-create.yaml` | Create `core/` and `cloud/` branches (minor/major only) | | ||
| | `release-biweekly-comfyui.yaml` | Auto-patch + ComfyUI requirements PR | | ||
| | `pr-backport.yaml` | Cherry-pick fixes to stable branches | | ||
| | `cloud-backport-tag.yaml` | Tag cloud branch merges | | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add language specifier to fenced code block.
The fenced code block should include a language identifier for proper syntax highlighting and markdown compliance.
📝 Proposed fix
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 15-15: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents