Dm/ci testing #958
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
# This CI configuration is inspired by | |
# | |
# https://kodimensional.dev/github-actions | |
# | |
# It builds with a majority of the latest compiler releases from each major GHC | |
# revision on Linux and builds macOS and Windows against the latest GHC. | |
name: CI Matrix | |
# Trigger the workflow on push or pull request, but only for the master branch | |
on: | |
pull_request: | |
push: | |
branches: [master] | |
jobs: | |
docker: | |
runs-on: self-hosted | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
submodules: 'false' | |
- name: Setup subrepos | |
run: | | |
git config --global url."https://github.com/".insteadOf "[email protected]:" | |
git config --global url."https://".insteadOf "git://" | |
git submodule update --init | |
- name: Artifactory Login | |
uses: docker/login-action@v2 | |
with: | |
registry: artifactory.galois.com:5025 | |
username: ${{ secrets.ARTIFACTORY_USER }} | |
password: ${{ secrets.ARTIFACTORY_KEY }} | |
# Pulls the latest image to try to re-use some layers | |
- name: Pull Latest Docker image | |
run: echo "No latest image found" | |
- name: Build Docker Image | |
run: | | |
docker build . -t pate | |
- name: Test Docker Image | |
run: | | |
docker run --rm --entrypoint cabal pate run pate-test-aarch32 -- -p args-equal > out.log | |
cat out.log | |
grep -e "All .* tests passed" out.log || exit 1 | |
- name: Push Docker image | |
run: | | |
CI_COMMIT_SHORT_SHA=$(git rev-parse --short $GITHUB_SHA) | |
docker tag pate artifactory.galois.com:5025/pate/pate:$CI_COMMIT_SHORT_SHA | |
docker tag pate artifactory.galois.com:5025/pate/pate:${GITHUB_REF//\//\-} | |
docker push -a artifactory.galois.com:5025/pate/pate | |
build: | |
runs-on: ${{ matrix.os }} | |
env: | |
LANG: en_US.UTF-8 | |
LANGUAGE: en_US:en | |
LC_ALL: en_US.UTF-8 | |
TZ: America/Los_Angeles | |
CACHE_VERSION: 5 | |
strategy: | |
fail-fast: false | |
matrix: | |
arch: [ 'ppc' ] | |
ghc: ['9.6.2'] | |
cabal: ['3.10.2.0'] | |
os: [self-hosted] | |
name: GHC ${{ matrix.ghc }} on ${{ matrix.os }} pate-${{ matrix.arch }} | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
submodules: 'false' | |
- name: Setup subrepos and cabal.project | |
run: | | |
git config --global url."https://github.com/".insteadOf "[email protected]:" | |
git config --global url."https://".insteadOf "git://" | |
git submodule update --init | |
cp cabal.project.dist cabal.project | |
- name: Installing the freeze file | |
run: mv cabal.GHC-${{ matrix.ghc }}.freeze cabal.project.freeze | |
- uses: actions/cache/restore@v4 | |
name: Restore GHCup | |
id: cache-ghcup | |
with: | |
path: | | |
~/.ghcup | |
~/.cabal | |
key: ${{ env.CACHE_VERSION }}-pate-ghcup-${{ runner.os }}-${{ matrix.ghc }} | |
- uses: haskell-actions/setup@v2 | |
id: setup-haskell-cabal | |
name: Setup Haskell | |
with: | |
ghc-version: ${{ matrix.ghc }} | |
cabal-version: ${{ matrix.cabal }} | |
- uses: actions/cache/save@v4 | |
name: Save GHCup | |
with: | |
path: | | |
~/.ghcup | |
~/.cabal | |
key: ${{ steps.cache-ghcup.outputs.cache-primary-key }} | |
- name: System Dependencies | |
run: | | |
sudo apt update | |
sudo apt install -y software-properties-common apt-transport-https ca-certificates wget | |
sudo apt install -y bsdiff curl zlibc zlib1g zlib1g-dev git zip \ | |
libgmp3-dev build-essential libtinfo-dev autoconf automake gperf cmake locales \ | |
python3-distutils python-setuptools antlr3 libantlr3c-dev libtool libtool-bin libboost-all-dev python3-pip libfftw3-dev | |
sudo locale-gen en_US.UTF-8 | |
sudo pip3 install toml | |
- name: Checkout Challenge Problems | |
env: | |
GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }} | |
GITLAB_USER: ${{ env.GITLAB_USER }} | |
run: | | |
export CHALLENGE_DIR=${HOME}/programtargets | |
git clone --depth=1 https://${GITLAB_USER}:${GITLAB_TOKEN}@gitlab-ext.galois.com/pate/programtargets.git ${CHALLENGE_DIR} | |
cd tests | |
make extras | |
- uses: actions/cache/restore@v4 | |
name: Restore Cabal Cache | |
id: cache-cabal-pate | |
with: | |
path: ${{ steps.setup-haskell-cabal.outputs.cabal-store }} | |
key: ${{ env.CACHE_VERSION }}-pate-cabal-${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('cabal.project.freeze', 'cabal.project') }} | |
restore-keys: | | |
${{ env.CACHE_VERSION }}-pate-cabal-${{ runner.os }}-${{ matrix.ghc }}- | |
- uses: actions/cache/restore@v4 | |
name: Restore Build Cache | |
id: cache-build-pate | |
with: | |
path: dist-newstyle | |
key: ${{ env.CACHE_VERSION }}-pate-build-${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('cabal.project.freeze', 'cabal.project', '.gitmodules') }} | |
restore-keys: | | |
${{ env.CACHE_VERSION }}-pate-build-${{ runner.os }}-${{ matrix.ghc }}- | |
- name: Configure and build Pate dependencies | |
# installs parameterized-utils and then drops it from the project to resolve issue with bv-sized | |
run: | | |
cabal configure pkg:pate --write-ghc-environment-files=always --enable-tests -j --allow-newer=base --enable-documentation -f unsafe-operations | |
cabal install parameterized-utils --lib | |
cabal freeze | |
sed -i -e "/parameterized-utils/d" cabal.project | |
cabal build pkg:pate --only-dependencies | |
# Note that these keys still use the old hashes for cabal.project and cabal.project.freeze | |
- uses: actions/cache/save@v4 | |
name: Save Cabal Cache | |
with: | |
path: ${{ steps.setup-haskell-cabal.outputs.cabal-store }} | |
key: ${{ steps.cache-cabal-pate.outputs.cache-primary-key }} | |
- uses: actions/cache/save@v4 | |
name: Save Build Cache | |
with: | |
path: dist-newstyle | |
key: ${{ steps.cache-build-pate.outputs.cache-primary-key }} | |
- name: Build Pate | |
run: cabal build pkg:pate | |
- name: Install Solvers | |
run: .github/ci.sh install_system_deps | |
env: | |
Z3_VERSION: "4.8.8" | |
YICES_VERSION: "2.6.2" | |
CVC4_VERSION: "4.1.8" | |
- name: Test | |
if: runner.os == 'Linux' | |
run: | | |
cabal test pkg:pate --test-options="-t 2400s" | |
- name: Docs | |
run: cabal haddock pkg:pate |