mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	ci: use a separate script for request review workflow
This commit is contained in:
		
							
								
								
									
										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)
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user