From ae56fdb1af477f47ff8f7560211d5ecd6b9c4d7b Mon Sep 17 00:00:00 2001 From: Paul Pietkiewicz Date: Tue, 15 Feb 2022 08:09:12 -0500 Subject: [PATCH] feat(release): prepare release notes Signed-off-by: Paul Pietkiewicz --- docs/Contributing/Release.md | 188 +++++++++++++++++++++++++++++++++++ sidebars.js | 2 +- 2 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 docs/Contributing/Release.md diff --git a/docs/Contributing/Release.md b/docs/Contributing/Release.md new file mode 100644 index 000000000..76af8f872 --- /dev/null +++ b/docs/Contributing/Release.md @@ -0,0 +1,188 @@ +# Release Process + +## Prerequisites: +- Prepare release notes + + +## Weekly chores +### Enarx dependency update +- Update local code + ```bash + git fetch --all + git checkout origin/main + ``` +- Checkout chore branch + ```bash + git checkout -b chore/cargo-update + ``` +- Run `cargo update` within all individual sub-crates + ```bash + for d in internal/*/ ; do (cd "$d" && cargo update); done + ``` +- Git commit sub-crate update + ```bash + git commit -asS -m 'chore(deps): update internal crate dependencies' + ``` +- Run cargo update on `enarx` + ```bash + cargo update + ``` +- Git commit sub-crate update + ```bash + git commit -asS -m 'chore(deps): update Enarx dependencies' + ``` +- Run build and tests + ```bash + cargo clean + cargo build + cargo tests + ``` +- Create PR + ```bash + git push origin chore/cargo-update + gh pr create --title "chore(deps): update Enarx dependencies" + ``` + + +## Enarx Release + +### Update and release prerequiste crates +> **NOTE: ** This may be an optional step dependant on whether there are relevant changes in the prerequisite crates (e.g. `xsave`, `sallyport`, etc.): +- Determine expected version by reviewing output of `git log` +- Set new version + ```bash + export MAJOR=0 + export MINOR=2 + export PATCH=2 + export NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}" + ``` +- Ensure all approved PRs are merged +- Get latest updates and checkout branch + ```bash + git fetch --all + git checkout origin/main + git checkout -b "b${MAJOR}.${MINOR}.z" + ``` +- Update dependencies + ```bash + cargo update + ``` +- Determine if crate builds and if it works + ```bash + cargo clean + cargo build + cargo test + ``` +- Update version in `Cargo.toml` + ```bash + sed -i 's/^version = .*/version = \"'${NEW_VERSION}'\"/' Cargo.toml + cargo update -p $(grep name Cargo.toml | cut -d'"' -f2) + ``` +- Run `cargo test` again + ```bash + cargo clean + cargo build + cargo test + ``` +- Commit change and push to repo + ```bash + git commit -asS -m "chore(release): Release v${NEW_VERSION}" + git push origin + ``` +- Confirm that changes passed on CI +- Create a git tag + ```bash + git tag --sign -m "chore(release): Release v${NEW_VERSION}" v${NEW_VERSION} + git push --tags origin "b${MAJOR}.${MINOR}.z" + ``` +- Cargo publish + ```bash + cargo publish + ``` +- Create a PR + ```bash + gh pr create --title "Release v${NEW_VERSION}" + ``` + +### The Enarx release itself +- Determine expected version by reviewing output of `git log` +- Set new version + ```bash + export MAJOR=0 + export MINOR=2 + export PATCH=2 + export NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}" + ``` +- Get latest updates and checkout branch + ```bash + git fetch --all + git checkout origin/main + git checkout -b "b${MAJOR}.${MINOR}.z" + ``` +- Bump version inside sub-crate `internal/{shim-sev,shim-sgx,wasmdr}/Cargo.toml` files + ```bash + for d in internal/*/ ; do ( cd "$d" + sed -i 's/^version = .*/version = \"'${NEW_VERSION}'\"/' Cargo.toml + cargo update -p $(basename ${d}) + git mv Cargo.toml Cargo.tml ) + done + sed -i 's/^version = .*/version = \"'${NEW_VERSION}'\"/' Cargo.toml + cargo update -p $(grep name Cargo.toml | cut -d'"' -f2) + ``` +- _POTENTIALLY OPTIONAL STEP: If there are any changes in the prerequisite crates (e.g. `xsave`, `sallyport`, etc) then it will be required to manually update the crates now_ + ```bash + export UPDATED_PREREQUISTES=(xsave sallyport) + for d in internal/*/ ; do ( cd "$d" + for p in ${UPDATED_PREREQUISTES[@]]}; do + cargo update -p "${p}" + done + done + for p in ${UPDATED_PREREQUISTES[@]]}; do cargo update -p ${p}; done + ``` +- Run unit tests + ```bash + cargo clean + cargo build + cargo test + ``` +- Rename Cargo.toml to Cargo.tml in sub-crates to address `cargo` sub-crate limitation + ```bash + for d in internal/*/ ; do ( cd "$d" + git mv Cargo.toml Cargo.tml ) + done +- Check cargo manifest + ```bash + cargo package --allow-dirty -l + ``` +- Commit change and push to repo + ```bash + git commit -asS -m "chore(release): Release v${NEW_VERSION}" + git push origin "release/${NEW_VERSION}" + ``` +- Create and push `git` tag + ```bash + git tag --sign -m "chore(release): Release v${NEW_VERSION}" v${NEW_VERSION} + git push --tags origin "b${MAJOR}.${MINOR}.z" + ``` +- Package and publish Enarx crate + ```bash + cargo publish -v + ``` +- Restore Cargo.tml files to Cargo.toml files + ```bash + for i in internal/*/Cargo.tml; do git mv $i ${i%.tml}.toml; done + git commit -asS -m 'chore(release): put back Cargo.toml files' + git push origin "b${MAJOR}.${MINOR}.z" + ``` +- Create a PR + ```bash + gh pr create --title "Release v${NEW_VERSION}" +- Create draft GitHub release + ```bash + gh release create -d --generate-notes "v${NEW_VERSION}" + ``` +- Update GitHub release notes +- Merge release PR +- Publish GitHub release +- Send notification to RocketChat #annoucements & #general channels +- Assign issue to post release to social media channels diff --git a/sidebars.js b/sidebars.js index 0b6be0663..e34b2e520 100644 --- a/sidebars.js +++ b/sidebars.js @@ -36,7 +36,7 @@ const sidebars = { { type: 'category', label: 'Contributing Guide', - items: ['Contributing/Introduction','Contributing/Onboarding','Contributing/Code','Contributing/Coding-Style','Contributing/Git-hook','Contributing/PRs','Contributing/Issues','Contributing/RFCs','Contributing/Docs','Contributing/Outreach','Contributing/Lab'], + items: ['Contributing/Introduction','Contributing/Onboarding','Contributing/Code','Contributing/Coding-Style','Contributing/Git-hook','Contributing/PRs','Contributing/Issues','Contributing/RFCs','Contributing/Docs','Contributing/Outreach','Contributing/Lab', 'Contributing/Release'], }, { type: 'category',