diff --git a/.github/workflows/binaries-linux-arm64.yml b/.github/workflows/binaries-linux-arm64.yml new file mode 100644 index 000000000..b4697c000 --- /dev/null +++ b/.github/workflows/binaries-linux-arm64.yml @@ -0,0 +1,139 @@ +# TRIGGER: Runs on any push to binaries-linux-arm64 or binaries branches. +# ACTION: Builds, unit-tests and saves linux arm64 static binaries with cabal and the ghc version below and Alpine linux, +# which provides the statically-linkable musl. + +name: binaries-linux-arm64 +on: + push: + branches: [ binaries-linux-arm64, binaries ] + workflow_dispatch: +jobs: + build: + runs-on: ubuntu-24.04-arm + # container: arm64v8/alpine:3.18 + # work around janky arm/alpine support + # https://github.com/actions/runner/issues/801#issuecomment-2394425757 + container: + image: arm64v8/alpine:3.18 + volumes: + - /:/host # Jailbreak! + + steps: + + - name: Patch native Alpine NodeJS into Runner environment + if: runner.os == 'Linux' + run: | + apk add nodejs + sed -i "s:ID=alpine:ID=NotpineForGHA:" /etc/os-release + cd /host/home/runner/runners/*/externals/ + rm -rf node20/* + mkdir node20/bin + ln -s /usr/bin/node node20/bin/node + shell: sh # No bash in Alpine by default + # doesn't work. Other possible workarounds: + # https://github.com/userdocs/test/actions/runs/12828579208/workflow + # https://github.com/foxcpp/maddy/pull/758/files + + - name: Check out + uses: actions/checkout@v4 + # have to fetch everything for git describe for --version + with: + fetch-depth: 0 + + # things to be cached/restored: + + - name: process cache of ghcup-installed tools + id: ghcup + uses: actions/cache@v4 + with: + path: ~/.ghcup + key: ${{ runner.os }}-ghcup-${{ hashFiles('**.yaml') }} + restore-keys: | + ${{ runner.os }}-ghcup + + - name: process cache of cabal-installed libs + id: cabal + uses: actions/cache@v4 + with: + path: ~/.cabal + key: ${{ runner.os }}-cabal-${{ hashFiles('**.yaml') }} + restore-keys: | + ${{ runner.os }}-cabal + + # actions: + + - name: Install general tools with system package manager + run: | + apk --no-cache add binutils-gold curl gcc g++ git tar gmp-dev libffi-dev ncurses-dev ncurses-static zlib-dev zlib-static + + - name: Add .ghcup/bin to PATH + run: | + echo "$HOME/.ghcup/bin/" >> $GITHUB_PATH + + - name: Install haskell ghcup if needed + uses: haskell/ghcup-setup@v1 + # with: + # config: | + # arch: "A_64" + # platform: { "contents": "Alpine", "tag": "Linux" } + # version: "3.18" + + - name: Install haskell tools with ghcup if needed + run: | + # Try hard to persuade ghcup to install an aarch64 binary + #ghcup config set platform-override '{ "arch": "A_64", "platform": { "contents": "Alpine", "tag": "Linux" }, "version": "3.18" }' + # cat >~/.ghcup/config.yaml <