oogleSpreadSheet가 GitHub Issue 목록을 표시하는 방법 - 협력 방법
GitHub API Issue x Google SpreadSheet 연동
모든 리포지토리의 issue 목록을 표시합니다.
리포지토리 이름의 시트가 있으면 거기에, 없으면 추가해 줍니다.
스프레드시트측의 기능으로 조건부 서식으로 닫은 issue를 어둡게 하거나,
GitHub의 API로 닫은 녀석을 표시하지 않는, 최근 1개월만 표시라든가,
여러 가지 시도해보십시오.
GitHub API
htps : //로 ゔぇぺぺr. 기주 b. 이 m/v3/
넣는 방법
스프레드시트 열기
↓
도구
↓
스크립트 편집기
↓
아래 코드를 넣어
↓
저장 및 실행, 권한 부여
트리거도 설정할 수 있습니다.
code
※access_token은 여기에서 발행해 주세요
htps : // 기주 b. 코 m / 세팅 gs / 토켄 s
function myFunction() {
var GITHUB_OWNER = 'owner_name'; // レポジトリのオーナー名を入れてください
var GITHUB_ACCESS_TOKEN = 'access_token'; // 上記で発行したaccess tokenを入れてください
var REPOSITORIES = ['repository_name'] // 出したいレポジトリ名を入れてください
// APIからissueのjsonを取得
var getIssues = function(repository){
var url = 'https://api.github.com/repos/' + GITHUB_OWNER + '/' + repository + '/issues?state=all&sort=created&direction=asc&access_token=' + GITHUB_ACCESS_TOKEN;
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
return JSON.parse(json);
}
// issueのjsonから中身を取得
var getAttributesOfIssue = function(issue){
var milestone = "";
if(issue["milestone"]){
milestone = issue["milestone"]["title"];
}
var labels = "";
if(issue["labels"]){
labels = issue["labels"].map(function(label){
return label["name"]
}).join(",");
}
var assignee = "";
if(issue["assignee"]){
assignee = issue["assignee"]["login"];
}
var due_on = "";
if(issue["milestone"] && issue["milestone"]["due_on"]){
due_on = issue["milestone"]["due_on"].substring(0, 10);
}
var opend_at = "";
if(issue["created_at"]){
opend_at = issue["created_at"].substring(0, 10);
}
var closed_at = "";
if(issue["closed_at"]){
closed_at = issue["closed_at"].substring(0, 10);
}
var url = '=HYPERLINK("' + issue["html_url"] + '","' + issue["number"] + '")';
return [
milestone,
issue["title"],
assignee,
issue["state"],
labels,
due_on,
opend_at,
closed_at,
url
]
}
var sortByValueOfIndex = function(ary, index){
return ary.sort(function(a,b){
if( a[index] < b[index] ) return -1;
if( a[index] > b[index] ) return 1;
return 0;
});
}
// スプレッドシートを取得
var ss = SpreadsheetApp.getActive()
// 指定したレポジトリでシートに反映していく
REPOSITORIES.forEach(function(repository){
var issues = getIssues(repository).map(function(issue){
return getAttributesOfIssue(issue);
});
// due on でソートしています
issues = sortByValueOfIndex(issues, 5);
var titles = ["Milestone", "Title", "Assignee", "Status", "Labels", "due_on", "opened_at", "closed_at", "Issue URL"];
issues.unshift(titles);
var sheet = ss.getSheetByName(repository);
if(sheet == null) {
ss.insertSheet(repository);
sheet = ss.getSheetByName(repository);
}
sheet.getRange("A1:I" + (issues.length).toString()).setValues(issues);
});
}
굉장히 신경이 쓰이면, 적당하게 끝내고 있는 부분등을 고쳐 줍니다.
편집 요청도 환영합니다.
Reference
이 문제에 관하여(oogleSpreadSheet가 GitHub Issue 목록을 표시하는 방법 - 협력 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoshimikeisui/items/277b06c58f50d530e5d1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)