在GitHub Actions中运行Go相关pre-commit脚本失败求助
解决GitHub Actions中pre-commit Go钩子工具找不到的问题
我在GitHub Actions里运行包含Go相关钩子的pre-commit脚本时,明明已经在pre-commit步骤前添加了goimports和golangci-lint的安装步骤,却还是提示找不到这两个工具。
当前配置文件
.pre-commit-config.yaml
repos: - repo: https://github.com/dnephin/pre-commit-golang rev: v0.5.0 hooks: - id: go-imports - id: golangci-lint - id: go-unit-tests
GitHub Action 配置文件
name: pre-commit on: pull_request: push: branches: [main] jobs: pre-commit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 - uses: actions/setup-go@v3 - run: go install golang.org/x/tools/cmd/goimports@latest - run: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.49.0 - uses: pre-commit/action@v2.0.2
错误输出
[INFO] This may take a few minutes... go imports...............................................................Failed - hook id: go-imports - exit code: 127 /home/runner/.cache/pre-commit/repow0byklud/run-go-imports.sh: line 8: goimports: command not found golangci-lint............................................................Failed - hook id: golangci-lint - exit code: 127 /home/runner/.cache/pre-commit/repow0byklud/run-golangci-lint.sh: 2: exec: golangci-lint: not found go-unit-tests............................................................Passed
问题原因
GitHub Actions中pre-commit的运行环境默认不包含Go的bin目录($(go env GOPATH)/bin),虽然手动安装了工具,但pre-commit进程找不到这些工具的路径。
解决方案
方案1:手动添加Go bin目录到PATH
在安装工具的步骤后,添加一步将Go的bin目录写入GitHub Actions的环境变量PATH中:
修改后的GitHub Action配置:
name: pre-commit on: pull_request: push: branches: [main] jobs: pre-commit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 - uses: actions/setup-go@v3 - run: go install golang.org/x/tools/cmd/goimports@latest - run: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.49.0 - run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH - uses: pre-commit/action@v2.0.2
方案2:让pre-commit自动安装依赖(推荐)
直接修改.pre-commit-config.yaml,给对应的钩子添加additional_dependencies,让pre-commit自动处理工具安装,无需手动在Action中配置:
修改后的.pre-commit-config.yaml:
repos: - repo: https://github.com/dnephin/pre-commit-golang rev: v0.5.0 hooks: - id: go-imports additional_dependencies: [golang.org/x/tools/cmd/goimports@latest] - id: golangci-lint additional_dependencies: [github.com/golangci/golangci-lint/cmd/golangci-lint@v1.49.0] - id: go-unit-tests
对应的GitHub Action配置可以简化为:
name: pre-commit on: pull_request: push: branches: [main] jobs: pre-commit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 - uses: actions/setup-go@v3 - uses: pre-commit/action@v2.0.2
内容的提问来源于stack exchange,提问作者lgl1
相关产品推荐
相关产品推荐

