-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #19 from runeksvendsen/add-ci
Build and test in GitHub CI
- Loading branch information
Showing
3 changed files
with
104 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
import (builtins.fetchTarball { | ||
url = "https://github.com/NixOS/nixpkgs/archive/4ecab3273592f27479a583fb6d975d4aba3486fe.tar.gz"; | ||
sha256 = "10wn0l08j9lgqcw8177nh2ljrnxdrpri7bp0g7nvrsn9rkawvlbf"; | ||
}) {} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
name: Build & test in nix-shell | ||
|
||
on: | ||
push: | ||
pull_request: | ||
|
||
jobs: | ||
build_test: | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
os: [ubuntu-22.04, ubuntu-20.04, macos-13, macos-14] | ||
ghc: [ghc865Binary, ghc884, ghc810] | ||
cc: [gcc8, gcc14, clang_12, clang_18] | ||
runs-on: ${{ matrix.os }} | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
|
||
- name: Install Nix | ||
uses: cachix/install-nix-action@v25 | ||
with: | ||
install_url: https://releases.nixos.org/nix/nix-2.20.5/install | ||
# NOTE: We avoid using arm64 builds of GHC (because they're mostly broken for early GHC versions) by specifying 'system = x86_64-darwin' for macOS runners | ||
extra_nix_config: | | ||
substituters = https://cache.nixos.org https://cache.iog.io | ||
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= | ||
system-features = benchmark big-parallel kvm nixos-test | ||
${{ startsWith(matrix.os, 'macos') && 'system = x86_64-darwin' || '' }} | ||
- name: Cache cabal files | ||
uses: actions/cache@v3 | ||
with: | ||
path: | | ||
~/.cabal/packages | ||
~/.cabal/store | ||
dist-newstyle | ||
key: ${{ runner.os }}-${{ matrix.os }}-${{ hashFiles('**/*.cabal', '**/cabal.project', '**/cabal.project.freeze') }}--${{ matrix.ghc }} | ||
restore-keys: ${{ runner.os }}-${{ matrix.os }}- | ||
|
||
# Make nix-shell use specific Bash version. | ||
# Cf. https://nixos.org/manual/nix/stable/command-ref/nix-shell#environment-variables. | ||
- name: Set shell Bash | ||
run: echo "NIX_BUILD_SHELL=$(nix-build -A bash .github/workflows/bash.nix)/bin/bash" >> $GITHUB_ENV | ||
|
||
- name: Test nix-shell # test that the Nix shell actually works | ||
run: nix-shell --argstr ghcVersion ${{ matrix.ghc }} --argstr ccVersion ${{ matrix.cc }} --run 'echo $PATH; ls -l $(which ghc); ls -l $(which cabal); ghc --version; cabal --version; type cabal' | ||
|
||
- name: Export GHC version env var | ||
run: echo "GHC_VERSION=$(nix-shell --argstr ghcVersion ${{ matrix.ghc }} --argstr ccVersion ${{ matrix.cc }} --run 'ghc --numeric-version')" >> $GITHUB_ENV | ||
|
||
- name: Run 'cabal update' | ||
run: nix-shell --argstr ghcVersion ${{ matrix.ghc }} --argstr ccVersion ${{ matrix.cc }} --run 'cabal update' | ||
|
||
- name: Build library | ||
run: nix-shell --argstr ghcVersion ${{ matrix.ghc }} --argstr ccVersion ${{ matrix.cc }} --run 'cabal build lib:packman' | ||
|
||
- name: Build tests | ||
run: nix-shell --argstr ghcVersion ${{ matrix.ghc }} --argstr ccVersion ${{ matrix.cc }} --run 'cabal build --enable-tests' | ||
|
||
- name: Run tests | ||
run: nix-shell --argstr ghcVersion ${{ matrix.ghc }} --argstr ccVersion ${{ matrix.cc }} --run 'cabal test --test-show-details direct' # "--test-show-details direct" makes cabal print test suite output to terminal | ||
|
||
# Run all tests again showing only the output of failed tests | ||
- name: Run failed tests | ||
if: failure() | ||
run: nix-shell --argstr ghcVersion ${{ matrix.ghc }} --argstr ccVersion ${{ matrix.cc }} --run 'cabal test --test-show-details failures' |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
{ ghcVersion ? "ghc90" | ||
, ccVersion ? "gcc9" | ||
} : | ||
let | ||
pkgs = | ||
import (builtins.fetchTarball { | ||
url = "https://github.com/NixOS/nixpkgs/archive/4ecab3273592f27479a583fb6d975d4aba3486fe.tar.gz"; | ||
sha256 = "10wn0l08j9lgqcw8177nh2ljrnxdrpri7bp0g7nvrsn9rkawvlbf"; | ||
}) {}; | ||
|
||
pkgs1809 = | ||
import (builtins.fetchTarball { | ||
url = "https://github.com/NixOS/nixpkgs/archive/925ff360bc33876fdb6ff967470e34ff375ce65e.tar.gz"; | ||
sha256 = "1qbmp6x01ika4kdc7bhqawasnpmhyl857ldz25nmq9fsmqm1vl2s"; | ||
}) {}; | ||
|
||
pkgs2405 = | ||
import (builtins.fetchTarball { | ||
url = "https://github.com/NixOS/nixpkgs/archive/31ac92f9628682b294026f0860e14587a09ffb4b.tar.gz"; | ||
sha256 = "0qbyywfgjljfb4izdngxvbyvbrkilmpsmmx2a9spbwir2bcmbi14"; | ||
}) {}; | ||
|
||
ghc = pkgs.haskell.compiler.${ghcVersion} or pkgs1809.haskell.compiler.${ghcVersion}; | ||
in | ||
pkgs.mkShell { | ||
nativeBuildInputs = [ | ||
ghc | ||
pkgs.cabal-install | ||
pkgs.git | ||
pkgs2405.${ccVersion} | ||
]; | ||
} | ||
|