Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions .github/workflows/move-ready-for-review-prs.yml
Original file line number Diff line number Diff line change
@@ -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 changes: 73 additions & 0 deletions .github/workflows/move-work-in-progress-prs.yml
Original file line number Diff line number Diff line change
@@ -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}`);
});
});