はじめに
このガイドは、Go パッケージのビルド、テスト、公開の方法を紹介します。
GitHub ホステッド ランナーにはプリインストールされたソフトウェアのあるツール キャッシュがあり、Go 用の依存関係が含まれています。 最新のソフトウェアの完全な一覧と、プレインストールされたバージョンの Go については、「GitHub ホステッド ランナー」を参照してください。
前提条件
YAMLの構文と、GitHub ActionsでのYAMLの使われ方に馴染んでいる必要があります。 詳しくは、「GitHub Actions のワークフロー構文」をご覧ください。
Go 言語の基本を理解しておくことをおすすめします。 詳しくは、「Go の概要」をご覧ください。
Go ワークフロー テンプレートの使用
すぐに開始するには、リポジトリの .github/workflows ディレクトリにワークフロー テンプレートを追加します。
GitHub では、ほとんどの Go プロジェクトで動作する Go ワークフロー テンプレートが提供されています。 このガイドの以降のセクションでは、このワークフロー テンプレートをカスタマイズする方法の例を示します。
- 
GitHub で、リポジトリのメイン ページに移動します。 
- 
リポジトリ名の下にある [ Actions] をクリックします。 !["github/docs" リポジトリのタブのスクリーンショット。 [アクション] タブがオレンジ色の枠線で強調表示されています。](/assets/cb-12958/images/help/repository/actions-tab-global-nav-update.png) 
- 
ワークフローが既にリポジトリ内にある場合は、 [新しいワークフロー] をクリックします。 
- 
[ワークフローの選択] ページには、推奨されるワークフロー テンプレートの選択が表示されます。 「go」を検索します。 
- 
「継続的インテグレーション」をクリックして、ワークフローの選択をフィルター処理します。 
- 
[Go - by GitHub Actions] ワークフローで、[構成] をクリックします。 ![「ワークフローの選択」ページのスクリーンショット。 「Go」ワークフローの [設定] ボタンは、オレンジ色のアウトラインで強調されています](/assets/cb-101514/images/help/actions/starter-workflow-go.png) 
- 
必要に応じてワークフローを編集します。 例えば、Go のバージョンを変更します。 
- 
[変更をコミットする] をクリックします。 
go.yml ワークフロー ファイルがリポジトリの .github/workflows ディレクトリに追加されます。
Go バージョンの指定
最も簡単に Go のバージョンを指定する方法は、GitHub によって提供される setup-go アクションを使用することです。 詳細については、「setup-go アクション」を参照してください。
GitHub ホストランナーでプレインストールされたバージョンの Go を使うには、setup-go アクションの go-version プロパティに関連するバージョンを渡します。 このアクションは、各ランナーのツール キャッシュから特定のバージョンの Go を見つけて、必要なバイナリを PATH に追加します。 これらの変更は、ジョブの残りの部分で保持されます。
setup-go アクションは、異なるランナーや異なるバージョンの Go で一貫した動作を保証するのに役立つため、GitHub Actions で Go を使うときに推奨される方法です。 セルフホスト型ランナーを使用している場合は、Go をインストールし、それを PATH に追加する必要があります。
複数のバージョンの Go の使用
name: Go
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.19', '1.20', '1.21.x' ]
    steps:
      - uses: actions/checkout@v5
      - name: Setup Go ${{ matrix.go-version }}
        uses: actions/setup-go@v5
        with:
          go-version: ${{ matrix.go-version }}
      # You can test your matrix by printing the current Go version
      - name: Display Go version
        run: go version
name: Go
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.19', '1.20', '1.21.x' ]
    steps:
      - uses: actions/checkout@v5
      - name: Setup Go ${{ matrix.go-version }}
        uses: actions/setup-go@v5
        with:
          go-version: ${{ matrix.go-version }}
      # You can test your matrix by printing the current Go version
      - name: Display Go version
        run: go version
