用于测试 Haskell 包的 GitHub 操作?

oro*_*ome 5 haskell github-actions

最近,我被 Travis CI 吸引到我的 Julia 项目的 GitHub 操作,因为我发现的所有示例操作易于配置且开箱即用,并认为我会在我的Haskell 项目中尝试相同的操作。但是我发现的所有示例 Haskell Actions都没有功能,大多数都因安全性或gcc编译器标志错误而失败,即使对于在 Travis CI 中工作的完全相同的命令也是如此。

是否有运行Haskell GitHub Actions 的示例?我怀疑我只是没有在正确的地方寻找最新的工作示例。

oro*_*ome 3

最终,经过大量的尝试和错误,我最终得到了大致如下,效果完美:

name: Tests

on:
  pull_request:
  push:
    branches: [hackage, develop]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        ghc: ['8.8.3', '8.10.5']
        cabal: ['2.4.1.0', '3.0.0.0']
        os: [ubuntu-latest]
        resolver: [lts-3.22 , lts-17, lts-18, lts]
        exclude:
          # GHC 8.8+ only works with cabal v3+
          - ghc: 8.8.3
            cabal: 2.4.1.0
    name: ${{ matrix.resolver }} (${{ matrix.ghc }}/${{ matrix.cabal }})
    steps:

      - name: Check out
        uses: actions/checkout@v2

      - name: Setup Haskell
        uses: haskell/actions/setup@v1
        with:
          ghc-version: ${{ matrix.ghc }}
          cabal-version: ${{ matrix.cabal }}
          enable-stack: true

      - name: Versions
        run: |
          stack --version
          cabal --version
          ghc --version

      - name: Initalize stack for LTS
        run: |
          stack update
          stack init --resolver ${{ matrix.resolver }} --force

      - name: Build package dependencies
        run: |
          stack --resolver ${{ matrix.resolver }} build --no-run-tests --no-run-benchmarks --only-dependencies

      - name: Build package
        run: |
          stack --resolver ${{ matrix.resolver }} build --no-run-tests --no-run-benchmarks

      - name: Build testing dependencies
        run: |
          stack --resolver ${{ matrix.resolver }} build --no-run-tests --no-run-benchmarks --test --bench

      - name: Run tests
        run: |
          stack --resolver ${{ matrix.resolver }} build --test --no-run-benchmarks

      - name: Package list
        run: |
          stack --resolver ${{ matrix.resolver }} exec ghc-pkg list || true
Run Code Online (Sandbox Code Playgroud)

(尽管我不确定构建步骤的顺序是否符合我的意图,并且对缓存应该去哪里有一些疑问。)