Skip to content

Rewrite release CI #11078

@hasufell

Description

@hasufell

PR at #11072

Motivation

  1. have a reliable release CI that runs (mostly) on ephemeral, stateless runners
  2. have access to GitHubs CI infrastructure for faster and more reliable execution
  3. unify the CI so that we only need to maintain one place/flavor of CI
  4. improve bus factor and make contribution/adjustments to release CI easier
  5. 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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions