我正在尝试强制执行以"BPSD-XXXXX"开头的提交,并且无法弄清楚如何在推送后强制执行此lambda函数,但在代码实际推送到AWS Codecommit之前。
下面的 lambda 函数强制执行提交字符串,但直到代码实际推送后才会强制执行。我设置了一个触发器,以便在推送代码时进行代码提交。
我意识到触发器是问题所在,但是我可以放入一个触发器,在完全推送实际发生之前以某种方式检查提交消息?还是在推动发生时?
var aws = require('aws-sdk');
//aws.config.update({region:'us-east-2'});
var codecommit = new aws.CodeCommit({ apiVersion: '2015-04-13' });
exports.handler = function (event, context) {
//console.log(JSON.stringify(event));
for (var reference of event.Records[0].codecommit.references) {
let commitId = reference.commit;
let repo = event.Records[0].eventSourceARN.split(':').pop();
console.log('commitId', commitId);
console.log('repo', repo);
codecommit.getCommit({ repositoryName: repo, commitId: commitId }, function (error, data) {
if (error)
throw error;
console.log('message:', data.commit.message);
if (!/^(BPSD-[0-9]+|Merge)/.test(data.commit.message))
throw new Error("Your commit message is missing either a JIRA Issue ('BPSD-XXXX') or 'Merge'");
});
}
};
我希望如果提交消息不包含"BPSD-XXXXX",则不推送代码
在你的lambda点,它已经被上传了。您需要做的是在提交时强制执行提交钩子,以检查提交消息。这将很容易在.git/hooks/commit-msg中控制
这些可以在每个存储库中控制,也可以设置为服务器端提交挂钩。
一些应该有帮助的链接:
https://git-scm.com/book/uz/v2/Customizing-Git-An-Example-Git-Enforced-Policy
https://gist.github.com/pgilad/5d7e4db725a906bd7aa7
我找到的一个快速脚本可以进入.git/hooks/commit-msg
#!/usr/bin/env bash
INPUT_FILE=$1
START_LINE=`head -n1 $INPUT_FILE`
PATTERN="^(MYPROJ)-[[:digit:]]+: "
if ! [[ "$START_LINE" =~ $PATTERN ]]; then
echo "Bad commit message, see example: MYPROJ-123: commit message"
exit 1
fi