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 を用いてワークフローファイルを生成することができる。