Repository navigation
Publish releases from version tags; add RELEASING.md - #18
Merged
Merged
Conversation
Pushing a tag X.Y.Z runs every check, then publishes to crates.io and opens a draft GitHub release with that version's changelog section as the notes. The release fails early if the tag doesn't match Cargo.toml, CHANGELOG.md has no section for it, or the tag isn't on main. Each step skips work already done, so rerunning a failed release is safe. Publishing uses crates.io trusted publishing, so no API token is stored. PRs now run cargo publish --dry-run to catch packaging problems early. RELEASING.md describes the procedure.
jadamcrain
force-pushed
the
release-automation
branch
from
October 15, 2026 19:50
d6ce0ff to
054bdc8
Compare
Merged
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.
What
Release job: pushing a tag
X.Y.Zruns the full CI. If everything passes, areleasejob:Cargo.tomlversion, thatCHANGELOG.mdhas a### X.Y.Z ###section, and that the tagged commit is onmain.Because each step skips work already done, rerunning a failed release is safe. This follows the same model as dnp3 and rodbus: bare tags, publish only from tags, a draft release.
Packaging check on PRs: CI runs
cargo publish --dry-run.RELEASING.md: the human steps around the tag. They are: aRelease X.Y.ZPR that bumps the version and finalizes the changelog, then tagmainand push the tag, then review and publish the draft release. Also covers changelog conventions.Needs one-time setup before the first tagged release
Publishing uses crates.io trusted publishing, so there's no API token secret. scursor doesn't have access to dnp3's
CRATES_PUBLISH_TOKEN, which is a dnp3 repo secret. A crate owner needs to add a trusted publisher in the crate's settings on crates.io:stepfuncscursorci.ymlVerification
GitHub Actions can't run locally, so I extracted each release step's shell script from the workflow and ran it with test inputs:
mainare each rejected.cargo publish --dry-runpasses.The tag-triggered path itself first runs for real when 0.5.1 is tagged.