This project uses cargo-release in order to prepare new releases, tag and sign relevant git commit, and publish the resulting artifacts to crates.io.
The release process follows the usual PR-and-review flow, allowing an external reviewer to have a final check before publishing.
In order to ease downstream packaging of Rust binaries, an archive of vendored dependencies is also provided (only relevant for offline builds).
Requirements
This guide requires:
a web browser (and network connectivity)
git
GPG setup and personal key for signing
cargo (suggested: latest stable toolchain from rustup)
Upload access to this project on GitHub and crates.io
Release checklist
These steps show how to release version x.y.z on the origin remote (this can be checked via git remote -av).
Push access to the upstream repository is required in order to publish the new tag and the PR branch.
make sure the project is clean and prepare the environment:
[x] cargo test
[x] cargo clean
[x] git clean -fd
[x] export RELEASE_VER=x.y.z
[x] export UPSTREAM_REMOTE=origin
:warning:: UPSTREAM_REMOTE should reference the locally configured remote that points to the upstream git repository.
create release commits on a dedicated branch and tag it:
[x] git checkout -b release-${RELEASE_VER}
[x] cargo release (and confirm the version when prompted)
Release process
This project uses cargo-release in order to prepare new releases, tag and sign relevant git commit, and publish the resulting artifacts to crates.io. The release process follows the usual PR-and-review flow, allowing an external reviewer to have a final check before publishing.
In order to ease downstream packaging of Rust binaries, an archive of vendored dependencies is also provided (only relevant for offline builds).
Requirements
This guide requires:
git
cargo
(suggested: latest stable toolchain from rustup)cargo-release
(suggested:cargo install -f cargo-release
)Release checklist
These steps show how to release version
x.y.z
on theorigin
remote (this can be checked viagit remote -av
). Push access to the upstream repository is required in order to publish the new tag and the PR branch.cargo test
cargo clean
git clean -fd
export RELEASE_VER=x.y.z
export UPSTREAM_REMOTE=origin
:warning::
UPSTREAM_REMOTE
should reference the locally configured remote that points to the upstream git repository.create release commits on a dedicated branch and tag it:
git checkout -b release-${RELEASE_VER}
cargo release
(and confirm the version when prompted)open a PR for this release:
git push ${UPSTREAM_REMOTE} release-${RELEASE_VER}
[x] get the PR reviewed, approved and merged
publish the artifacts (tag and crate):
git push ${UPSTREAM_REMOTE} v${RELEASE_VER}
git fetch --tags --verbose ${UPSTREAM_REMOTE} 2>&1 | grep ${RELEASE_VER}
git checkout v${RELEASE_VER}
git diff release-${RELEASE_VER}~1 v${RELEASE_VER}
cargo publish
assemble vendor archive:
cargo vendor
tar -czf target/afterburn-${RELEASE_VER}-vendor.tar.gz vendor
publish this release on GitHub:
target/afterburn-${RELEASE_VER}-vendor.tar.gz
sha256sum target/package/afterburn-${RELEASE_VER}.crate
sha256sum target/afterburn-${RELEASE_VER}-vendor.tar.gz
clean up:
cargo clean
rm -rf vendor
git checkout master
git pull ${UPSTREAM_REMOTE} master
git push ${UPSTREAM_REMOTE} :release-${RELEASE_VER}
git branch -d release-${RELEASE_VER}
unset RELEASE_VER
unset UPSTREAM_REMOTE