;ci: force use of and upgrade to shelltestrunner 1.11 #121
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # TRIGGER: Runs on any push to binaries-linux-x64 or binaries branches. | |
| # ACTION: Builds, unit-tests and saves linux x64 static binaries with cabal and the ghc version below, | |
| # in an Alpine linux container which provides the statically-linkable musl. | |
| name: binaries-linux-x64 | |
| on: | |
| push: | |
| branches: [ binaries-linux-x64, binaries ] | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| runs-on: ubuntu-24.04 | |
| # arch: x64 | |
| # image: https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md | |
| container: alpine:latest | |
| env: | |
| stack: stack | |
| ghcid: 9.12.2 | |
| steps: | |
| - name: Check out | |
| uses: actions/checkout@v4 | |
| # have to fetch everything for git describe for --version | |
| with: | |
| fetch-depth: 0 | |
| - name: Install general tools with system package manager | |
| run: | | |
| apk --no-cache add gmp-dev gmp-static libffi-dev zlib-dev zlib-static ncurses-dev ncurses-static binutils-gold curl gcc g++ git make xz tar perl | |
| # CACHES | |
| - name: Cache - ~/.ghcup | |
| id: ghcup | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.ghcup | |
| key: ${{ runner.os }}-x64-ghcup-${{ env.ghcid }}-${{ hashFiles('**.yaml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-x64-ghcup-${{ env.ghcid }} | |
| - name: Cache - ~/.cabal | |
| id: cabal | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cabal | |
| key: ${{ runner.os }}-x64-cabal-${{ env.ghcid }}-${{ hashFiles('**.yaml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-x64-cabal-${{ env.ghcid }} | |
| # actions: | |
| # - name: Check tool versions | |
| # run: | | |
| # which ghcup; ghcup --version | |
| # which stack; stack --version | |
| # which cabal; cabal --version | |
| # which ghc; ghc --version | |
| # no preinstalled tools because using alpine container | |
| # - name: Install haskell ghcup | |
| # uses: haskell/ghcup-setup@v1 | |
| - name: Add .ghcup/bin to PATH | |
| run: | | |
| echo "$HOME/.ghcup/bin/" >> $GITHUB_PATH | |
| - name: Install haskell tools if needed | |
| run: | | |
| if [[ ! -x ~/.ghcup/bin/ghcup ]]; then mkdir -p ~/.ghcup/bin && curl https://downloads.haskell.org/~ghcup/x86_64-linux-ghcup > ~/.ghcup/bin/ghcup && chmod +x ~/.ghcup/bin/ghcup; fi; printf "ghcup: "; ghcup --version | |
| if [[ ! -x ~/.ghcup/bin/ghc-9.12.2 ]]; then ghcup install ghc 9.12.2 && ghcup set ghc 9.12.2; fi; printf "ghc: "; ghc --version | |
| if [[ ! -x ~/.ghcup/bin/cabal ]]; then ghcup install cabal 3.14.2.0 && ghcup set cabal 3.14.2.0; fi; printf "cabal: "; cabal --version | |
| - name: Update cabal package index | |
| run: | | |
| cabal update | |
| - name: Build with cabal | |
| run: | | |
| cabal build --enable-executable-static --ghc-options=-Werror hledger || (echo "ERROR: building hledger failed"; false) | |
| cabal build --enable-executable-static --ghc-options=-Werror hledger-ui --constraint 'brick==2.10' || (echo "ERROR: building hledger-ui failed"; false) | |
| # temporary constraint to avoid https://github.com/jtdaugherty/brick/issues/539 | |
| cabal build --enable-executable-static --ghc-options=-Werror hledger-web || (echo "ERROR: building hledger-web failed"; false) | |
| - name: Gather binaries | |
| run: | | |
| mkdir tmp | |
| cp dist-newstyle/build/x86_64-linux/ghc-*/hledger-*/x/hledger/build/hledger/hledger tmp | |
| cp dist-newstyle/build/x86_64-linux/ghc-*/hledger-ui-*/x/hledger-ui/build/hledger-ui/hledger-ui tmp | |
| cp dist-newstyle/build/x86_64-linux/ghc-*/hledger-web-*/x/hledger-web/build/hledger-web/hledger-web tmp | |
| cp hledger/embeddedfiles/*.1 tmp | |
| cp hledger/embeddedfiles/*.info tmp | |
| cp hledger/shell-completion/hledger-completion.bash tmp | |
| strip tmp/hledger | |
| strip tmp/hledger-ui | |
| strip tmp/hledger-web | |
| cd tmp | |
| tar cvf hledger-linux-x64.tar hledger hledger-ui hledger-web *.1 *.info hledger-completion.bash | |
| ldd hledger || true | |
| ldd hledger-ui || true | |
| ldd hledger-web || true | |
| # file hledger | |
| # file hledger-ui | |
| # file hledger-web | |
| ./hledger --version | |
| ./hledger-ui --version | |
| ./hledger-web --version | |
| # upload-artifact loses execute permissions, so we tar the binaries to preserve them. | |
| # github UI always zips artifacts when they are downloaded, so we don't bother compressing the tar. | |
| # https://github.com/actions/upload-artifact?tab=readme-ov-file#limitations | |
| # In release workflows, we repack these using the platform's native compression scheme. | |
| - name: Upload binaries | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: hledger-linux-x64 | |
| path: tmp/hledger-linux-x64.tar |