Skip to content

CI

CI #5308

Workflow file for this run

name: CI
on:
push:
branches:
- main
- release
pull_request: { }
create: { tags: [v*] }
schedule:
# Additionally run once per week (At 00:00 on Sunday) to avoid loosing cache
# (GH deletes it after 7 days of not using it).
- cron: '0 0 * * 0'
env:
WASP_TELEMETRY_DISABLE: 1
defaults:
run:
shell: bash
jobs:
cancel:
name: Cancel redundant actions already in progress
runs-on: ubuntu-latest
steps:
- name: Cancel actions in progress of same workflow and same branch
uses: styfle/[email protected]
with:
access_token: ${{ github.token }}
build:
name: Build Wasp
runs-on: ${{ matrix.os }}
strategy:
matrix:
ghc:
- "8.10.7"
cabal:
- "3.6.2.0"
os:
- ubuntu-latest
- macos-latest
- windows-latest
steps:
- name: Configure git
working-directory: ~
# For waspc parser tests, we need to make sure git doesn't convert line
# endings to CRLF during checkout on Windows because that would cause
# the test cases to fail.
run: |
git config --global core.autocrlf input
git config --global core.eol lf
- name: Checkout the repo
uses: actions/checkout@v2
- name: Set up Haskell
id: setup-haskell-cabal
uses: haskell/actions/setup@v1
with:
ghc-version: ${{ matrix.ghc }}
cabal-version: ${{ matrix.cabal }}
- name: Verify Haskell setup
run: |
ghc --version
cabal --version
- name: Set up Node
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Cache
uses: actions/cache@v2
with:
path: ${{ steps.setup-haskell-cabal.outputs.cabal-store }}
# TODO: Right now, actions/cache updates cache only if cache was not fetched.
# This is not ideal for us, because we would ideally update cache even if it
# was fetched, because we want to cache any newly installed packages.
# This was working normally on Travis and Appveyor.
# There is an issue for this, and for now we are using proposed "fix" from it,
# https://github.com/actions/cache/issues/342#issuecomment-673371329,
# which mitigates the problem by creating new cache for each job and then using
# the feature of restore-keys which makes sure that next cache picked is the
# latest one. However, this keeps creating new cache each time which is not
# ideal because caches keep getting evicted, so for example if Win job
# fails multiple times while others don't, its cache will likely get evicted,
# making it even slower to test and fix (uffff).
# When they fix this, we should remove ${{ github.run_id }} from the end of the key.
key: wasp-build-${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('waspc/waspc.cabal') }}-${{ hashFiles('waspls/waspls.cabal') }}-${{ hashFiles('cabal.project') }}-${{ github.run_id }}
restore-keys: wasp-build-${{ runner.os }}-${{ matrix.ghc }}-
- name: "Check Haskell code formatting"
if: matrix.os == 'ubuntu-latest'
uses: mrkkrp/ormolu-action@v5 # ormolu 4.0.0.
- name: "[waspc] Build external dependencies"
working-directory: waspc
run: cabal build --enable-tests --enable-benchmarks --only-dependencies
- name: "[waspc] Build our code"
working-directory: waspc
run: cabal build all
- name: "[waspc] Run tests"
working-directory: waspc
run: cabal test
- name: "[waspls] Build external dependencies"
working-directory: waspls
run: cabal build --enable-tests --enable-benchmarks --only-dependencies
- name: "[waspls] Build our code"
working-directory: waspls
run: cabal build all
- name: "[waspls] Run tests"
working-directory: waspls
run: cabal test
- name: Create binary packages (Unix)
if: startsWith(github.ref, 'refs/tags/v') && (matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest')
run: |
OS_NAME=`case "${{ runner.os }}" in Linux) echo "linux";; macOS) echo "macos";; *) exit 1;; esac`
mkdir artifacts
./waspc/tools/make_binary_package.sh "artifacts/wasp-$OS_NAME-x86_64.tar.gz"
./waspls/tools/make_binary_package.sh "artifacts/waspls-$OS_NAME-x86_64.tar.gz"
- name: Create Github release
uses: ncipollo/release-action@v1
if: startsWith(github.ref, 'refs/tags/v') && (matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest')
with:
draft: true
allowUpdates: true
artifacts: "waspc/artifacts/*"
artifactErrorsFailBuild: true
replacesArtifacts: true
token: ${{ secrets.GITHUB_TOKEN }}