GAS에서 master에 병합된 풀릭 목록을 Slack에 게시
소개
GitHub의 GraphQL API v4와 Google Apps Script를 사용하여 '이번 주 master 브랜치에 병합 된 풀릭 목록'을 얻고 & Slack에 게시했습니다.
GitHub GraphQL 쿼리 만들기
공식 샘플 쿼리 을 베이스로, 공식 GitHub GraphQL API Explorer 로 조정해 갑니다.
풀릭의 필터링
다음 조건으로 필터링합니다.
baseRefName: "master"
states: MERGED
last:20
※ 참고 끌어 오기 요청을 좁히는 데 사용할 수있는 매개 변수
필드 필터링
풀릭의 모든 정보를 원하지는 않으므로 다음 필드로만 필터링합니다.
title
author { login }
permalink
mergedAt
※ 참고 풀 요청 필드 목록
최종 쿼리
이런 쿼리가 완성되었습니다.
query {
repository(owner: "owner", name: "name") {
pullRequests(last: 20, states: MERGED, baseRefName: "master") {
edges {
node {
title
permalink
mergedAt
author {
login
}
}
}
}
}
}
GAS에서 GitHub API를 사용하여 풀릭 획득 및 Slack에 게시
GitHub API에 POST하는 부분은 앞으로도 사용할 것 같아서 분리해 두었습니다.
function fetchFromGitHub(query) {
var TOKEN = "token";
var ENDPOINT = "https://api.github.com/graphql";
var payload = JSON.stringify({
"query": query
});
var options = {
"method": "POST",
"contentType": 'application/json',
"headers": {
"Authorization": "Bearer " + TOKEN
},
"payload": payload
};
return JSON.parse(UrlFetchApp.fetch(ENDPOINT, options));
}
취득 후 병합 일을 보고 필터 & 성형하여 Slack에 투고하고 있습니다.
function getMasterMergedBranchesInThisWeek() {
var query = "{ \
repository(owner: "owner", name: "name") { \
pullRequests(last:20, states: MERGED, baseRefName: "master") { \
edges { \
node { \
title \
permalink \
mergedAt \
author { \
login \
} \
} \
} \
} \
} \
}";
var response = postGitHubAPI(query);
var pullRequests = response.data.repository.pullRequests.edges.map(function (edge) {
return edge.node;
});
// マージ日でフィルタ
// 日付操作にはmoment.jsを使っています
var startDate = moment().startOf('week');
var recentMergedPullRequests = pullRequests
.filter(function (pr) {
return moment(pr.mergedAt).isSameOrAfter(startDate);
});
// 整形
var text = "今週マージされたプルリク一覧\n";
text += recentMergedPullRequests.map(function(pr) {
return "・" + pr.title + "(" + pr.author.login + "):" + pr.permalink;
}).join("\n");
postSlackMessage("channel_id", text);
}
Slack에 게시하는 부분도 분리하고 있습니다.
function postSlackMessage(channel, text) {
var TOKEN = "token";
var ENDPOINT = "https://slack.com/api/chat.postMessage";
var payload = {
"text": text,
"channel": channel,
"token": TOKEN
};
var options = {
"method": "POST",
"payload": payload
};
return UrlFetchApp.fetch(ENDPOINT, options);
}
안전하게 게시할 수 있었습니다.
결론
API v3와 달리 필요한 field 밖에 취하지 않기 때문에, 응답을 출력했을 때에 보기 쉽고 좋네요.
GAS에서는 백 쿼트를 사용할 수 없기 때문에, query 쓰는 부분에서 백 슬래시를 많이 사용하지 않으면 안되는 것이 힘들다고 생각했습니다.
참고로했습니다.
GitHub GraphQL API v4를 Google App Script에서 실행하여 문제 목록을 가져 왔습니다.
Reference
이 문제에 관하여(GAS에서 master에 병합된 풀릭 목록을 Slack에 게시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moshichda/items/983420d77bc1ef1b99d1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)