CI #232
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: CI | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
schedule: | |
- cron: '0 0 * * *' | |
workflow_call: | |
jobs: | |
build_and_test: | |
name: build_and_test | |
runs-on: ubuntu-latest | |
services: | |
postgres: | |
image: postgres:13.1 | |
env: | |
POSTGRES_HOST_AUTH_METHOD: trust | |
POSTGRES_DB: persistent_mtl | |
ports: | |
- 5432:5432 | |
env: | |
TEST_POSTGRESQL: 1 | |
steps: | |
- | |
uses: actions/checkout@v3 | |
- | |
uses: actions/cache@v3 | |
with: | |
path: ~/.stack | |
key: ${{ runner.os }}-stack-cache-${{ hashFiles('stack.yaml', 'package.yaml') }} | |
- | |
run: stack test --coverage | |
- | |
name: Check that files are unmodified | |
run: git diff --exit-code | |
- | |
name: Check for any outdated packages | |
run: cabal outdated --exit-code | |
- | |
name: Generate coverage data | |
run: | | |
HPC_LCOV_VERSION=1.2.0 | |
curl -fsSL \ | |
"https://github.com/brandonchinn178/hpc-lcov/releases/download/v${HPC_LCOV_VERSION}/hpc-lcov-${HPC_LCOV_VERSION}-linux-x86_64" \ | |
-o /usr/local/bin/hpc-lcov | |
chmod +x /usr/local/bin/hpc-lcov | |
hpc-lcov | |
- | |
uses: codecov/codecov-action@v3 | |
with: | |
files: lcov.info | |
compat_test: | |
strategy: | |
matrix: | |
ghc_version: | |
- '9.8' | |
- '9.10' | |
# - '9.12' # persistent + http-api-data do not support 9.12 yet | |
persistent_version: | |
- '2.14' | |
include: | |
- ghc_version: '9.8.1' | |
persistent_version: '2.14' | |
oldest: true | |
name: compat_test (ghc-${{ matrix.ghc_version }}, persistent-${{ matrix.persistent_version }}) | |
runs-on: ubuntu-latest | |
steps: | |
- | |
uses: actions/checkout@v3 | |
- | |
id: setup | |
name: Set up GHC ${{ matrix.ghc_version }} | |
uses: haskell-actions/setup@v2 | |
with: | |
ghc-version: ${{ matrix.ghc_version }} | |
- | |
name: Configure the build | |
run: | |
cabal configure | |
--enable-test | |
--test-show-details=streaming | |
--constraint='persistent ^>= ${{ matrix.persistent_version }}' | |
--constraint='persistent >= 2.14.0.2' | |
- | |
if: ${{ matrix.oldest }} | |
name: Use oldest dependencies | |
run: | |
cabal configure | |
--enable-append --prefer-oldest | |
--constraint 'fast-logger > 3.1.2' | |
--constraint 'persistent-sqlite > 2.13.0.3' | |
--constraint 'silently >= 0.0.3' | |
--constraint 'string-conversions >= 0.4' | |
- | |
name: Get build plan | |
run: cabal build --dry-run | |
- | |
name: Get current month to clear cache | |
run: echo "CURR_MONTH=$(date +%B)" | tee -a "$GITHUB_ENV" | |
- | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.setup.outputs.cabal-store }} | |
key: ${{ runner.os }}-cabal-cache-${{ env.CURR_MONTH }}-${{ matrix.ghc_version }}-${{ hashFiles('**/plan.json') }} | |
restore-keys: | | |
${{ runner.os }}-cabal-cache-${{ env.CURR_MONTH }}-${{ matrix.ghc_version }}- | |
- | |
name: Build + Test | |
run: cabal test | |
lint: | |
runs-on: ubuntu-latest | |
env: | |
HLINT_VERSION: '3.5' | |
FOURMOLU_VERSION: '0.13.0.0' | |
steps: | |
- | |
uses: actions/checkout@v3 | |
- | |
name: Install hlint | |
run: | | |
HLINT_ARCHIVE="hlint-${HLINT_VERSION}-x86_64-linux.tar.gz" | |
curl -sSLO "https://github.com/ndmitchell/hlint/releases/download/v${HLINT_VERSION}/${HLINT_ARCHIVE}" | |
tar xzf "${HLINT_ARCHIVE}" -C /usr/local/bin/ --strip-components=1 "hlint-${HLINT_VERSION}/hlint" | |
- | |
name: Install fourmolu | |
run: | | |
curl -sSL \ | |
"https://github.com/fourmolu/fourmolu/releases/download/v${FOURMOLU_VERSION}/fourmolu-${FOURMOLU_VERSION}-linux-x86_64" \ | |
-o /usr/local/bin/fourmolu | |
chmod +x /usr/local/bin/fourmolu | |
- | |
run: pip install pre-commit | |
- | |
run: pre-commit run --all-files -v --show-diff-on-failure | |
env: | |
SKIP: no-commit-to-branch | |
check_sdist: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
uses: actions/checkout@v3 | |
- | |
uses: actions/cache@v3 | |
with: | |
path: ~/.stack | |
key: ${{ runner.os }}-check_sdist-${{ hashFiles('stack.yaml', 'package.yaml') }} | |
- | |
name: Strip unreleased section from CHANGELOG | |
run: sed -i -n '/^# Unreleased/d; /^#/,$p' CHANGELOG.md | |
- | |
name: Create sdist bundle | |
run: stack sdist --test-tarball --tar-dir . | |
- | |
uses: actions/upload-artifact@v4 | |
with: | |
name: persistent-mtl-sdist | |
path: persistent-mtl-*.tar.gz | |
check_codegen: | |
runs-on: ubuntu-latest | |
steps: | |
- | |
uses: actions/checkout@v3 | |
- | |
uses: actions/cache@v3 | |
with: | |
path: ~/.stack | |
key: ${{ runner.os }}-check_codegen-${{ hashFiles('stack.yaml') }} | |
- | |
run: scripts/generate/run.sh | |
- | |
run: git diff --exit-code *.hs |