Skip to content

Commit

Permalink
Basic GitHub Actions CI setup
Browse files Browse the repository at this point in the history
Fixes #25.
  • Loading branch information
RyanGlScott committed Nov 20, 2023
1 parent 234ecda commit 592c139
Showing 1 changed file with 102 additions and 0 deletions.
102 changes: 102 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: libBF-hs

on:
push:
branches: [main]
pull_request:

env:
# The CACHE_VERSION can be updated to force the use of a new cache if
# the current cache contents become corrupted/invalid. This can
# sometimes happen when (for example) the OS version is changed but
# older .so files are cached, which can have various effects
# (e.g. cabal complains it can't find a valid version of the "happy"
# tool).
CACHE_VERSION: 1

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04]
ghc-version: ["9.2.8", "9.4.8", "9.6.3"]
cabal: [ '3.10.1.0' ]

include:
- os: macos-12
ghc-version: 9.2.8
cabal: 3.10.1.0
- os: windows-2022
ghc-version: 9.2.8
cabal: 3.10.1.0
steps:
- uses: actions/checkout@v2
with:
submodules: true

- uses: haskell/actions/setup@v1
id: setup-haskell
with:
ghc-version: ${{ matrix.ghc-version }}
cabal-version: ${{ matrix.cabal }}

- uses: msys2/setup-msys2@v2
name: Set up MSYS2 on Windows
if: runner.os == 'Windows'

- uses: actions/cache/restore@v3
name: Restore cabal store cache
with:
path: |
${{ steps.setup-haskell.outputs.cabal-store }}
dist-newstyle
key: ${{ env.CACHE_VERSION }}-cabal-${{ matrix.os }}-${{ matrix.ghc-version }}-${{ hashFiles(format('cabal.GHC-{0}.config', matrix.ghc-version)) }}-${{ github.sha }}
restore-keys: |
${{ env.CACHE_VERSION }}-cabal-${{ matrix.os }}-${{ matrix.ghc-version }}-${{ hashFiles(format('cabal.GHC-{0}.config', matrix.ghc-version)) }}-
- shell: bash
name: Update
run: cabal update

- shell: bash
name: Configure
run: cabal configure --enable-tests -j2 all

- shell: bash
name: Build library
run: cabal build

- shell: bash
name: Run tests
run: cabal test

# In https://github.com/GaloisInc/libBF-hs/issues/19, it was observed that
# Windows binaries that depended on libBF would dynamically link against
# MSYS2 DLLs, which would cause runtime errors if you didn't run the
# binaries in MSYS2 itself. As a smoke test, we print out the dynamic
# dependencies of a small libBF binary to see if anything crept in.
- shell: bash
name: Check dynamic dependencies (Linux)
if: runner.os == 'Linux'
run: ldd $(cabal list-bin test:libBF-tests)

- shell: bash
name: Check dynamic dependencies (Linux)
if: runner.os == 'macOS'
run: otool -L $(cabal list-bin test:libBF-tests)

- shell: msys2 {0}
name: Check dynamic dependencies (Windows)
if: runner.os == 'Windows'
run: ldd $(cabal list-bin test:libBF-tests)

- uses: actions/cache/save@v3
name: Save cabal store cache
if: always()
with:
path: |
${{ steps.setup-haskell.outputs.cabal-store }}
dist-newstyle
key: ${{ env.CACHE_VERSION }}-cabal-${{ matrix.os }}-${{ matrix.ghc-version }}-${{ hashFiles(format('cabal.GHC-{0}.config', matrix.ghc-version)) }}-${{ github.sha }}

0 comments on commit 592c139

Please sign in to comment.