name: CI on: push: { branches: [master] } pull_request: { branches: [master] } create: { tags: [v*] } defaults: run: shell: bash working-directory: waspc 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/cancel-workflow-action@0.9.0 with: access_token: ${{ github.token }} build: name: Build Wasp runs-on: ${{ matrix.os }} strategy: matrix: os: - ubuntu-latest - macos-latest - windows-latest steps: - name: Checkout the repo uses: actions/checkout@v2 - name: Cache (Unix) uses: actions/cache@v2 if: runner.os == 'Linux' || runner.os == 'macOS' with: path: | ~/.ghc ~/.stack # 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 # and also remove restore-keys. key: haskell-${{ runner.os }}-${{ hashFiles('waspc/stack.yaml') }}-${{ github.run_id }} restore-keys: | haskell-${{ runner.os }}-${{ hashFiles('waspc/stack.yaml') }}- - name: Cache (Windows) uses: actions/cache@v2 if: runner.os == 'Windows' with: path: | C:\sr # TODO: Check TODO in caching for Unix above. key: haskell-${{ runner.os }}-${{ hashFiles('waspc/stack.yaml') }}-${{ github.run_id }} restore-keys: | haskell-${{ runner.os }}-${{ hashFiles('waspc/stack.yaml') }}- # TODO: Remove this step once https://github.com/actions/cache/issues/445 is resolved. - name: Fix MacOS problem with corrupt cached executable if: runner.os == 'macOS' run: rm -rf ~/.stack/setup-exe-cache - name: Set up Haskell (Stack) uses: haskell/actions/setup@v1 with: ghc-version: latest enable-stack: true stack-version: latest - name: Verify Haskell setup run: | stack --numeric-version stack path --stack-root ghc --version - name: Build dependencies run: stack --install-ghc test --only-dependencies - name: Build Wasp & Run tests run: stack test - name: Create binary package (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 ./tools/make_binary_package.sh "artifacts/wasp-$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 }}