在推送到版本控制远程之前检查以确保项目编译

Checking to make sure project compiles before pushing to version control remote

我有一个用于 TypeScript 项目的脚本,它确保我的代码在我将它推送到远程之前编译:

simple_git_push_typescript(){
 (
    set -e

    top_level="$(git rev-parse --show-toplevel)"

    if [[ "$cm_ignore_tsc" != 'yes' ]]; then

        if [[ -f "$top_level/tsconfig.json" ]]; then
          (cd "$top_level" && tsc)  || { echo 'Could not compile with tsc. Did not push. Use "cm_ignore_tsc=yes" to override.'; exit 1; }
        fi
    fi

    git add -A

    if [[ "$cm_force_commit" == 'yes' ]]; then
       git commit --allow-empty -am "${1-tmp}"
    else
       git commit -am "${1-tmp}"  || echo 'Could not create new commit.';
    fi

    git push
 )
}

当我在一天结束时或在拉取请求之前将代码推送到我的功能分支时,该脚本非常有效 - 它有助于防止不必要的提交,但也使它变得简单。

使用 Go,我只想在将 Go 项目推送到远程之前检查所有内容是否编译。

simple_git_push_go(){
  (
    set -e

    top_level="$(git rev-parse --show-toplevel)"

    (cd "$top_level" && go build -o '/dev/null' .)  # ?

     # ...
   )
}

Go build 是检查我整个项目编译情况的最佳选择,还是更通用的查找所有 go 包并编译每个包的方法?我想对于有多个没有链接在一起的包的项目,那么你将不得不遍历每个包并单独编译它们?

在项目根目录中使用go build ./...。这将递归到任何深度的子文件夹。

如果您还想确保测试文件也能编译(并且测试通过),那么运行:go test ./...

请注意,以下划线 _ 或圆点 . 开头的文件夹将被忽略。