为什么可以在CI环境中运行Go测试和构建,而不必先安装依赖项?

bjg7j2ky  于 2023-02-01  发布在  Go
关注(0)|答案(1)|浏览(140)

我有一个Go语言项目,其中包含Makefile

test:
    @go test -cover ./...

和一个mod文件

module path/to/repo

go 1.19

require github.com/go-chi/chi/v5 v5.0.8

我创建了一个Github动作示例来在Github PR上运行测试

name: QA on pull request

on: pull_request

jobs:
  run-tests:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Setup Go
        uses: actions/setup-go@v3
        with:
          go-version: 1.19

      - name: Run tests
        run: make test

我想知道为什么此工作流在没有install dependencies步骤的情况下工作。项目本身正在使用外部依赖项,我认为应该有一个运行go get ./...的步骤
如果不存在,Go语言会在引擎盖下安装它们吗?或者actions/setup-go@v3操作会安装依赖项吗?

r7xajy2e

r7xajy2e1#

根据go test文档(或者您可以在本地运行go help test以阅读其描述):
“Go test”会重新编译每个包以及名称与文件模式“*_test.go”匹配的任何文件。
它还安装所有依赖项;因此,当操作执行go test时会发生这种情况。您可能会在日志中观察到这种情况。
actions/setup-go@v3并不依赖于代码本身,它只是设置了您要求的go环境,在您的设置中,如果您将setup-gocheckout交换,它仍然可以工作。

相关问题