特定のバージョンの Go の使用
1.20.8 のような特定のバージョンの Go を使うようにジョブを構成できます。 あるいは、最新のマイナーリリースを取得するためにセマンティックバージョン構文を使うこともできます。 この例では、最新のパッチ リリースである Go 1.21 を使います:
      - name: Setup Go 1.21.x
        uses: actions/setup-go@v5
        with:
          # Semantic version range syntax or exact version of Go
          go-version: '1.21.x'
      - name: Setup Go 1.21.x
        uses: actions/setup-go@v5
        with:
          # Semantic version range syntax or exact version of Go
          go-version: '1.21.x'
依存関係のインストール
go get を使って依存関係をインストールできます。
    steps:
      - uses: actions/checkout@v5
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.21.x'
      - name: Install dependencies
        run: |
          go get .
          go get example.com/octo-examplemodule
          go get example.com/octo-examplemodule@v1.3.4
    steps:
      - uses: actions/checkout@v5
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.21.x'
      - name: Install dependencies
        run: |
          go get .
          go get example.com/octo-examplemodule
          go get example.com/octo-examplemodule@v1.3.4
依存関係のキャッシング
setup-go アクションを使うと、依存関係をキャッシュおよび復元できます。 既定では、setup-go アクションを使っているとキャッシュが有効になります。
setup-go アクションは、リポジトリ ルートで依存関係ファイル go.sum を検索し、依存関係ファイルのハッシュをキャッシュ キーの一部として使います。
依存関係ファイルを複数使っている場合、またはそれらが別のサブディレクトリにある場合、cache-dependency-path パラメーターを使うことができます。
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.17'
          cache-dependency-path: subdir/go.sum
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.17'
          cache-dependency-path: subdir/go.sum
カスタム要件がある場合、またはキャッシュに対してより細かい制御が必要な場合は、cache アクションを使用できます。 詳しくは、「依存関係キャッシュのリファレンス」をご覧ください。
コードのビルドとテスト
ローカルで使うのと同じコマンドを、コードのビルドとテストに使えます。 このワークフローの例では、ジョブで go build と go test を使う方法を示します。
name: Go
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.21.x'
      - name: Install dependencies
        run: go get .
      - name: Build
        run: go build -v ./...
      - name: Test with the Go CLI
        run: go test
name: Go
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.21.x'
      - name: Install dependencies
        run: go get .
      - name: Build
        run: go build -v ./...
      - name: Test with the Go CLI
        run: go test
成果物としてのワークフローのデータのパッケージ化
ワークフローが完了すると、結果の成果物を分析のためにアップロードできます。 たとえば、ログファイル、コアダンプ、テスト結果、スクリーンショットを保存する必要があるかもしれません。 次の例では、upload-artifact アクションを使ってテスト結果をアップロードする方法を示します。
詳しくは、「ワークフロー成果物を使ったデータの格納と共有」をご覧ください。
name: Upload Go test results
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.19', '1.20', '1.21.x' ]
    steps:
      - uses: actions/checkout@v5
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: ${{ matrix.go-version }}
      - name: Install dependencies
        run: go get .
      - name: Test with Go
        run: go test -json > TestResults-${{ matrix.go-version }}.json
      - name: Upload Go test results
        uses: actions/upload-artifact@v4
        with:
          name: Go-results-${{ matrix.go-version }}
          path: TestResults-${{ matrix.go-version }}.json
name: Upload Go test results
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        go-version: [ '1.19', '1.20', '1.21.x' ]
    steps:
      - uses: actions/checkout@v5
      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: ${{ matrix.go-version }}
      - name: Install dependencies
        run: go get .
      - name: Test with Go
        run: go test -json > TestResults-${{ matrix.go-version }}.json
      - name: Upload Go test results
        uses: actions/upload-artifact@v4
        with:
          name: Go-results-${{ matrix.go-version }}
          path: TestResults-${{ matrix.go-version }}.json