| Release process |
| =============== |
| |
| A release will be generated automatically for any version number tag |
| (of the form `v*`). Release notes will be extracted from the contents |
| of the relevant section in [`CHANGELOG.md`][changelog]. |
| |
| The reduced-feature Secure Boot binaries will be signed using the |
| [iPXE Secure Boot CA][ipxesbca] and may be booted on a system with |
| UEFI Secure Boot enabled using the [iPXE shim][ipxeshim]. |
| |
| Steps |
| ----- |
| |
| 1. Edit the top-level [`Makefile`][makefile] to select values for |
| `VERSION_MAJOR`, `VERSION_MINOR`, and `VERSION_PATCH`, and to set |
| `EXTRAVERSION` to an empty string. |
| |
| 2. Edit [`CHANGELOG.md`][changelog] to create a section and link for |
| the new release. |
| |
| 3. Commit these changes with a message such as: |
| ``` |
| [release] Release version 1.2.3 |
| ``` |
| |
| 4. Tag the commit with the correct version number, e.g.: |
| ``` |
| git tag v1.2.3 |
| ``` |
| |
| 5. Push the tag (and only the tag), e.g.: |
| ``` |
| git push origin v1.2.3 |
| ``` |
| This will automatically create a [draft release][releases] |
| including signed versions of the Secure Boot binaries. |
| |
| 6. If all checks on the tag succeeded, then push the master branch as |
| normal: |
| ``` |
| git push |
| ``` |
| |
| 7. Publish the [draft release][releases]. |
| |
| 8. Edit the top-level [`Makefile`][makefile] to set `EXTRAVERSION` |
| back to the value `+`. |
| |
| 9. Commit this change with a message such as: |
| ``` |
| [release] Update version number after release |
| ``` |
| |
| 10. Push the master branch as normal: |
| ``` |
| git push |
| ``` |
| |
| Caveats |
| ------- |
| |
| Note that pushing the tag will trigger parts of the [build |
| workflow][workflow] that are not usually run. In particular, the UEFI |
| Secure Boot signing stage will take place on a dedicated GitHub |
| Actions [runner][runners] that has access to a [hardware signing |
| token][ipxesbca]. There is a reasonable chance that parts of the |
| workflow may fail (e.g. due to an expired code signing certificate). |
| To recover from a failure, delete the tag (and the draft release, if |
| it has been created). |
| |
| The signing step can be tested in isolation by pushing to the `sbsign` |
| branch, without the need to run through the whole release process. |
| |
| [changelog]: CHANGELOG.md |
| [ipxesbca]: https://github.com/ipxe/secure-boot-ca |
| [ipxeshim]: https://github.com/ipxe/shim/releases/latest |
| [makefile]: src/Makefile |
| [releases]: https://github.com/ipxe/ipxe/releases |
| [runners]: https://github.com/ipxe/ipxe/settings/actions/runners |
| [workflow]: .github/workflows/build.yml |