CIP-0129 support #521
This file contains 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
name: Haskell CI using Cabal | |
on: | |
push: | |
branches: [ "master" ] | |
pull_request: | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
ghc: ["8.10.7", "9.6.5"] | |
# os: [ubuntu-latest, macos-latest, windows-latest] | |
os: [ubuntu-latest, windows-latest] | |
env: | |
# we need the LD_LIBRARY_PATH env var here because we ended up installing libsecp256k1 into /usr/local, | |
# pkg-config, *does* return the proper location, but the library does not appear to be properly referenced. | |
# FIXME: this is arguably a bug, and pkg-config should return the right values! | |
LD_LIBRARY_PATH: ${{ (matrix.os != 'windows-latest' && '/usr/local/lib') || '' }} | |
steps: | |
- name: "WIN: Install System Dependencies via pacman (msys2)" | |
if: runner.os == 'Windows' | |
run: | | |
# ghcup should be installed on current GHA Windows runners. Let's use ghcup to run | |
# pacman, to install the necessary dependencies, ... | |
ghcup run --mingw-path -- pacman --noconfirm -S ` | |
mingw-w64-x86_64-pkg-config ` | |
mingw-w64-x86_64-pcre ` | |
mingw-w64-x86_64-libsodium ` | |
base-devel ` | |
autoconf-wrapper ` | |
autoconf ` | |
automake ` | |
libtool ` | |
make | |
# this seems to break something. It _must_ come after the pacman setup | |
# above. It appears as if PATHEXT is set _after_ ghcup install ghc/cabal, and | |
# as such we'd need pacman.exe instead. | |
- name: Setup Haskell | |
run: | | |
# Use GHCUP to manage ghc/cabal | |
ghcup install ghc --set ${{ matrix.ghc }} | |
ghcup install cabal --set 3.10.1.0 | |
ghc --version | |
cabal --version | |
- name: "WIN: fixup cabal config" | |
if: runner.os == 'Windows' | |
run: | | |
# make sure cabal knows about msys64, and mingw64 tools. Not clear why C:/cabal/config is empty | |
# and C:/cabal doesn't even exist. The ghcup bootstrap file should have create it in the image: | |
# See https://github.com/haskell/ghcup-hs/blob/787edc17af4907dbc51c85e25c490edd8d68b80b/scripts/bootstrap/bootstrap-haskell#L591 | |
# So we'll do it by hand here for now. | |
# | |
# We'll _not_ add extra-include-dirs, or extra-lib-dirs, and rely on what's shipped with GHC. | |
# https://github.com/msys2/MINGW-packages/issues/10837#issuecomment-1047105402 | |
# https://gitlab.haskell.org/ghc/ghc/-/issues/21111 | |
# if we _do_ want them, this would be the lines to add below | |
$ghcMingwDir = Join-Path -Path $(ghc --print-libdir) ` | |
-ChildPath ../mingw/x86_64-*-mingw32/lib/ ` | |
-Resolve | |
cabal user-config -a "extra-prog-path: C:/msys64/mingw64/bin, C:/msys64/usr/bin" ` | |
-a "extra-include-dirs: C:/msys64/mingw64/include" ` | |
-a ("extra-lib-dirs: {0}, C:/msys64/mingw64/lib" -f $ghcMingwDir) ` | |
-f init | |
- name: Set cache version | |
run: echo "CACHE_VERSION=grFfw7r" >> $GITHUB_ENV | |
- uses: actions/checkout@v2 | |
- name: "[PowerShell] Add build script path" | |
if: runner.os == 'Windows' | |
shell: pwsh | |
run: Add-Content $env:GITHUB_PATH "$(pwd)/.github/bin" | |
- name: "[Bash] Add build script path" | |
if: runner.os != 'Windows' | |
run: echo "$(pwd)/.github/bin" >> $GITHUB_PATH | |
- name: "LINUX: Install build environment (apt-get)" | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install libsodium23 libsodium-dev | |
sudo apt-get -y remove --purge software-properties-common | |
sudo apt-get -y autoremove | |
- name: "MAC: Install build environment (brew)" | |
if: runner.os == 'macOS' | |
run: | | |
brew install libsodium | |
brew install pcre | |
- name: Cabal update | |
run: cabal update | |
- name: "Setup cabal-store" | |
id: cabal-store | |
shell: bash | |
run: | | |
cabal_config_file="$(cabal help user-config | tail -n 1 | xargs)" | |
if [[ '${{ runner.os }}' != 'Windows' ]]; then | |
echo "cabal-store=$(dirname "$cabal_config_file")/store" | tee -a "$GITHUB_OUTPUT" | |
else | |
echo "cabal-store=C:\\cabal\\store" | tee -a "$GITHUB_OUTPUT" | |
fi | |
- name: "Check cabal-store" | |
shell: bash | |
run: echo '${{ steps.cabal-store.outputs.cabal-store }}' | |
- name: Configure build | |
shell: bash | |
run: | | |
if [ "${{github.event.inputs.tests}}" == "all" ]; then | |
echo "Reconfigure cabal projects to run tests for all dependencies" | |
sed -i 's|tests: False|tests: True|g' cabal.project | |
fi | |
cp ".github/workflows/cabal.project.local.ci.$(uname -s)" cabal.project.local | |
echo "# cabal.project.local" | |
cat cabal.project.local | |
- name: Record dependencies | |
id: record-deps | |
run: | | |
cabal build all --dry-run | |
cat dist-newstyle/cache/plan.json | jq -r '."install-plan"[].id' | sort | uniq > dependencies.txt | |
- name: "OUTPUT Record weeknum" | |
shell: bash | |
run: echo "weeknum=$(/usr/bin/date -u "+%W")" >> $GITHUB_OUTPUT | |
- name: Cache Cabal store | |
uses: actions/cache@v2 | |
with: | |
path: ${{ steps.cabal-store.outputs.cabal-store }} | |
key: cache-${{ env.CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('dependencies.txt') }} | |
restore-keys: | | |
cache-${{ env.CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('dependencies.txt') }} | |
cache-${{ env.CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }} | |
- uses: actions/cache@v2 | |
name: "Cache `dist-newstyle`" | |
with: | |
path: | | |
dist-newstyle | |
!dist-newstyle/**/.git | |
key: cache-dist-${{ env.CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}-${{ steps.record-deps.outputs.weeknum }} | |
restore-keys: cache-dist-${{ env.CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }} | |
- name: Install dependencies | |
run: cabal build all --only-dependencies | |
- name: Build | |
run: cabal build all | |
- name: Run unit tests | |
shell: bash | |
run: | | |
cabal test cardano-addresses | |
if [ "${{ runner.os }}" != "Windows" ] || [ "${{ matrix.ghc }}" != "9.6.5" ]; then | |
# This test is currently broken with GHC 9.6 on windows. | |
# This could be related to: | |
# * UTF8 encoding and the use of emoji's in the output. | |
# * unhandled PEi386 relocation type 14 (less likely). | |
cabal test cardano-addresses-cli | |
fi | |
- name: Upload Windows Artifact | |
uses: actions/upload-artifact@v3 | |
if: runner.os == 'Windows' | |
with: | |
name: ${{ matrix.os }}-exe | |
path: ${{ steps.cabal-store.outputs.cabal-store }} |