推送AWS CodeCommit后的Git diff

时间:2017-10-18 14:14:40

标签: git aws-lambda aws-codecommit

我是AWS CodeCommit的新手,我希望在每次推送远程存储库后都能在我的电子邮件中获取git diff。

我已设置触发器通过SNS推送接收电子邮件,但有可能使用lambda函数从上次提交获得纯git diff吗?

3 个答案:

答案 0 :(得分:0)

  1. 让CodeCommit触发Lambda函数。
  2. 使用Lambda函数打包git。最简单的方法可能是使用this library,但这需要您在NodeJS中编写函数。如果你想使用像Python这样的另一种语言,你可以从那个NodeJS库下载git tar文件,并在你的Python函数中使用它。
  3. 让您的Lambda函数从触发它的消息中提取git提交ID。
  4. 让您的Lambda函数执行git diff以获取该提交的差异。
  5. 让您的Lambda函数通过AWS SES通过电子邮件发送差异。

答案 1 :(得分:0)

如果您将Lambda函数配置为使用CodeCommit作为触发器,您将在Lambda event中获取提交ID。

使用提交ID,您可以使用aws-sdk的{​​{3}}和/或getCommit()来检索该提交的差异并将其发送到AWS SES。

答案 2 :(得分:0)

所以我没有测试过这个工作流程,但我怀疑你可以让它适用于你的用例。

步骤:

  1. 为存储库配置CodeCommit触发器以通知Lambda函数。每次进行推送时,此有效负载将包括分支提示的新提交ID。

  2. 在lambda函数中,使用CodeCommit的GetCommit API获取您希望对其进行区分的父提交ID。除非提交是合并,否则应该只有1个父级。

  3. 对于每个父提交,使用CodeCommit的GetDifferences API获取已添加,修改或删除的每个文件的列表。

  4. 对于已更改的每组文件,使用CodeCommit的GetBlob API将文件内容作为Base64编码的字符串返回。将这些字符串传递给diff库以将diff呈现为HTML。我怀疑viranch/Diffy之类的东西可以起作用(虽然我没有尝试过)。

  5. 获得HTML diff有效负载后,将其发送给SNS或SES以便发送电子邮件。