mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
grafana/toolkit: Support paging in cherrypick task (#24402)
* Support paging in cherrypick task * Update packages/grafana-toolkit/src/cli/tasks/cherrypick.ts Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com> * Update packages/grafana-toolkit/src/cli/tasks/cherrypick.ts Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com> * Do not cherry pick closed PRs Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
This commit is contained in:
parent
2f5003ebf1
commit
c5fc18ac02
@ -5,22 +5,63 @@ interface CherryPickOptions {
|
|||||||
enterprise: boolean;
|
enterprise: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cherryPickRunner: TaskRunner<CherryPickOptions> = async ({ enterprise }) => {
|
// https://github.com/lisposter/github-pagination/blob/master/lib/octopage.js
|
||||||
const githubClient = new GithubClient({ enterprise });
|
const pagingParser = (linkStr: string): { prev?: string; next?: string; last?: string; first?: string } => {
|
||||||
const client = githubClient.client;
|
return linkStr
|
||||||
|
.split(',')
|
||||||
|
.map(rel => {
|
||||||
|
//@ts-ignore
|
||||||
|
return rel.split(';').map((curr, idx) => {
|
||||||
|
if (idx === 0) {
|
||||||
|
//@ts-ignore
|
||||||
|
return /[^_]page=(\d+)/.exec(curr)[1];
|
||||||
|
}
|
||||||
|
if (idx === 1) {
|
||||||
|
//@ts-ignore
|
||||||
|
return /rel="(.+)"/.exec(curr)[1];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.reduce(function(obj, curr, i) {
|
||||||
|
//@ts-ignore
|
||||||
|
obj[curr[1]] = curr[0];
|
||||||
|
return obj;
|
||||||
|
}, {});
|
||||||
|
};
|
||||||
|
|
||||||
const res = await client.get('/issues', {
|
const getIssues = async (client: any, page: string) => {
|
||||||
|
const result = await client.get('/issues', {
|
||||||
params: {
|
params: {
|
||||||
state: 'closed',
|
state: 'closed',
|
||||||
per_page: 100,
|
per_page: 100,
|
||||||
labels: 'cherry-pick needed',
|
labels: 'cherry-pick needed',
|
||||||
sort: 'closed',
|
sort: 'closed',
|
||||||
direction: 'asc',
|
direction: 'asc',
|
||||||
|
page,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let data = result.data;
|
||||||
|
if (!result.headers.link) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
const pages = pagingParser(result.headers.link);
|
||||||
|
|
||||||
|
if (pages.next) {
|
||||||
|
const nextPage = await getIssues(client, pages.next);
|
||||||
|
data = data.concat(nextPage);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
|
||||||
|
const cherryPickRunner: TaskRunner<CherryPickOptions> = async ({ enterprise }) => {
|
||||||
|
const githubClient = new GithubClient({ enterprise });
|
||||||
|
const client = githubClient.client;
|
||||||
|
const results = await getIssues(client, '1');
|
||||||
|
|
||||||
// sort by closed date ASC
|
// sort by closed date ASC
|
||||||
res.data.sort((a: any, b: any) => {
|
results.sort((a: any, b: any) => {
|
||||||
return new Date(a.closed_at).getTime() - new Date(b.closed_at).getTime();
|
return new Date(a.closed_at).getTime() - new Date(b.closed_at).getTime();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -30,13 +71,17 @@ const cherryPickRunner: TaskRunner<CherryPickOptions> = async ({ enterprise }) =
|
|||||||
console.log('Printing PRs with cherry-pick-needed, in ASC merge date order');
|
console.log('Printing PRs with cherry-pick-needed, in ASC merge date order');
|
||||||
console.log('--------------------------------------------------------------------');
|
console.log('--------------------------------------------------------------------');
|
||||||
|
|
||||||
for (const item of res.data) {
|
for (const item of results) {
|
||||||
if (!item.milestone) {
|
if (!item.milestone) {
|
||||||
console.log(item.number + ' missing milestone!');
|
console.log(item.number + ' missing milestone!');
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const issueDetails = await client.get(item.pull_request.url);
|
const issueDetails = await client.get(item.pull_request.url);
|
||||||
|
|
||||||
|
if (!issueDetails.data.merged) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
console.log(`* ${item.title}, (#${item.number}), merge-sha: ${issueDetails.data.merge_commit_sha}`);
|
console.log(`* ${item.title}, (#${item.number}), merge-sha: ${issueDetails.data.merge_commit_sha}`);
|
||||||
commands += `git cherry-pick -x ${issueDetails.data.merge_commit_sha}\n`;
|
commands += `git cherry-pick -x ${issueDetails.data.merge_commit_sha}\n`;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user