-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
119 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,119 @@ | ||
name: CI | ||
|
||
on: | ||
# Build every pull request, to check for regressions. | ||
pull_request: | ||
|
||
# Build when a PR is merged, to update the README's CI badge. | ||
push: | ||
branches: [main] | ||
|
||
# Build once a month, to detect missing upper bounds. | ||
schedule: | ||
- cron: '0 0 1 * *' | ||
|
||
jobs: | ||
stack: | ||
name: ${{ matrix.name }} | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
include: | ||
# Check that the build passes with the recommended snapshot on every | ||
# platform. | ||
- name: stable | ||
stack_yaml: "stack.yaml" | ||
os: ubuntu-latest | ||
- name: stable | ||
stack_yaml: "stack.yaml" | ||
os: macos-latest | ||
- name: stable | ||
stack_yaml: "stack.yaml" | ||
os: windows-latest | ||
|
||
# Check that the lower bounds are still correct by building with the | ||
# lowest-supported version of everything, including our dependencies. | ||
- name: oldest | ||
stack_yaml: "oldest-supported-lts.yaml" | ||
os: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v2 | ||
if: github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.ref == 'refs/heads/main' | ||
|
||
- uses: actions/cache@v2 | ||
name: Cache Stack Artifacts | ||
with: | ||
path: | | ||
~/.stack | ||
.stack-work | ||
key: ${{ runner.os }}-stack-${{ hashFiles(matrix.stack_yaml) }} | ||
|
||
- uses: haskell/actions/setup@v1 | ||
id: setup-haskell-stack | ||
name: Setup Stack | ||
with: | ||
enable-stack: true | ||
stack-setup-ghc: true | ||
stack-no-global: true | ||
ghc-version: ${{ matrix.ghc }} | ||
|
||
- name: Build | ||
run: | | ||
stack --stack-yaml=${{ matrix.stack_yaml }} build --test --bench --no-run-tests --no-run-benchmarks | ||
- name: Test | ||
run: | | ||
stack --stack-yaml=${{ matrix.stack_yaml }} test | ||
cabal: | ||
name: ${{ matrix.name }} | ||
runs-on: ${{ matrix.os }} | ||
strategy: | ||
matrix: | ||
include: | ||
# Check that our upper bounds are correct by building with the latest | ||
# version of everything. We use cabal because it uses the latest | ||
# versions of our dependencies allowed by our upper bounds. | ||
- name: newest | ||
ghc: latest | ||
os: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v2 | ||
if: github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.ref == 'refs/heads/main' | ||
|
||
- uses: haskell/actions/setup@v1 | ||
id: setup-haskell-cabal | ||
name: Setup Cabal | ||
with: | ||
ghc-version: ${{ matrix.ghc }} | ||
cabal-version: ${{ matrix.cabal }} | ||
|
||
# This freeze file is regenerated on every build, so we will always test | ||
# with the most recent version of our dependencies allowed by our upper | ||
# bounds. | ||
- name: Freeze | ||
run: | | ||
cabal configure --enable-tests --enable-benchmarks --test-show-details=direct | ||
cabal freeze | ||
cabal v1-sandbox init | ||
cabal v1-install happy | ||
# Only reuse the cached copy of our dependencies if our freeze file matches | ||
# the cache's copy. | ||
- uses: actions/cache@v2 | ||
name: Cache Cabal Artifacts | ||
with: | ||
path: | | ||
${{ steps.setup-haskell-cabal.outputs.cabal-store }} | ||
.cabal-sandbox | ||
key: ${{ runner.os }}-cabal-${{ hashFiles('cabal.project.freeze') }} | ||
|
||
- name: Build | ||
run: | | ||
cabal v1-install --enable-tests | ||
- name: Test | ||
run: | | ||
cabal v1-test |
File renamed without changes.