-
Story
-
Resolution: Done
-
Major
-
None
-
None
-
Upstream
-
5
-
False
-
-
False
-
-
-
249 - Core Packages
-
0
-
0.000
[2149134378] Upstream Reporter: Steven Presti
Upstream issue status: Closed
Upstream description:
- Release process
This project uses [cargo-release][cargo-release] in order to prepare new releases, tag and sign the relevant git commit, and publish the resulting artifacts to [crates.io][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][GPG setup] and personal key for signing
- `cargo` (suggested: latest stable toolchain from [rustup][rustup])
- `cargo-release` (suggested: `cargo install -f cargo-release`)
- `cargo vendor-filterer` (suggested: `cargo install -f cargo-vendor-filterer`)
- Write access to this GitHub project
- A verified account on crates.io
- An account on quay.io
- Write access to this project on quay.io
- Membership in the [Fedora CoreOS Crates Owners group](https://github.com/orgs/coreos/teams/fedora-coreos-crates-owners/members), which will give you upload access to 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.:warning:: if `origin` is not the name of the locally configured remote that points to the upstream git repository (i.e. `git@github.com:coreos/coreos-installer.git`), be sure to assign the correct remote name to the `UPSTREAM_REMOTE` variable.
- prepare environment:
- [x] `RELEASE_VER=x.y.z`
- [x] `UPSTREAM_REMOTE=origin`
- [x] `git checkout
b pre-release${RELEASE_VER}`
- check `Cargo.toml` for unintended increases of lower version bounds:
- [x] `git diff $(git describe --abbrev=0) Cargo.toml`
- update all dependencies:
- [x] `cargo update`
- [x] `git add Cargo.lock && git commit -m "cargo: update dependencies"`
- write release notes:
- [x] write release notes in `docs/release-notes.md`
- [x] `git add docs/release-notes.md && git commit -m "docs/release-notes: update for release ${RELEASE_VER}"`
- land the changes:
- [x] PR the changes, get them reviewed, approved and merged
- [ ] if doing a branched release, also include a PR to merge the `docs/release-notes.md` changes into main
- make sure the project is clean:
- [ ] Make sure `cargo-release` and `cargo-vendor-filterer` are up to date: `cargo install cargo-release cargo-vendor-filterer`
- [ ] `git checkout main && git pull ${UPSTREAM_REMOTE} main`
- [ ] `cargo vendor-filterer target/vendor`
- [ ] `cargo test --all-features --config 'source.crates-io.replace-with="vv"' --config 'source.vv.directory="target/vendor"'`
- [ ] `cargo clean`
- [ ] `git clean -fd`
- create release commit on a dedicated branch and tag it (the commit and tag will be signed with the GPG signing key you configured):
- [x] `git checkout
b release${RELEASE_VER}`- [x] `cargo release --execute ${RELEASE_VER}` (and confirm the version when prompted)
- open and merge a PR for this release:
- [x] `git push ${UPSTREAM_REMOTE} release-${RELEASE_VER}`
- [x] open a web browser and create a PR for the branch above
- [x] make sure the resulting PR contains exactly one commit
- [x] get the PR reviewed, approved and merged
- publish the artifacts (tag and crate):
- [x] `git checkout v${RELEASE_VER}`
- [x] verify that `grep "^version = "${RELEASE_VER}"$" Cargo.toml` produces output
- [x] `git push ${UPSTREAM_REMOTE} v${RELEASE_VER}`
- [x] `cargo publish`
- assemble vendor archive:
- [x] `cargo vendor-filterer -
format=tar.gz --prefix=vendor target/coreos-installer${RELEASE_VER}-vendor.tar.gz`
- publish this release on GitHub:
- [x] find the new tag in the [GitHub tag list](https://github.com/coreos/coreos-installer/tags), click the triple dots menu, and create a release for it
- [x] copy in the changelog from the release notes doc
- [x] upload `target/coreos-installer-${RELEASE_VER}-vendor.tar.gz`
- [x] record digests of local artifacts:
- `sha256sum target/package/coreos-installer-${RELEASE_VER}.crate`
- `sha256sum target/coreos-installer-${RELEASE_VER}-vendor.tar.gz`
- [x] publish release
- update the `release` tag on Quay:
- [x] visit the [Quay tags page](https://quay.io/repository/coreos/coreos-installer?tab=tags) and wait for a versioned tag to appear
- [x] click the gear next to the tag, select "Add New Tag", enter `release`, and confirm
- clean up the local environment (optional, but recommended):
- [x] `cargo clean`
- [x] `git checkout main`
- [x] `git pull ${UPSTREAM_REMOTE} main`
- [x] `git push ${UPSTREAM_REMOTE} :pre-release-${RELEASE_VER} :release-${RELEASE_VER}`
- [x] `git branch
d pre-release${RELEASE_VER} release-${RELEASE_VER}`
- Fedora packaging:
- [x] update the `rust-coreos-installer` spec file in [Fedora](https://src.fedoraproject.org/rpms/rust-coreos-installer)
- bump the `Version`
- switch the `Release` back to `1%{?dist}`
- remove any patches obsoleted by the new release
- update changelog
- [x] run `spectool -g -S rust-coreos-installer.spec`
- [x] run `kinit your_fas_account@FEDORAPROJECT.ORG`
- [x] run `fedpkg new-sources $(spectool -S rust-coreos-installer.spec | sed 's:.*/::')`
- [x] PR the changes in [Fedora](https://src.fedoraproject.org/rpms/rust-coreos-installer)
- [x] once the PR merges to rawhide, merge rawhide into the other relevant branches (e.g. f39) then push those, for example:
```bash
git checkout rawhide
git pull --ff-only
git checkout f39
git merge --ff-only rawhide
git push origin f39
```- [x] on each of those branches run `fedpkg build`
- [ ] once the builds have finished, submit them to [bodhi](https://bodhi.fedoraproject.org/updates/new), filling in:
- `rust-coreos-installer` for `Packages`
- selecting the build(s) that just completed, except for the rawhide one (which gets submitted automatically)
- writing brief release notes like "New upstream release; see release notes at `link to GitHub release`"
- leave `Update name` blank
- `Type`, `Severity` and `Suggestion` can be left as `unspecified` unless it is a security release. In that case select `security` with the appropriate severity.
- `Stable karma` and `Unstable` karma can be set to `2` and `-1`, respectively.
- [ ] [submit a fast-track](https://github.com/coreos/fedora-coreos-config/actions/workflows/add-override.yml) for FCOS testing-devel
- [ ] [submit a fast-track](https://github.com/coreos/fedora-coreos-config/actions/workflows/add-override.yml) for FCOS next-devel if it is [open](https://github.com/coreos/fedora-coreos-pipeline/blob/main/next-devel/README.md)
- RHCOS packaging:
- [ ] update the [spec file](https://gitlab.com/redhat/rhel/rpms/coreos-installer)
- bump the `Version`
- switch the `Release` back to `1%{?dist}`
- remove any patches obsoleted by the new release
- update changelog
- [ ] run `spectool -g -S coreos-installer.spec`
- [ ] run `kinit your_account@IPA.REDHAT.COM`
- [ ] run `rhpkg new-sources $(spectool -S coreos-installer.spec | sed 's:.*/::')`
- [ ] PR the changes
- [ ] get the PR reviewed and merge it
- [ ] update your local repo and run `rhpkg build`
- [ ] file ticket similar to [this one](https://issues.redhat.com/browse/ART-3772) to sync the new version to mirror.openshift.com
- [ ] wait until mirror.openshift.com is updated and confirm the new version is correct
CentOS Stream 9 packaging:
- [x] Create a `rebase-c9s-coreos-installer` issue in the internal team-operations repo and follow the steps there
[cargo-release]: https://github.com/sunng87/cargo-release
[rustup]: https://rustup.rs/
[crates-io]: https://crates.io/
[GPG setup]: https://docs.github.com/en/github/authenticating-to-github/managing-commit-signature-verification
- links to