Skip to content

Self-hosted runners

GitHub Actions is used to do CI on Stack. The linux-arm64 job of the integration-tests.yml workflow runs on a self-hosted runner for Linux and ARM64.

The current basic setup is:

  • FP Complete has an Oracle Cloud account that provides a free tier that includes a really powerful ARM64 machine;
  • within Oracle Cloud, FP Complete are running an Ubuntu/ARM64 instance; and
  • on that instance, FP Complete are running the GitHub Runner software.

The runner name is stack-github-action3 and the machine name is stack-github-action3.

Occasionally Oracle will turn off the machine because:

  • Oracle thinks it is not being used (because of the free tier); and/or
  • other things, like disk space filling up.

Managing the stack-github-action3 runner

With the appropriate authority installed on the server, the runner can be managed remotely using SSH, with command ssh ubuntu@arm-runner.stackage.org.

The available disk space can be queried with command df -h; the relevant entry is for filesystem /dev/sda1.

If the available space is low, that may be due to unncessary GHC versions installed in Stack's programs directory.

The ghc-arm-5 runner

From 9 February 2024, the Haskell Foundation sought to provide an alternative runner named ghc-arm-5 but that was based on NixOS and proved to be incompatible.

Alternatives to the self-hosted runners

One alternative to the self-hosted runners is to build statically-linked Stack executables for Linux/AArch64 on macOS/AArch64. This can be done thanks to the multi-architecture Docker images built and published by Olivier Benz, at https://gitlab.com/benz0li/ghc-musl.

GitHub provides a GitHub-hosted macOS/AArch64 runner (macOS-14). Unfortunately, that is macOS/M1 and the M1 machine architecture does not support nested virtualisation. This rules out using Docker, as the runner is itself a virtual machine.

However, this solution can be applied locally and the build outputs for the Linux/AArch64 platform added manually to the result of the GitHub workflow.

The experimental Haskell script etc/scripts/release-linux-aarch64.hs is intended to facilitate the building of statically-linked Stack executables for Linux/AArch64 on macOS/AArch64.