本指南将向你展示如何构建、测试和发布 Go 包。
GitHub 托管的运行程序具有一个包含预安装软件的工具缓存,其中包括 Go 的依赖项。有关最新软件和 Go 预安装版本的完整列表,请参阅“使用 GitHub 托管的运行程序”。
你应该已经熟悉 YAML 语法以及如何将其与 GitHub 操作一起使用。有关更多信息,请参阅“GitHub 操作的工作流语法”。
我们建议你对 Go 语言有基本的了解。有关更多信息,请参阅Go 入门。
要快速入门,请将入门工作流添加到存储库的 .github/workflows
目录中。
GitHub 提供了一个 Go 入门工作流,该工作流应该适用于大多数 Go 项目。本指南的后续部分提供了有关如何自定义此入门工作流的示例。
-
在 GitHub.com 上,导航到存储库的主页。
-
在存储库名称下方,单击 操作.
-
如果存储库中已有工作流,请单击新建工作流。
-
“选择工作流”页面显示推荐的入门工作流选择。搜索“go”。
-
单击持续集成筛选工作流选择。
-
在“Go - by GitHub Actions”工作流上,单击配置。
-
根据需要编辑工作流。例如,更改 Go 版本。
-
单击提交更改。
go.yml
工作流文件添加到存储库的 .github/workflows
目录。
指定 Go 版本最简单的方法是使用 GitHub 提供的 setup-go
操作。有关更多信息,请参阅 setup-go
操作。
要在 GitHub 托管的运行器上使用 Go 的预安装版本,请将相关版本传递给 setup-go
操作的 go-version
属性。此操作从每个运行器上的工具缓存中查找特定版本的 Go,并将必要的二进制文件添加到 PATH
。这些更改将在作业的剩余时间内保留。
setup-go
操作是将 Go 与 GitHub Actions 配合使用的推荐方法,因为它有助于确保在不同的运行器和不同版本的 Go 中保持一致的行为。如果您使用的是自托管运行器,则必须安装 Go 并将其添加到 PATH
。
YAMLname: 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@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@v4
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
- name: Display Go version
run: go version
您可以将作业配置为使用特定版本的 Go,例如 1.20.8
。或者,您可以使用语义版本语法来获取最新的次要版本。此示例使用 Go 1.21 的最新修补程序版本
YAML - 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:
go-version: '1.21.x'
您可以使用 go get
安装依赖项
YAML steps:
- uses: actions/checkout@v4
- 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/[email protected]
steps:
- uses: actions/checkout@v4
- 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/[email protected]
你可以使用 setup-go
操作 缓存并还原依赖项。默认情况下,使用 setup-go
操作时会启用缓存。
setup-go
操作在存储库根目录中搜索依赖项文件 go.sum
,并使用依赖项文件的哈希作为缓存密钥的一部分。
当使用多个依赖项文件或它们位于不同的子目录中时,你可以使用 cache-dependency-path
参数。
YAML - 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
YAMLname: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- 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@v4
- 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
操作上传测试结果。
有关更多信息,请参阅“将工作流数据存储为工件”。
YAMLname: 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@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@v4
- 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