-
Notifications
You must be signed in to change notification settings - Fork 714
Open
Description
PR at #11072
Motivation
- have a reliable release CI that runs (mostly) on ephemeral, stateless runners
- have access to GitHubs CI infrastructure for faster and more reliable execution
- unify the CI so that we only need to maintain one place/flavor of CI
- improve bus factor and make contribution/adjustments to release CI easier
- reduce the gap between GHCup's and upstream's CI, possibly allowing to ship vanilla bindists in GHCup once again
Design goals
- run the integration test as part of the release (since
cabal-install
is the main binary and the build config diverges from the validate pipeline) - use a re-usable workflow, so that it can be triggered from other workflows (e.g. just to run build+integration test)
- support FreeBSD via a HF sponsored private runner (managed by me)
- avoid depending on custom docker images (we only do this for linux-i386 and linux-arm at the moment, because GitHub doesn't support node for those platforms, complicating the job description and setup a bit)
Supported platforms
The current platform build matrix is excessive and hard to maintain. It requires constant tracking of EOLed and new distro versions.
Instead, we propose to reduce the linux builds to only 2:
- one fully statically linked against musl
- one dynamically linked against the oldest glibc that's not EOL, but statically against other libraries (gmp, ncurses etc)... this works via pointing --extra-lib-dirs to a dir which includes only static library archives (cabal only seems to link against gmp and I have a working example binary)
Then all known glibc based distros can use the glibc one and alpine/unknown distros use the static musl one.
We end up with the following build environments:
Build env | Remark |
---|---|
x86_64-linux-rocky8 | glibc |
x86_64-linux-alpine3_22 | musl |
x86_64-freebsd14_2 | |
x86_64-darwin | |
x86_64-windows | |
aarch64-linux-rocky8 | glibc |
aarch64-linux-alpine3_22 | musl |
aarch64-darwin | |
i386-linux-deb11 | glibc |
i386-linux-alpine3_22 | musl |
chreekat