mirror of https://github.com/aya-rs/aya
				
				
				
			docs: Add release documentation
This describes the current process for performing releases from the aya workspace. Signed-off-by: Dave Tucker <dave@dtucker.co.uk>reviewable/pr1051/r1
							parent
							
								
									0e70838b0f
								
							
						
					
					
						commit
						480859a8da
					
				| @ -0,0 +1,112 @@ | |||||||
|  | # Releasing the aya project | ||||||
|  | 
 | ||||||
|  | This document describes the process of releasing the aya project. | ||||||
|  | 
 | ||||||
|  | ## Release process | ||||||
|  | 
 | ||||||
|  | ### 0. Who can release? | ||||||
|  | 
 | ||||||
|  | Only members of the aya-rs GitHub organization in the `owners` team have the | ||||||
|  | permissions to: | ||||||
|  | 
 | ||||||
|  | - Push packages to crates.io | ||||||
|  | - Make the necessary changes in GitHub to create a release | ||||||
|  | 
 | ||||||
|  | ### 1. cargo smart-release | ||||||
|  | 
 | ||||||
|  | This project uses [cargo-smart-release][cargo-smart-release] to automate the | ||||||
|  | release process. The following commands *should* be sufficient to release the | ||||||
|  | project: | ||||||
|  | 
 | ||||||
|  | > [!IMPORTANT] | ||||||
|  | > The `--execute` flag is used to actually perform the release. | ||||||
|  | > Remove it to do a dry-run first. | ||||||
|  | > | ||||||
|  | > The `--no-changelog-github-release` flag is used to prevent creating a GitHub | ||||||
|  | > release with the changelog. This is required since it will fail to find the | ||||||
|  | > tags unless they've been pushed. | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | cargo smart-release aya --execute --signoff --no-changelog-github-release | ||||||
|  | cargo smart-release aya-ebpf --execute --signoff--no-changelog-github-release | ||||||
|  | cargo smart-release aya-log-ebpf --execute --signoff --no-changelog-github-release | ||||||
|  | cargo smart-release aya-log --execute  --signoff--no-changelog-github-release | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | [cargo-smart-release]: https://github.com/Byron/cargo-smart-release | ||||||
|  | 
 | ||||||
|  | ### 2. Push the commits and tags | ||||||
|  | 
 | ||||||
|  | This assumes you opted to disable branch protection: | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | git push origin main | ||||||
|  | git push origin tag aya-vX.Y.Z | ||||||
|  | git push origin tag aya-ebpf-vX.Y.Z | ||||||
|  | # etc... | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | > [!WARNING] | ||||||
|  | > Remember to re-enable branch protection after pushing the commits/tags. | ||||||
|  | 
 | ||||||
|  | Opening PRs for the changes made by the release would be a good enhancement | ||||||
|  | in future releases. However, we also need to create the tags via GitHub action | ||||||
|  | also - due to branch protection. | ||||||
|  | 
 | ||||||
|  | ### 3. Create a GitHub release | ||||||
|  | 
 | ||||||
|  | Create a GitHub release for each crate with the changelog entries for the new | ||||||
|  | version. The changelog entries are in the `CHANGELOG.md` file in each crate's | ||||||
|  | root directory. | ||||||
|  | 
 | ||||||
|  | The easiest way to do this is via the `gh` CLI: | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | NOTES="$(awk -v v="X.Y.Z" ' | ||||||
|  |   BEGIN {RS=""; FS="\n"} | ||||||
|  |   $0 ~ "## " v { | ||||||
|  |     print $0 | ||||||
|  |     s=1 | ||||||
|  |     next | ||||||
|  |   } | ||||||
|  |   s && /^## / { | ||||||
|  |     exit | ||||||
|  |   } | ||||||
|  |   s { | ||||||
|  |     print $0 | ||||||
|  |     print "" | ||||||
|  |   } | ||||||
|  | ' aya/CHANGELOG.md)" | ||||||
|  | gh release create aya-vX.Y.Z --title "aya vX.Y.Z" --notes "$NOTES" | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## Release Debugging | ||||||
|  | 
 | ||||||
|  | Sometimes the release process can fail. | ||||||
|  | Here are some common issues and how to fix them: | ||||||
|  | 
 | ||||||
|  | ### `cargo smart-release` doesn't compute the correct version | ||||||
|  | 
 | ||||||
|  | You can manually specify the version to release by passing the `--bump` flag | ||||||
|  | and specifying either `major`, `minor`, or `patch`. This *should* be computed | ||||||
|  | from the commits in the changelog, but sometimes it doesn't work as expected. | ||||||
|  | 
 | ||||||
|  | ### can't release aya-ebpf because of cyclic dependencies | ||||||
|  | 
 | ||||||
|  | This is a known issue described in [#1050][#150]. | ||||||
|  | The fix is to remove the `dev-dependencies` from `aya-ebpf-macros`, | ||||||
|  | re-run the failed `cargo publish` command from the output of | ||||||
|  | `cargo smart-release`. | ||||||
|  | 
 | ||||||
|  | [#150]: https://github.com/aya-rs/aya/issues/1050 | ||||||
|  | 
 | ||||||
|  | ### WOULD stop release after commit as the changelog entry is empty for crate | ||||||
|  | 
 | ||||||
|  | If you see the message ☝ in the output of `cargo smart-release`, it means that | ||||||
|  | the generated changelog entry for the crate is empty. This can happen if, for | ||||||
|  | example, the only change is a dependency update. In this case, you can manually | ||||||
|  | edit the changelog entry in the crate's `CHANGELOG.md` file to include a note | ||||||
|  | about the dependency update under the `## Unreleased` section. | ||||||
|  | [c3f0c7dc][c3f0c7dc] is an example of such a commit. | ||||||
|  | 
 | ||||||
|  | [c3f0c7dc]: https://github.com/aya-rs/aya/commit/c3f0c7dc3fb285da091454426eeda0723389f0f1 | ||||||
					Loading…
					
					
				
		Reference in New Issue