diff --git a/docs/Contributing/Release.md b/docs/Contributing/Release.md new file mode 100644 index 000000000..a13064f90 --- /dev/null +++ b/docs/Contributing/Release.md @@ -0,0 +1,167 @@ +# 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.): +- Set new version + ```bash + export NEW_VERSION="" + ``` +- Ensure all approved PRs are merged +- Get latest updates and checkout branch + ```bash + git fetch --all + git checkout origin/main + git checkout -b release/v${NEW_VERSION} + ``` +- Update dependencies + ```bash + cargo update + ``` +- Determine if crate builds and if it works + ```bash + cargo clean + cargo test + ``` +- Determine expected version by reviewing output of `git log` +- Update and bump version in `Cargo.toml` +- Run `cargo test` again +- 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 v${NEW_VERSION} + ``` +- Cargo publish + ```bash + cargo publish + ``` + +### The Enarx release itself +- Set new version + ```bash + export NEW_VERSION="" + ``` +- Get latest updates and checkout branch + ```bash + git fetch --all + git checkout origin/main + git checkout -b release/v${NEW_VERSION} + ``` +- 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 enarx + ``` +- _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 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 v${NEW_VERSION} + ``` +- 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 + ``` +- 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 911784de6..f2e6e8347 100644 --- a/sidebars.js +++ b/sidebars.js @@ -31,7 +31,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',