-
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.
Merge pull request #238 from gelisam/issue-236/github-actions
GitHub Actions
- Loading branch information
Showing
2 changed files
with
142 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,142 @@ | ||
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: ${{ matrix.os }} | ||
strategy: | ||
matrix: | ||
include: | ||
# Check that the build passes with the recommended snapshot on every | ||
# platform. | ||
- name: stable (Linux) | ||
stack_yaml: "stack.yaml" | ||
os: ubuntu-latest | ||
- name: stable (MacOS) | ||
stack_yaml: "stack.yaml" | ||
os: macos-latest | ||
|
||
# Not currently running CI on Windows, see #239 | ||
#- name: stable (Windows) | ||
# 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 | ||
~/.local/bin | ||
.stack-work | ||
key: ${{ runner.os }}-stack-${{ hashFiles(matrix.stack_yaml) }}-2 | ||
|
||
- uses: haskell/actions/setup@v1 | ||
id: setup-haskell-stack | ||
name: Setup Stack | ||
with: | ||
enable-stack: true | ||
stack-setup-ghc: true | ||
stack-no-global: true | ||
|
||
# For some reason, installing happy from lts-8.0 fails unless some other | ||
# version of happy is already in the PATH. So let's install a version of | ||
# happy from an lts which does not have this problem. | ||
- name: Install happy | ||
if: matrix.stack_yaml == 'oldest-supported-lts.yaml' | ||
run: | | ||
stack --stack-yaml=stack.yaml install happy | ||
- name: Build with happy hack | ||
if: matrix.stack_yaml == 'oldest-supported-lts.yaml' | ||
run: | | ||
PATH="$HOME/.local/bin:$PATH" stack --stack-yaml=${{ matrix.stack_yaml }} build --test --bench --no-run-tests --no-run-benchmarks | ||
- name: Build | ||
if: matrix.stack_yaml == 'stack.yaml' | ||
run: | | ||
stack --stack-yaml=${{ matrix.stack_yaml }} build --test --bench --no-run-tests --no-run-benchmarks | ||
# For some reason, the HSinteger-gmp-1.0.2.0.o file which comes with ghc-8.4.4 is | ||
# corrupted, and builds fail unless it is deleted. Apparently it is not needed? | ||
- name: Fix HSinteger-gmp | ||
if: matrix.os == 'macos-latest' | ||
run: | | ||
rm -f ~/.stack/programs/x86_64-osx/ghc-*/lib/ghc-*/integer-gmp-*/HSinteger-gmp-*.o | ||
- 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: 8.4.4 | ||
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.