CI #12
This file contains hidden or 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: | |
| push: | |
| branches: [ "master", "release/**" ] | |
| pull_request: | |
| branches: [ "**" ] | |
| schedule: | |
| - cron: "0 5 * * 5" | |
| defaults: { run: { shell: bash } } | |
| # Cancel running workflows when a new workflow on the same PR or branch is started, | |
| # but put scheduled workflows into their own group | |
| concurrency: | |
| group: ${{ | |
| format('{0}-{1}{2}', | |
| github.workflow, | |
| github.event.pull_request.number || github.ref, | |
| github.event_name == 'schedule' && '-scheduled' || '')}} | |
| cancel-in-progress: true | |
| jobs: | |
| test-with-stack: | |
| name: Stack | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { os: Ubuntu-latest, resolver: lts-12, ghc: "8.4.4" } | |
| - { os: Ubuntu-latest, resolver: lts-14, ghc: "8.6.5" } | |
| - { os: Ubuntu-latest, resolver: lts-16, ghc: "8.8.4" } | |
| - { os: Ubuntu-latest, resolver: lts-18, ghc: "8.10.7" } | |
| - { os: Ubuntu-latest, resolver: lts-19, ghc: "9.0.2" } | |
| - { os: Ubuntu-latest, resolver: lts-20, ghc: "9.2.8" } | |
| - { os: Ubuntu-latest, resolver: lts-21, ghc: "9.4.8" } | |
| - { os: Ubuntu-latest, resolver: lts-22, ghc: "9.6.7" } | |
| - { os: Ubuntu-latest, resolver: lts-23, ghc: "9.8.4" } | |
| - { os: Ubuntu-latest, resolver: lts-24, ghc: "9.10.3" } | |
| - { os: Ubuntu-latest, resolver: nightly } | |
| - { os: Windows-latest, resolver: lts-12, ghc: "8.4.4" } | |
| - { os: Windows-latest, resolver: lts-14, ghc: "8.6.5" } | |
| - { os: Windows-latest, resolver: lts-16, ghc: "8.8.4" } | |
| - { os: Windows-latest, resolver: lts-18, ghc: "8.10.7" } | |
| - { os: Windows-latest, resolver: lts-19, ghc: "9.0.2" } | |
| - { os: Windows-latest, resolver: lts-20, ghc: "9.2.8" } | |
| - { os: Windows-latest, resolver: lts-21, ghc: "9.4.8" } | |
| - { os: Windows-latest, resolver: lts-22, ghc: "9.6.7" } | |
| - { os: Windows-latest, resolver: lts-23, ghc: "9.8.4" } | |
| - { os: Windows-latest, resolver: lts-24, ghc: "9.10.3" } | |
| - { os: Windows-latest, resolver: nightly } | |
| - { os: MacOS-13, resolver: lts-12, ghc: "8.4.4" } | |
| - { os: MacOS-13, resolver: lts-14, ghc: "8.6.5" } | |
| - { os: MacOS-13, resolver: lts-16, ghc: "8.8.4" } | |
| - { os: MacOS-13, resolver: lts-18, ghc: "8.10.7" } | |
| - { os: MacOS-13, resolver: lts-19, ghc: "9.0.2" } | |
| - { os: MacOS-latest, resolver: lts-20, ghc: "9.2.8" } | |
| - { os: MacOS-latest, resolver: lts-21, ghc: "9.4.8" } | |
| - { os: MacOS-latest, resolver: lts-22, ghc: "9.6.7" } | |
| - { os: MacOS-latest, resolver: lts-23, ghc: "9.8.4" } | |
| - { os: MacOS-latest, resolver: lts-24, ghc: "9.10.3" } | |
| - { os: MacOS-latest, resolver: nightly } | |
| env: | |
| STACK_YAML: ${{ matrix.stack-yaml || matrix.ghc != '' && format('stack/ghc-{0}.yaml', matrix.ghc) || 'stack.yaml' }} | |
| STACK_ARGS: '--resolver ${{ matrix.resolver }} --system-ghc' | |
| cache-version: v0 # bump up this version to invalidate currently stored cache | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: haskell-actions/setup@v2 | |
| id: setup-haskell-cabal | |
| name: Setup Haskell | |
| with: | |
| ghc-version: ${{ matrix.ghc }} | |
| enable-stack: true | |
| stack-version: ${{ matrix.stack || 'latest' }} | |
| - name: Cache | |
| id: cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ${{ steps.setup-haskell-cabal.outputs.stack-root }} | |
| .stack-work | |
| key: ${{ runner.os }}-${{ matrix.resolver }}-${{ env.cache-version }} | |
| restore-keys: | | |
| ${{ runner.os }}-${{ matrix.resolver }}-${{ env.cache-version }} | |
| - name: Windows Cache | |
| id: cache-windows | |
| uses: actions/cache@v4 | |
| if: matrix.os == 'Windows-latest' | |
| with: | |
| path: | | |
| C:\\Users\\RUNNER~1\\AppData\\Local\\Programs\\stack | |
| key: ${{ runner.os }}-${{ matrix.resolver }}-programs-${{ env.cache-version }} | |
| restore-keys: | | |
| ${{ runner.os }}-${{ matrix.resolver }}-programs-${{ env.cache-version }} | |
| - name: Reset modtime | |
| run: | | |
| set -ex | |
| curl -sSL https://raw.githubusercontent.com/lehins/utils/master/haskell/git-modtime/git-modtime.hs -o git-modtime.hs | |
| runhaskell -- git-modtime.hs -f .stack-work-root/tree-contents.txt | |
| - name: Build | |
| run: | | |
| set -ex | |
| stack $STACK_ARGS test --no-run-tests --bench --no-run-benchmarks --haddock --no-haddock-deps | |
| - name: Test | |
| env: | |
| COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} | |
| run: | | |
| set -ex | |
| if [ "${{ matrix.os }}.${{ matrix.resolver }}" == "Ubuntu-latest.lts-21" ] && [ -n "${COVERALLS_REPO_TOKEN}" ]; then | |
| stack $STACK_ARGS test --coverage | |
| stack $STACK_ARGS hpc report --all | |
| curl -L https://github.com/rubik/stack-hpc-coveralls/releases/download/v0.0.7.0/shc-Linux-X64.tar.bz2 | tar xj shc | |
| ./shc --repo-token="$COVERALLS_REPO_TOKEN" --partial-coverage --fetch-coverage combined custom | |
| else | |
| stack $STACK_ARGS test | |
| fi | |
| test-with-cabal: | |
| name: Cabal | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "8.4.4" } | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "8.6.5" } | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "8.8.4" } | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "8.10.7" } | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "9.0.2" } | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "9.2.8" } | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "9.4.8" } | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "9.6.7" } | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "9.8.2" } | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "9.10.3" } | |
| - { cabal: "3.14", os: Ubuntu-latest, ghc: "9.12.2" } | |
| - { cabal: "3.14", os: Windows-latest, ghc: "9.0.2" } | |
| - { cabal: "3.14", os: Windows-latest, ghc: "9.2.8" } | |
| - { cabal: "3.14", os: Windows-latest, ghc: "9.4.8" } | |
| - { cabal: "3.14", os: Windows-latest, ghc: "9.6.7" } | |
| - { cabal: "3.14", os: Windows-latest, ghc: "9.8.2" } | |
| - { cabal: "3.14", os: Windows-latest, ghc: "9.10.3" } | |
| - { cabal: "3.14", os: Windows-latest, ghc: "9.12.2" } | |
| - { cabal: "3.14", os: MacOS-13, ghc: "9.0.2" } | |
| - { cabal: "3.14", os: MacOS-latest, ghc: "9.2.8" } | |
| - { cabal: "3.14", os: MacOS-latest, ghc: "9.4.8" } | |
| - { cabal: "3.14", os: MacOS-latest, ghc: "9.6.7" } | |
| - { cabal: "3.14", os: MacOS-latest, ghc: "9.8.2" } | |
| - { cabal: "3.14", os: MacOS-latest, ghc: "9.10.3" } | |
| - { cabal: "3.14", os: MacOS-latest, ghc: "9.12.2" } | |
| env: | |
| cache-version: v0 # bump up this version to invalidate currently stored cache | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: haskell-actions/setup@v2 | |
| id: setup-haskell-cabal | |
| name: Setup Haskell | |
| with: | |
| ghc-version: ${{ matrix.ghc }} | |
| cabal-version: ${{ matrix.cabal }} | |
| - name: Cache Cabal Store | |
| id: cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ${{ steps.setup-haskell-cabal.outputs.cabal-store }} | |
| dist-newstyle | |
| key: cabal-${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-version }} | |
| restore-keys: | | |
| cabal-${{ runner.os }}-${{ matrix.ghc }}-${{ env.cache-version }} | |
| - name: Configure | |
| run: | | |
| set -ex | |
| - name: Configure | |
| run: | | |
| set -ex | |
| cabal configure --haddock-all --enable-tests --enable-benchmarks | |
| - name: Build dependencies | |
| id: build-dependencies | |
| run: cabal build all --only-dependencies | |
| - name: Build | |
| id: build | |
| if: steps.build-dependencies.outcome == 'success' | |
| run: cabal build all | |
| - name: Test | |
| if: steps.build.outcome == 'success' | |
| run: | | |
| set -ex | |
| cabal test all | |
| - name: Install Doctest | |
| id: install-doctest | |
| if: steps.build.outcome == 'success' | |
| run: | | |
| set -ex | |
| cabal install doctest --ignore-project --overwrite-policy=always | |
| - name: Doctest | |
| if: steps.install-doctest.outcome == 'success' | |
| run: | | |
| set -ex | |
| ./scripts/doctest.sh | |
| - name: Check Cabal Files | |
| run: | | |
| set -ex | |
| cd Color | |
| cabal -vnormal check |