|
| 1 | +## UMF Release Steps |
| 2 | + |
| 3 | +This document contains all the steps required to make a new release of UMF. |
| 4 | + |
| 5 | +As a helper, we use in this guide these 2 variables: |
| 6 | +```bash |
| 7 | + set $VERSION = new full version (e.g., 0.1.0-rc1) # -rc1 included just as an example |
| 8 | + set $VER = new major+minor only version (e.g., 0.1) |
| 9 | +``` |
| 10 | + |
| 11 | +**Note:** |
| 12 | +> Before doing the final release, it's recommended to prepare a pre-release version - a "release candidate" |
| 13 | +> (or "rc" in short). This requires adding, e.g., `-rc1` to the VERSION string. When all tests and checks |
| 14 | +> end properly, you can follow up with the final release. If any fix is required, it should be included in |
| 15 | +> another rc version (e.g., `-rc2`). |
| 16 | +
|
| 17 | +At the moment, UMF releases are aligned with oneAPI releases. Once all changes planned for |
| 18 | +a release have been accepted, we follow the process (described in more detail below): |
| 19 | + |
| 20 | +1. Checkout the appropriate branch (`main` or "stable" `v$VER.x`). |
| 21 | +2. Make changes for the release. |
| 22 | +3. Create a new tag based on the latest commit - it takes the form |
| 23 | + `v<major>.<minor>.<patch>` (e.g., `v0.1.0`). |
| 24 | +4. Push the tag and branch to the upstream. |
| 25 | +5. Create a new GitHub release using the tag created in the previous step. |
| 26 | +6. Update downstream projects to utilize the release tag. If any issues arise |
| 27 | + from integration, apply any necessary hot fixes to `v$VER.x` |
| 28 | + branch and go back to step 2 - to create a patch release. This step can also be tested |
| 29 | + using `rc` version, potentially followed by another `rc` tag. |
| 30 | + |
| 31 | +## Make a release locally |
| 32 | + |
| 33 | +Do changes for a release: |
| 34 | +- Start of appropriate branch: |
| 35 | + - For patch release, do it from a stable branch: |
| 36 | + - `git checkout v$VER.x` (e.g., checkout `v0.1.x` if this is a `v0.1.1` patch) |
| 37 | + - If previously we decided not to create such branch, create it now, based on the appropriate minor or major tag |
| 38 | + - For major/minor release start from the `main` branch |
| 39 | +- Add an entry to ChangeLog, remember to change the day of the week in the release date |
| 40 | + - For major releases mention API and ABI compatibility with the previous release |
| 41 | +- Update project's version in a few places: |
| 42 | + - Set the new $VERSION in `project` function in the top-level `CMakeLists.txt` |
| 43 | + - `release` variable in `scripts/docs_config/conf.py` (for docs) |
| 44 | + - `UMF_VERSION` variable in `.github/workflows/basic.yml` (for installation test) |
| 45 | +- For major releases update ABI version in `.map` and `.def` files |
| 46 | + - These files are defined for all public libraries (`libumf` and `proxy_lib`, at the moment) |
| 47 | +- Commit these changes and tag the release: |
| 48 | + - `git commit -a -S -m "$VERSION release"` |
| 49 | + - `git tag -a -s -m "Version $VERSION" v$VERSION` |
| 50 | +- For major/minor release: |
| 51 | + - If stable branch for this release is required, create it: |
| 52 | + - `git checkout -b v$VER.x` |
| 53 | + - For some early versions (like `0.1.0`) we may omit creation of the branch |
| 54 | + |
| 55 | +## Publish changes |
| 56 | + |
| 57 | +As patch releases should be done on the stable branches, pushing tags and branches differ a little. |
| 58 | + |
| 59 | +For patch release: |
| 60 | + - `git push upstream HEAD:v$VER.x v$VERSION` - push branch and tag |
| 61 | + |
| 62 | +For major/minor release: |
| 63 | + - Push main: |
| 64 | + - `git push upstream HEAD:main v$VERSION` |
| 65 | + - And, if stable branch was also created, push it as well: |
| 66 | + - `git checkout v$VER.x` |
| 67 | + - `git push upstream HEAD:v$VER.x` |
| 68 | + |
| 69 | +## Announce release |
| 70 | + |
| 71 | +To make the release official: |
| 72 | +- Go to [GitHub's releases tab](https://github.com/oneapi-src/unified-memory-framework/releases/new): |
| 73 | + - Tag version: `v$VERSION`, release title: UMF $VERSION, description: copy entry from ChangeLog and format it with no tabs and no characters limit in line |
| 74 | + - Prior to version 1.0.0, check the *Set as a pre-release* tick box. |
| 75 | +- Announce the release, where needed |
| 76 | + |
| 77 | +## More information |
| 78 | + |
| 79 | +To assure the community that the release is a valid package from UMF maintainers, it's recommended to sign the release |
| 80 | +commit and the tag (`-S`/`-s` parameters in commands above). If you require to generate a GPG key follow |
| 81 | +[these steps](https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key). |
| 82 | +After that you'd also have to add this new key to your GitHub account - please do the steps in |
| 83 | +[this guide](https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key). |
0 commit comments