使用Hydra构建Nix项目时能否获得当前的git SHA?

时间:2018-11-03 18:53:33

标签: git haskell nix hydra

我正在用Nix构建一个Haskell项目,CI由Hydra服务器完成。我想做的一件事是将git SHA嵌入应用程序本身,这样可以将SHA包含在我们的异常报告中,并作为HTTP响应中的标头(以检查最新的服务器是否在运行)。

使用https://hackage.haskell.org/package/gitrev之类的包在开发环境中从.git目录中提取SHA很容易,但是在克隆后,Hydra似乎不存在该目录(我添加了一些模板Haskell日志记录确认doesDirectoryExist <PWD>.git为假)。

是否有某种方法可以从Hydra获取git SHA?通过包含git目录,以便我自己获得SHA还是其他方法?

Hydra版本:SNAPSHOT-b11789f39993c614e53da39c29711b63cd266291(使用nix-2.0.4)

编辑:我还潜入工作服务器中,并确认在完成构建的地方没有.git目录:

[maximiliantagher@ip-10-0-2-46:/tmp]$ sudo ls -a nix-build-mercury-web-backend-0.0.0.drv-0/szjq4m1zklbydw7wrz7dbbxl9ndw0d0f-source
.     app     db          Dockerfile  Gemfile.lock  .ghcid   Makefile           one-off-task  README.md    shell.nix    stack.yaml
..    config  .dir-locals.el  docs        gemset.nix    .gitignore   mercury-web-backend.cabal  package.yaml  release.nix  sql-scripts  templates
API-Spec  data    dist        Gemfile     .ghci     .hlint.yaml  .nix               Rakefile      Setup        src      test

1 个答案:

答案 0 :(得分:1)

默认情况下,Hydra会删除.git文件夹,从而使您无法阅读git SHA。您可以通过将NIX_PREFETCH_GIT_LEAVE_DOT_GIT设置为"1"来告诉它不要这样做。

如果要使用其仓库中的release.nix文件构建Hydra,则可以在文件中的其他--set NIX_PREFETCH_GIT_LEAVE_DOT_GIT "1"之后添加--sethttps://github.com/NixOS/hydra/blob/1c44de1779d0e315615b072049fb2d2ce333fb32/release.nix#L155-L157