coreos / afterburn

A one-shot cloud provider agent

Home Page:https://coreos.github.io/afterburn/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Release 4.4.0

lucab opened this issue · comments

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:

  • a web browser (and network connectivity)
  • git
  • GPG setup and personal key for signing
  • cargo (suggested: latest stable toolchain from rustup)
  • cargo-release (suggested: cargo install -f cargo-release)
  • A verified account on crates.io
  • Write access to this GitHub project
  • 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:
    • cargo test
    • cargo clean
    • git clean -fd
    • export RELEASE_VER=x.y.z
    • export UPSTREAM_REMOTE=origin

⚠️: 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}
    • open a web browser and create a PR for the branch above
    • make sure the resulting PR contains exactly two commits
    • in the PR body, write a short changelog with relevant changes since last release
  • get the PR reviewed, approved and merged

  • publish the artifacts (tag and crate):

    • git push ${UPSTREAM_REMOTE} v${RELEASE_VER}
    • make sure the upstream tag matches the local tag: git fetch --tags --verbose ${UPSTREAM_REMOTE} 2>&1 | grep ${RELEASE_VER}
    • git checkout v${RELEASE_VER}
    • make sure the tag is what you intend to release; if so this will show an empty output: 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:

    • open a web browser and create a GitHub Release for the tag above
    • write a short changelog (i.e. re-use the PR content)
    • upload target/afterburn-${RELEASE_VER}-vendor.tar.gz
    • record digests of local artifacts:
      • sha256sum target/package/afterburn-${RELEASE_VER}.crate
      • sha256sum target/afterburn-${RELEASE_VER}-vendor.tar.gz
    • publish release
  • 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