Contributor project automations via workflows (#2584)

Co-authored-by: Stephan T. Lavavej <stl@nuwen.net>
This commit is contained in:
Sam Huang 2022-10-26 05:58:39 -07:00 коммит произвёл GitHub
Родитель fb386c0108
Коммит c1c21e964c
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 141 добавлений и 0 удалений

68
.github/workflows/move-ready-for-review-prs.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,68 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
name: Move PR To Initial Review
on:
issue_comment:
types: [created]
branch:
- main
jobs:
move-pr-to-initial-review:
if: >
github.event.issue.pull_request
&& github.event.comment.user.login == github.event.issue.user.login
&& contains(github.event.comment.body, '/pr review')
runs-on: ubuntu-latest
steps:
- name: Move To Initial Review
uses: actions/github-script@v6
with:
script: |
// Find "Code Reviews" project manually by name matching
// This avoids hardcoding the project ID
const projects = await github.paginate(github.rest.projects.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
});
const code_reviews = projects.find(project => project.name === 'Code Reviews');
if (!code_reviews) {
console.error("'Code Reviews' project not found!");
return;
}
// Find "Initial Review" column manually by name matching
// This assumes the card is in "Work In Progress" column
// This avoids hardcoding the column ID and card ID
const columns = await github.paginate(github.rest.projects.listColumns, {
project_id: code_reviews.id,
});
const work_in_progress = columns.find(column => column.name === 'Work In Progress');
if (!work_in_progress) {
console.error("'Work In Progress' column not found!");
return;
}
const initial_review = columns.find(column => column.name === 'Initial Review');
if (!initial_review) {
console.error("'Initial Review' column not found!");
return;
}
const pr_card = await github.paginate(github.rest.projects.listCards, {
column_id: work_in_progress.id,
}).then(cards => cards.find(card => card.content_url === context.payload.issue.url));
if (!pr_card) {
console.error("Corresponding card for PR not found!");
return;
}
github.rest.projects.moveCard({
card_id: pr_card.id,
position: 'bottom',
column_id: initial_review.id,
}).catch(error => {
console.error(`Error occurred while moving card to 'Initial Review': ${error}`);
});

73
.github/workflows/move-work-in-progress-prs.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,73 @@
# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
name: Move PR To Work In Progress
on:
issue_comment:
types: [created]
branch:
- main
jobs:
move-pr-to-wip:
if: >
github.event.issue.pull_request
&& github.event.comment.user.login == github.event.issue.user.login
&& contains(github.event.comment.body, '/pr wip')
runs-on: ubuntu-latest
steps:
- name: Move To Work In Progress
uses: actions/github-script@v6
with:
script: |
// Find "Code Reviews" project manually by name matching
// This avoids hardcoding the project ID
const projects = await github.paginate(github.rest.projects.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
});
const code_reviews = projects.find(project => project.name === 'Code Reviews');
if (!code_reviews) {
console.error("'Code Reviews' project not found!");
return;
}
// Find "Work In Progress" column manually by name matching
// Also find the card of the PR in either "Initial Review" or "Final Review"
// This avoids hardcoding the column ID and card ID
const columns = await github.paginate(github.rest.projects.listColumns, {
project_id: code_reviews.id,
});
const work_in_progress = columns.find(column => column.name === 'Work In Progress');
if (!work_in_progress) {
console.error("'Work In Progress' column not found!");
return;
}
const move_card_in_column = async (column) => {
const cards = await github.paginate(github.rest.projects.listCards, {
column_id: column.id,
});
const pr_card = cards.find(card => card.content_url === context.payload.issue.url);
if (!pr_card) {
return; // the PR card is not in this column
}
await github.rest.projects.moveCard({
card_id: pr_card.id,
position: 'bottom',
column_id: work_in_progress.id,
});
};
columns.forEach(column => {
if (column.name !== 'Initial Review' && column.name !== 'Final Review') {
return; // no reason to search through other columns and avoids unnecessary API calls
}
move_card_in_column(column).catch(error => {
console.error(`Error occurred while moving card to 'Work In Progress': ${error}`);
});
});