# 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, # in an Alpine linux container which provides the statically-linkable musl. name: binaries-linux-arm64 on: push: branches: [ binaries-linux-arm64 ] workflow_dispatch: jobs: build: runs-on: ubuntu-24.04-arm # arch: arm64 # image: https://github.com/actions/partner-runner-images/blob/main/images/arm-ubuntu-24-image.md # container: arm64v8/alpine:3.18 container: # work around janky arm/alpine support, https://github.com/actions/runner/issues/801#issuecomment-2394425757 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: Cache - ghcup-installed tools id: ghcup uses: actions/cache@v4 with: path: ~/.ghcup key: ${{ runner.os }}-ghcup-${{ hashFiles('**.yaml') }} restore-keys: | ${{ runner.os }}-ghcup - name: Cache - 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 <