2018年10月17日水曜日

Redmineのリポジトリから特定ソースの修正をGoogle Apps Scriptでメールする

Redmineのプラグインを作成していると、関連する本体側の修正に影響を受けることがあります。
また、私の作っているRedmine XLSX format issue exporterは、RedmineのCSVエクスポート機能と同等を目指しているので、変更に追随するようにしています。

Redmine本体へのコミットは、MastodonDiscordのBOTで確認できますが、流してみる感じになるので見逃してしまいがちです。
CIで失敗する場合はいいのですが、スルーしてなんか動きがおかしくなったり、本体側のバグ修正をプラグイン側にも反映すべき場合があったりが続いたので、対策を考えて見ました、の結果です。

今回はGoogle Apps Scriptを使って見ました。Google Apps Scriptを使うと、cron的なトリガーでスクリプトを動かすことができます。
設定画面はこんな感じ。


作成したスクリプトは、redmine.orgのリポジトリページへアクセスして、今日のコミットがあればメールするというものです。
以下のような感じ。targetsにURLを追加していけば、複数のソースをチェックできます。
function CheckRedmineNewCommits() {
var targets = ['http://www.redmine.org/projects/redmine/repository/changes/trunk/app/views/issues/index.html.erb',
'http://www.redmine.org/projects/redmine/repository/changes/trunk/app/views/timelog/index.html.erb',
'http://www.redmine.org/projects/redmine/repository/changes/trunk/app/views/timelog/index.html.erb',
'http://www.redmine.org/projects/redmine/repository'];
var today = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd");
var msg = '';
for(var i = 0; i < targets.length; i++) {
if (isCommitedToday(targets[i], today)) {
msg = msg + '\n' + targets[i];
}
}
if (msg !== '') {
GmailApp.sendEmail('twopackas@gmail.com', '[New Commit]Redmine New Commit Checker ' + today,
'Following urls has new commit.\n' + msg);
}
}
function isCommitedToday(url, today) {
return getLastCommitDate(url).substring(0, 10) == today;
}
function getLastCommitDate(url) {
var html = UrlFetchApp.fetch(url)
.getContentText()
.replace('<!DOCTYPE html>', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">');
var root = XmlService.parse(html).getRootElement();
return parser.getElementsByClassName(root, 'committed_on')[0].getValue();
}


これでちょっとは見逃しが少なくなるといいんですが。。。

0 件のコメント:

コメントを投稿

RedmineプラグインをGitHub Actionsでテストする

Redmine Advent Calendar 2019 の Qiita で書きました。追っかけで もう一つ 。 Travis-CIで行っていたRedmineプラグインのCIを、GitHub Actionsに変更したものです。 GitHub Actionsをやってみようという...