بنقرة واحدة
release
// Create and publish releases for the Hongdown project. Use when releasing a new version, creating a patch release, or creating a major/minor release. Handles CHANGES.md updates, version bumping, tagging, and branch management.
// Create and publish releases for the Hongdown project. Use when releasing a new version, creating a patch release, or creating a major/minor release. Handles CHANGES.md updates, version bumping, tagging, and branch management.
| name | release |
| description | Create and publish releases for the Hongdown project. Use when releasing a new version, creating a patch release, or creating a major/minor release. Handles CHANGES.md updates, version bumping, tagging, and branch management. |
This skill automates the release process for the Hongdown project. There are two types of releases: patch releases and major/minor releases.
Before starting any release:
Verify the remote repository name:
git remote -v
Use the correct remote name (usually origin or dahlia) in all push
commands.
Ensure you're on the correct branch and it's up to date.
Run tests and quality checks to ensure everything passes:
cargo test && cargo fmt --check && cargo clippy -- -D warnings
cargo run -- --check *.md
Patch releases (e.g., 1.2.3) are for bug fixes and small improvements.
They are created from X.Y-maintenance branches.
Check out the maintenance branch:
git checkout 1.2-maintenance
git pull
Update CHANGES.md: Find the section for the version being released and change “To be released.” to “Released on {Month} {Day}, {Year}.” using the current date in English. For example:
Version 1.2.3
-------------
Released on January 5, 2026.
Commit the changes:
git add CHANGES.md
git commit -m "Release 1.2.3"
Create the tag (without v prefix). Always use -m to provide a tag
message to avoid opening an editor for GPG-signed tags:
git tag -m "Hongdown 1.2.3" 1.2.3
Add a new section at the top of CHANGES.md for the next patch version:
Version 1.2.4
-------------
To be released.
Version 1.2.3
-------------
Released on January 5, 2026.
Bump the version in Cargo.toml:
Change version = "1.2.3" to version = "1.2.4".
Commit the version bump:
git add -A
git commit -m "Version bump
[ci skip]"
Push the tag and branch to the remote:
git push origin 1.2.3 1.2-maintenance
After creating a patch release, you must merge it forward to newer maintenance
branches and eventually to main.
Check if a newer maintenance branch exists (e.g., 1.3-maintenance):
git branch -a | grep maintenance
If a newer maintenance branch exists, follow these sub-steps:
a) Check out the newer branch and merge the tag:
~~~~ bash
git checkout 1.3-maintenance
git merge 1.2.3
~~~~
b) Resolve any conflicts (commonly in CHANGES.md and Cargo.toml).
c) Copy changelog entries: After resolving conflicts, copy the changelog entries from the merged tag's version into the current branch's unreleased version section. The entries should be inserted above any existing entries.
For example, if merging 1.2.3 into 1.3-maintenance where 1.3.2 is
pending:
*Before* (1.3-maintenance):
~~~~ markdown
Version 1.3.2
-------------
To be released.
- Added new logging features.
~~~~
*Merged tag 1.2.3 contains*:
~~~~ markdown
Version 1.2.3
-------------
Released on January 6, 2026.
- Fixed a crash on startup.
~~~~
*After* (1.3-maintenance):
~~~~ markdown
Version 1.3.2
-------------
To be released.
- Fixed a crash on startup.
- Added new logging features.
~~~~
d) Run tests to verify:
~~~~ bash
cargo test && cargo fmt --check && cargo clippy -- -D warnings
cargo run -- --check *.md
~~~~
e) Complete the merge commit (use default message).
f) Create a new patch release for this branch by repeating Steps 1-3 for version 1.3.x (e.g., 1.3.1).
g) Continue cascading to even newer maintenance branches if they exist.
If no newer maintenance branch exists, merge to main:
git checkout main
git merge 1.2.3 # or the last tag you created (e.g., 1.3.1)
Resolve conflicts, run tests, and push:
cargo test && cargo fmt --check && cargo clippy -- -D warnings
cargo run -- --check *.md
git push origin main
[!IMPORTANT] Do not add patch release entries into
main's unreleased section. The unreleased section (e.g.,Version 1.3.0) should only contain entries planned for the next major/minor release. Keep it unchanged.Do keep all released version sections from the merged tag. Released version sections (e.g.,
Version 1.2.3) are historical records. They must remain in CHANGES.md as their own separate sections placed after the unreleased section — never delete them when resolving conflicts.After conflict resolution, CHANGES.md on
mainshould look like this (note:Version 1.3.0section is unchanged;Version 1.2.3section is preserved from the merged tag):
Version 1.3.0
-------------
To be released.
- (existing planned entries, untouched)
Version 1.2.3
-------------
Released on January 6, 2026.
- Fixed a crash on startup.
Version 1.2.2
...
Major/minor releases (e.g., 1.3.0, 2.0.0) introduce new features or breaking
changes. They are always created from the main branch with patch version 0.
Check out and update main:
git checkout main
git pull
Update CHANGES.md: Find the section for the version being released and change “To be released.” to “Released on {Month} {Day}, {Year}.” using the current date in English. For example:
Version 1.3.0
-------------
Released on January 5, 2026.
Commit the changes:
git add CHANGES.md
git commit -m "Release 1.3.0"
Create the tag (without v prefix). Always use -m to provide a tag
message to avoid opening an editor for GPG-signed tags:
git tag -m "Hongdown 1.3.0" 1.3.0
Add a new section at the top of CHANGES.md for the next minor version:
Version 1.4.0
-------------
To be released.
Version 1.3.0
-------------
Released on January 5, 2026.
Bump the version in Cargo.toml:
Change version = "1.3.0" to version = "1.4.0".
Commit the version bump:
git add -A
git commit -m "Version bump
[ci skip]"
git push origin 1.3.0 main
Create the maintenance branch from the release tag:
git branch 1.3-maintenance 1.3.0
Check out the maintenance branch:
git checkout 1.3-maintenance
Add a section for the first patch version in CHANGES.md:
Version 1.3.1
-------------
To be released.
Version 1.3.0
-------------
Released on January 5, 2026.
Bump the version in Cargo.toml:
Change version = "1.3.0" to version = "1.3.1".
Commit the version bump:
git add -A
git commit -m "Version bump
[ci skip]"
Push the maintenance branch:
git push origin 1.3-maintenance
X.Y.Z where Z > 0 (e.g., 1.2.3, 1.2.4)X.Y.0 (e.g., 1.3.0, 1.4.0)X.0.0 (e.g., 2.0.0, 3.0.0)X.Y-maintenance (e.g., 1.2-maintenance)v prefix (e.g., 1.2.3, not v1.2.3)Hongdown X.Y.Z format (use -m flag to avoid editor)Each version section follows this format:
Version X.Y.Z
-------------
Released on {Month} {Day}, {Year}.
- Change description.
- Another change.
For unreleased versions:
Version X.Y.Z
-------------
To be released.
X.Y-maintenance branchX.Y.Z with -m "Hongdown X.Y.Z"Version bump\n\n[ci skip]main (if no newer maintenance branches):
main's unreleased section
unchanged; retain all released version sections from the merged tagmain's
versionmain branchX.Y.0 with -m "Hongdown X.Y.0"Version bump\n\n[ci skip]main branchX.Y-maintenance branch from tagVersion bump\n\n[ci skip]