メモ
GitHub Enterprise Server ホステッド ランナーは、現在 GitHub ではサポートされていません。
はじめに
このガイドは、Go パッケージのビルド、テスト、公開の方法を紹介します。
GitHubホストされているランナーには、Go の依存関係を含む、プレインストールされたソフトウェアを含むツール キャッシュがあります。 最新のソフトウェアの完全な一覧と、プレインストールされたバージョンの Go については、「GitHub ホステッド ランナー」を参照してください。
前提条件
YAML 構文と、 GitHub Actionsでの使用方法について既に理解している必要があります。 詳しくは、「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 - by GitHub Actions" ワークフロー テンプレートが見つからない場合は、次のワークフロー コードを、リポジトリの![「ワークフローの選択」ページのスクリーンショット。 「Go」ワークフローの [設定] ボタンは、オレンジ色のアウトラインで強調されています](/assets/cb-101514/images/help/actions/starter-workflow-go.png)
go.ymlディレクトリにある.github/workflowsという名前の新しいファイルにコピーします。YAML name: Go on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: self-hosted steps: - uses: actions/checkout@v6 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.20' - name: Build run: go build -v ./... - name: Test run: go test -v ./...name: Go on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: self-hosted steps: - uses: actions/checkout@v6 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.20' - name: Build run: go build -v ./... - name: Test run: go test -v ./... -
必要に応じてワークフローを編集します。 例えば、Go のバージョンを変更します。
-
[Commit changes] をクリックします。
Go バージョンの指定
Go バージョンを指定する最も簡単な方法は、setup-goによって提供されるGitHub アクションを使用することです。 詳細については、「setup-go アクション」を参照してください。
GitHubホストランナーで事前にインストールされているバージョンの Go を使用するには、関連するバージョンをgo-versionアクションのsetup-goプロパティに渡します。 このアクションは、各ランナーのツール キャッシュから特定のバージョンの 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@v6
- 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@v6
- 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@v6
- 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@v6
- 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@v6
- 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@v6
- 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@v6
- 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@v3
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@v6
- 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@v3
with:
name: Go-results-${{ matrix.go-version }}
path: TestResults-${{ matrix.go-version }}.json