| 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 |