GitHub Actions 设置

Note

文档中的食谱部分以最少说明聚焦于目标。

有关 GitHub Actions 的一般概念,另请参阅 GitHub Actions documentation

目标

我想在 GitHub Actions 上构建并测试我的项目。

基本设置

为 GitHub Actions 配置构建主要是设置 .github/workflows/ci.yml。以下是使用 setup-java 的最小 CI 工作流示例:

name: CI
on:
  pull_request:
  push:
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v6
    - name: Setup JDK
      uses: actions/setup-java@v5
      with:
        distribution: temurin
        java-version: 17
        cache: sbt
    - name: Setup sbt
      uses: sbt/setup-sbt@v1
    - name: Build and Test
      run: sbt -v test

选择退出磁盘缓存

默认情况下,setup-sbt 会在 sbt 2.x 上启用磁盘缓存。可按以下方式选择退出:

- uses: sbt/setup-sbt@v1
  with:
    disk-cache: false

构建矩阵

以下是使用构建矩阵的示例:

name: CI
on:
  pull_request:
  push:
jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-latest
            java: 17
            distribution: temurin
            jobtype: 1
          - os: ubuntu-latest
            java: 17
            distribution: temurin
            jobtype: 2
          - os: windows-latest
            java: 17
            distribution: temurin
            jobtype: 2
          - os: ubuntu-latest
            java: 17
            distribution: temurin
            jobtype: 3
    runs-on: ${{ matrix.os }}}
    env:
      JAVA_OPTS: -Xms2048M -Xmx2048M -Xss6M -Dfile.encoding=UTF-8
    steps:
    - name: Checkout
      uses: actions/checkout@v6
    - name: Setup JDK
      uses: actions/setup-java@v5
      with:
        distribution: ${{ matrix.distribution }}}
        java-version: ${{ matrix.java }}}
        cache: sbt
    - name: Setup sbt
      uses: sbt/setup-sbt@v1
    - name: Build and test (1)
      if: ${{ matrix.jobtype == 1 }}}
      shell: bash
      run: |
        sbt -v "mimaReportBinaryIssues; scalafmtCheckAll; test;"
    - name: Build and test (2)
      if: ${{ matrix.jobtype == 2 }}}
      shell: bash
      run: |
        sbt -v "scripted actions/*"
    - name: Build and test (3)
      if: ${{ matrix.jobtype == 3 }}}
      shell: bash
      run: |
        sbt -v "scripted dependency-management/*"

sbt-github-actions

此外还有 Daniel Spiewak 开发的 sbt-github-actions sbt 插件,可生成工作流文件并将设置保留在 build.sbt 文件中。