mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
ci: use a separate script for request review workflow
This commit is contained in:
parent
5d6bef0f6e
commit
29eabbcd07
19
.github/workflows/labeler.yml
vendored
19
.github/workflows/labeler.yml
vendored
@ -31,14 +31,17 @@ jobs:
|
|||||||
- name: "Extract commit scope and add as label"
|
- name: "Extract commit scope and add as label"
|
||||||
run: gh pr edit "$PR_NUMBER" --add-label "$(echo "$PR_TITLE" | sed -E 's|[[:alpha:]]+\((.+)\)!?:.*|\1|')" || true
|
run: gh pr edit "$PR_NUMBER" --add-label "$(echo "$PR_TITLE" | sed -E 's|[[:alpha:]]+\((.+)\)!?:.*|\1|')" || true
|
||||||
|
|
||||||
upload-pr-number:
|
request-reviewer:
|
||||||
|
if: github.event.pull_request.state == 'open' && github.event.pull_request.draft == false
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
needs: ["triage", "type-scope"]
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Save PR number
|
- run: wget https://raw.githubusercontent.com/neovim/neovim/master/ci/reviews.js
|
||||||
run: |
|
- name: 'Request reviewers'
|
||||||
mkdir -p pr
|
uses: actions/github-script@v6
|
||||||
echo ${{ github.event.number }} > pr/pr_number
|
|
||||||
- uses: actions/upload-artifact@v2
|
|
||||||
with:
|
with:
|
||||||
name: pr_number
|
script: |
|
||||||
path: pr/
|
const script = require('./reviews.js')
|
||||||
|
await script({github, context})
|
||||||
|
118
.github/workflows/reviews.yml
vendored
118
.github/workflows/reviews.yml
vendored
@ -2,9 +2,6 @@ name: "Request reviews"
|
|||||||
on:
|
on:
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [labeled, ready_for_review]
|
types: [labeled, ready_for_review]
|
||||||
workflow_run:
|
|
||||||
workflows: [Pull Request Labeler]
|
|
||||||
types: [completed]
|
|
||||||
jobs:
|
jobs:
|
||||||
request-reviewer:
|
request-reviewer:
|
||||||
if: github.event.pull_request.state == 'open' && github.event.pull_request.draft == false
|
if: github.event.pull_request.state == 'open' && github.event.pull_request.draft == false
|
||||||
@ -12,119 +9,10 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- if: github.event_name == 'workflow_run'
|
- run: wget https://raw.githubusercontent.com/neovim/neovim/master/ci/reviews.js
|
||||||
name: 'Download artifact with PR number'
|
|
||||||
uses: actions/github-script@v6
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
run_id: context.payload.workflow_run.id,
|
|
||||||
});
|
|
||||||
let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
|
|
||||||
return artifact.name == "pr_number"
|
|
||||||
})[0];
|
|
||||||
let download = await github.rest.actions.downloadArtifact({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
artifact_id: matchArtifact.id,
|
|
||||||
archive_format: 'zip',
|
|
||||||
});
|
|
||||||
let fs = require('fs');
|
|
||||||
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/pr_number.zip`, Buffer.from(download.data));
|
|
||||||
|
|
||||||
- if: github.event_name == 'workflow_run'
|
|
||||||
name: 'Unzip artifact'
|
|
||||||
run: unzip pr_number.zip
|
|
||||||
|
|
||||||
- name: 'Request reviewers'
|
- name: 'Request reviewers'
|
||||||
uses: actions/github-script@v6
|
uses: actions/github-script@v6
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
// The number of the pull request that triggered this run. If label
|
const script = require('./reviews.js')
|
||||||
// was added manually by a person the number will be stored in current
|
await script({github, context})
|
||||||
// context, otherwise the number will be stored in a text file that
|
|
||||||
// was stored as an artifact from previous workflow.
|
|
||||||
|
|
||||||
const fs = require('fs')
|
|
||||||
const pr_number = context.issue.number || Number(fs.readFileSync('./pr_number'))
|
|
||||||
|
|
||||||
const pr_data = await github.rest.pulls.get({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
pull_number: pr_number
|
|
||||||
})
|
|
||||||
const labels = pr_data.data.labels.map(e => e.name)
|
|
||||||
|
|
||||||
const reviewers = new Set()
|
|
||||||
if (labels.includes('api')) {
|
|
||||||
reviewers.add("bfredl")
|
|
||||||
reviewers.add("gpanders")
|
|
||||||
reviewers.add("muniter")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('ci')) {
|
|
||||||
reviewers.add("jamessan")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('diagnostic')) {
|
|
||||||
reviewers.add("gpanders")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('distribution')) {
|
|
||||||
reviewers.add("jamessan")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('documentation')) {
|
|
||||||
reviewers.add("clason")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('extmarks')) {
|
|
||||||
reviewers.add("bfredl")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('filetype')) {
|
|
||||||
reviewers.add("clason")
|
|
||||||
reviewers.add("gpanders")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('gui')) {
|
|
||||||
reviewers.add("glacambre")
|
|
||||||
reviewers.add("smolck")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('lsp')) {
|
|
||||||
reviewers.add("mfussenegger")
|
|
||||||
reviewers.add("mjlbach")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('treesitter')) {
|
|
||||||
reviewers.add("bfredl")
|
|
||||||
reviewers.add("vigoux")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('typo')) {
|
|
||||||
reviewers.add("dundargoc")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('ui')) {
|
|
||||||
reviewers.add("bfredl")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (labels.includes('vim-patch')) {
|
|
||||||
reviewers.add("janlazo")
|
|
||||||
reviewers.add("seandewar")
|
|
||||||
reviewers.add("zeertzjq")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove person that opened the PR since they can't review themselves
|
|
||||||
const pr_opener = pr_data.data.user.login
|
|
||||||
reviewers.delete(pr_opener)
|
|
||||||
|
|
||||||
github.rest.pulls.requestReviewers({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
pull_number: pr_number,
|
|
||||||
reviewers: Array.from(reviewers)
|
|
||||||
});
|
|
||||||
|
80
ci/reviews.js
Normal file
80
ci/reviews.js
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
module.exports = async ({github, context}) => {
|
||||||
|
const pr_data = await github.rest.pulls.get({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
pull_number: context.issue.number
|
||||||
|
})
|
||||||
|
const labels = pr_data.data.labels.map(e => e.name)
|
||||||
|
|
||||||
|
const reviewers = new Set()
|
||||||
|
if (labels.includes('api')) {
|
||||||
|
reviewers.add("bfredl")
|
||||||
|
reviewers.add("gpanders")
|
||||||
|
reviewers.add("muniter")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('ci')) {
|
||||||
|
reviewers.add("jamessan")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('diagnostic')) {
|
||||||
|
reviewers.add("gpanders")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('distribution')) {
|
||||||
|
reviewers.add("jamessan")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('documentation')) {
|
||||||
|
reviewers.add("clason")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('extmarks')) {
|
||||||
|
reviewers.add("bfredl")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('filetype')) {
|
||||||
|
reviewers.add("clason")
|
||||||
|
reviewers.add("gpanders")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('gui')) {
|
||||||
|
reviewers.add("glacambre")
|
||||||
|
reviewers.add("smolck")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('lsp')) {
|
||||||
|
reviewers.add("mfussenegger")
|
||||||
|
reviewers.add("mjlbach")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('treesitter')) {
|
||||||
|
reviewers.add("bfredl")
|
||||||
|
reviewers.add("vigoux")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('typo')) {
|
||||||
|
reviewers.add("dundargoc")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('ui')) {
|
||||||
|
reviewers.add("bfredl")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labels.includes('vim-patch')) {
|
||||||
|
reviewers.add("janlazo")
|
||||||
|
reviewers.add("seandewar")
|
||||||
|
reviewers.add("zeertzjq")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove person that opened the PR since they can't review themselves
|
||||||
|
const pr_opener = pr_data.data.user.login
|
||||||
|
reviewers.delete(pr_opener)
|
||||||
|
|
||||||
|
github.rest.pulls.requestReviewers({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
pull_number: context.issue.number,
|
||||||
|
reviewers: Array.from(reviewers)
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user