はじめに
このガイドは、Go パッケージのビルド、テスト、公開の方法を紹介します。
必要なソフトウェアをセルフホステッド ランナーにインストールする必要があります。 セルフホステッド ランナーの詳細については、「自分のランナーをホストする」を参照してください。
前提条件
YAMLの構文と、GitHub ActionsでのYAMLの使われ方に馴染んでいる必要があります。 詳しくは、「ギットハブ アクション のワークフロー構文」を参照してください。
Go 言語の基本を理解しておくことをおすすめします。 詳しくは、「Go の概要」をご覧ください。
Go スターター ワークフローを使用する
すぐに開始するには、リポジトリの .github/workflows
ディレクトリにスターター ワークフローを追加します。
GitHub では、ほとんどの Go プロジェクトで使える Go スターター ワークフローが提供されています。 このガイドの以降のセクションでは、このスターター ワークフローをカスタマイズする方法の例を示します。
-
ご自分のエンタープライズ で、リポジトリのメイン ページへ移動します。
-
リポジトリ名の下にある [アクション] をクリックします。
-
ワークフローが既にリポジトリ内にある場合は、 [新しいワークフロー] をクリックします。
-
「ワークフローの選択」ページには、推奨されるスターター ワークフローの選択内容が表示されます。 「go」を検索します。
-
「継続的インテグレーション」をクリックして、ワークフローの選択をフィルター処理します。
-
「Go - by GitHub Actions」ワークフローで、「**[設定]**をクリックします。
「Go - by GitHub Actions」スターター ワークフローが見つからない場合は、次のワークフロー コードをリポジトリの.github/workflows
ディレクトリのgo.yml
を呼び出した新しいファイルにコピーします。YAML name: Go on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: self-hosted steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v3 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@v4 - name: Set up Go uses: actions/setup-go@v3 with: go-version: '1.20' - name: Build run: go build -v ./... - name: Test run: go test -v ./...
-
必要に応じてワークフローを編集します。 例えば、Go のバージョンを変更します。
-
[変更をコミットする] をクリックします。
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@v4 - name: Setup Go ${{ matrix.go-version }} uses: actions/setup-go@v3 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@v4
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v3
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@v3 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@v3
with:
# Semantic version range syntax or exact version of Go
go-version: '1.21.x'
依存関係のインストール
go get
を使って依存関係をインストールできます。
steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v3 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@v4
- name: Setup Go
uses: actions/setup-go@v3
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
コードのビルドとテスト
ローカルで使うのと同じコマンドを、コードのビルドとテストに使えます。 このワークフローの例では、ジョブで go build
と go test
を使う方法を示します。
name: Go on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v3 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@v4
- name: Setup Go
uses: actions/setup-go@v3
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@v4 - name: Setup Go uses: actions/setup-go@v3 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@v4
- name: Setup Go
uses: actions/setup-go@v3
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