Skip to content

Dockerfile cleanups #1046

Dockerfile cleanups

Dockerfile cleanups #1046

Workflow file for this run

# 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: |
docker pull artifactory.galois.com:5025/pate/pate:${GITHUB_REF//\//\-} || \
docker pull artifactory.galois.com:5025/pate/pate:refs-heads-master || \
echo "No latest image found"
# Our self-hosted runners don't support buildx so we have to populate
# TARGETPLATFORM manually via build-arg to pass our check in the
# Dockerfile
- name: Build Docker Image
run: |
docker build --platform linux/amd64 --build-arg TARGETPLATFORM=linux/amd64 . \
--cache-from artifactory.galois.com:5025/pate/pate:${GITHUB_REF//\//\-} \
--cache-from artifactory.galois.com:5025/pate/pate:refs-heads-master \
-t pate
- name: Docker Integration Test
run: |
docker run --rm --entrypoint tests/integration/packet/packet.exp pate
- 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
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
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 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