**Making a new Release of Rosenpass — Cooking Recipe** If you have to change a file, do what it takes to get the change as commit on the main branch, then **start from step 0**. If any other issue occurs 0. Make sure you are in the root directory of the project - `cd "$(git rev-parse --show-toplevel)"` 1. Make sure you locally checked out the head of the main branch - `git stash --include-untracked && git checkout main && git pull` 2. Make sure all tests pass - `cargo test` 3. Make sure the current version in `rosenpass/Cargo.toml` matches that in the [last release on GitHub](https://github.com/rosenpass/rosenpass/releases) - Only normal releases count, release candidates and draft releases can be ignored 4. Pick the kind of release that you want to make (`major`, `minor`, `patch`, `rc`, ...) - See `cargo release --help` for more information on the available release types - Pick `rc` if in doubt 5. Try to release a new version - `cargo release rc --package rosenpass` - An issue was reported? Go fix it, start again with step 0! 6. Actually make the release - `cargo release rc --package rosenpass --execute` - Tentatively wait for any interactions, such as entering ssh keys etc. - You may be asked for your ssh key multiple times! **Frequently Asked Questions (FAQ)** - You have untracked files, which `cargo release` complains about? - `git stash --include-untracked` - You cannot push to crates.io because you are not logged in? - Follow the steps displayed in [`cargo login`](https://doc.rust-lang.org/cargo/commands/cargo-login.html) - How is the release page added to [GitHub Releases](https://github.com/rosenpass/rosenpass/releases) itself? - Our CI Pipeline will create the release, once `cargo release` pushed the new version tag to the repo. The new release should pop up almost immediately in [GitHub Releases](https://github.com/rosenpass/rosenpass/releases) after the [Actions/Release](https://github.com/rosenpass/rosenpass/actions/workflows/release.yaml) pipeline started. - No new release pops up in the `Release` sidebar element on the [main page](https://github.com/rosenpass/rosenpass) - Did you push a `rc` release? This view only shows non-draft release, but `rc` releases are considered as draft. See [Releases](https://github.com/rosenpass/rosenpass/releases) page to see all (including draft!) releases. - The release page was created on GitHub, but there are no assets/artifacts other than the source code tar ball/zip? - The artifacts are generated and pushed automatically to the release, but this takes some time (a couple of minutes). You can check the respective CI pipeline: [Actions/Release](https://github.com/rosenpass/rosenpass/actions/workflows/release.yaml), which should start immediately after `cargo release` pushed the new release tag to the repo. The release artifacts only are added later to the release, once all jobs in bespoke pipeline finished. - How are the release artifacts generated, and what are they? - The release artifacts are built using one Nix derivation per platform, `nix build .#release-package`. It contains both statically linked versions of `rosenpass` itself and OCI container images.