|
| 1 | +# Directions for updating GAP.jl |
| 2 | + |
| 3 | +`GAP.jl` depends on the GAP kernel, the GAP library, |
| 4 | +and some glue code in the `JuliaInterface` GAP package, |
| 5 | +which is located in the `pkg/JuliaInterface/` directory. |
| 6 | +Additionally, there are various GAP packages that either |
| 7 | +depend on a GAP kernel extension, or some binary that |
| 8 | +is not part of GAP. |
| 9 | + |
| 10 | +Compiled versions of each are distributed to users |
| 11 | +as binary artifacts via the Julia "JLL" packages `GAP_jll`, |
| 12 | +`GAP_lib_jll`, `GAP_pkg_juliainterface_jll`, and |
| 13 | +various `GAP_pkg_*_jll` packages (where `*` stands for |
| 14 | +the name of the GAP package written in all lowercase). |
| 15 | + |
| 16 | +The build recipes for these JLL packages can be found here: |
| 17 | + |
| 18 | +- <https://github.com/JuliaPackaging/Yggdrasil/blob/master/G/GAP/build_tarballs.jl> |
| 19 | +- <https://github.com/JuliaPackaging/Yggdrasil/blob/master/G/GAP_lib/build_tarballs.jl> |
| 20 | +- <https://github.com/JuliaPackaging/Yggdrasil/blob/master/G/GAP_pkg/GAP_pkg_juliainterface/build_tarballs.jl> |
| 21 | +- <https://github.com/JuliaPackaging/Yggdrasil/tree/master/G/GAP_pkg> |
| 22 | + |
| 23 | +## Updating the glue code in `juliainterface` |
| 24 | + |
| 25 | +Suppose just the code in `juliainterface` was updated, without any changes to GAP itself. |
| 26 | +Then `GAP_pkg_juliainterface_jll` needs to be rebuilt before the next GAP.jl release. |
| 27 | +One can detect that such a rebuild is necessary when the CI job `treehash` in the GAP.jl |
| 28 | +repository fails in a PR. |
| 29 | + |
| 30 | +1. Merge that PR. |
| 31 | + |
| 32 | +2. After the changes are merged (and before the next `GAP.jl` release), update |
| 33 | + the `GAP_pkg_juliainterface` build recipe with a new version number and using the |
| 34 | + latest commit SHA for the `master` branch of `GAP.jl`. |
| 35 | + > ex: <https://github.com/JuliaPackaging/Yggdrasil/pull/11582> |
| 36 | +
|
| 37 | +3. Wait for this to be merged into Yggdrasil, and then wait for the registry |
| 38 | + to pick up the new version of `GAP_pkg_juliainterface_jll`. |
| 39 | + > ex: <https://github.com/JuliaRegistries/General/pull/134045> |
| 40 | +
|
| 41 | +4. Bump the dependence in `GAP.jl` to whatever version number was used in Step 2. |
| 42 | + In this PR, the `treehash` CI job should succeed. |
| 43 | + > ex: <https://github.com/oscar-system/GAP.jl/pull/1200> |
| 44 | +
|
| 45 | +5. (Optional) Release a new `GAP.jl`. This is done by pinging JuliaRegistrator in the comments of a commit. |
| 46 | + > ex: <https://github.com/oscar-system/GAP.jl/commit/21d5dd6b4ff8457649a922f0d5ba4a4414502f27#commitcomment-161267536> |
| 47 | +
|
| 48 | + |
| 49 | +## Build against a new `libjulia` version |
| 50 | + |
| 51 | +This needs to be done regularly, or as soon as some weird crashes start |
| 52 | +happening on a new julia release or on julia nightly. |
| 53 | + |
| 54 | +1. Wait for someone to update `libjulia_jll` to a new version. |
| 55 | + |
| 56 | +2. Update the GAP build recipe by bumping the patch part of the version, |
| 57 | + and changing the `libjulia_jll` version number to the new one. |
| 58 | + > ex: <https://github.com/JuliaPackaging/Yggdrasil/pull/11335> |
| 59 | +
|
| 60 | +3. Wait for the Yggdrasil merge, and wait for the registry. |
| 61 | + |
| 62 | +4. Update the `GAP_pkg_juliainterface` build recipe with the version number of the |
| 63 | + `GAP_jll` from the previous step, bump the patch part of `offset`, |
| 64 | + and change the `libjulia_jll` version number to the new one. |
| 65 | + > ex: <https://github.com/JuliaPackaging/Yggdrasil/pull/11336> |
| 66 | +
|
| 67 | +5. Wait for the Yggdrasil merge, and wait for the registry. |
| 68 | + |
| 69 | +4. Bump the dependence in `GAP.jl` to whatever version numbers were released in Steps 3 and 5. |
| 70 | + |
| 71 | + |
| 72 | +## Updating GAP |
| 73 | + |
| 74 | +After a new GAP version is released, the following steps are necessary to update |
| 75 | +all of the JLL packages that depend on GAP. |
| 76 | + |
| 77 | +1. Update the GAP build recipe with the new `upstream_version` and SHA256 of the release tarball |
| 78 | + > ex: <https://github.com/JuliaPackaging/Yggdrasil/pull/9937> |
| 79 | +
|
| 80 | + In this specific commit, there was also an update to `Readline_jll` and some build flags, |
| 81 | + but that should not be needed in most cases. |
| 82 | + |
| 83 | +2. Wait for the Yggdrasil merge, and wait for the registry. |
| 84 | + > ex: <https://github.com/JuliaRegistries/General/pull/120909> |
| 85 | +
|
| 86 | +3. Update the GAP_lib build recipe with the new `upstream_version` and SHA256 of the release tarball |
| 87 | + > ex: <https://github.com/JuliaPackaging/Yggdrasil/pull/9938> |
| 88 | +
|
| 89 | +4. Wait for the Yggdrasil merge, and wait for the registry. |
| 90 | + > ex: <https://github.com/JuliaRegistries/General/pull/120893> |
| 91 | +
|
| 92 | +TODOs: |
| 93 | +- update `G/GAP_pkg/update.jl` (in Yggdrasil): `upstream_version`, `gap_version`, `gap_lib_version`, juliainterface `upstream_version` |
| 94 | +- run `G/GAP_pkg/update.jl` (in Yggdrasil) and push the result in multiple small PRs which each touch 3-5 folders, wait for all of them to be merged and released to the registry |
| 95 | +- run `etc/update_artifact.jl` (in GAP.jl) |
| 96 | +- update compat bounds of all JLLs |
| 97 | +- (optionally) release GAP.jl |
0 commit comments