Pin dependencies #368
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Check PR | |
# Controls when the workflow will run | |
on: | |
pull_request: | |
branches: | |
- main | |
types: [ opened, synchronize, labeled, unlabeled, reopened, edited ] | |
permissions: | |
pull-requests: write | |
# A workflow run is made up of one or more jobs that can run sequentially or in parallel | |
jobs: | |
auto_assign: | |
name: Auto Assign | |
# The type of runner that the job will run on | |
runs-on: ubuntu-latest | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
- name: Assign Me | |
# You may pin to the exact commit or the version. | |
uses: kentaro-m/auto-assign-action@746a3a558fdd0e061f612ec9f8ff1b8a19c1a115 # v1.2.1 | |
with: | |
configuration-path: '.github/auto_assign.yml' | |
check_labels: | |
name: Check Required Labels | |
# The type of runner that the job will run on | |
runs-on: ubuntu-latest | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
- name: Verify PR Labels | |
if: ${{ !contains(github.event.pull_request.labels.*.name, 'major') && !contains(github.event.pull_request.labels.*.name, 'minor') && !contains(github.event.pull_request.labels.*.name, 'patch') && !contains(github.event.pull_request.labels.*.name, 'skip') }} | |
uses: actions/github-script@d556feaca394842dc55e4734bf3bb9f685482fa0 # v6.3.3 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
var comments = await github.rest.issues.listComments({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo | |
}); | |
for (const comment of comments.data) { | |
if (comment.body.includes('This pull request does not contain a valid label')){ | |
github.rest.issues.deleteComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
comment_id: comment.id | |
}) | |
} | |
} | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: 'This pull request does not contain a valid label. Please add one of the following labels: `[patch, minor, major, skip]`' | |
}) | |
core.setFailed('Missing required labels') | |
check_format: | |
name: Check Format | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 | |
- name: Formatting | |
id: format | |
continue-on-error: true | |
uses: axel-op/googlejavaformat-action@v3 | |
with: | |
args: "--set-exit-if-changed" | |
- uses: actions/github-script@d556feaca394842dc55e4734bf3bb9f685482fa0 # v6.3.3 | |
if: steps.format.outcome != 'success' | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
console.log(context); | |
var comments = await github.rest.issues.listComments({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo | |
}); | |
for (const comment of comments.data) { | |
console.log(comment); | |
if (comment.body.includes('Comment this PR with')){ | |
github.rest.issues.deleteComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
comment_id: comment.id | |
}) | |
} | |
} | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: 'Comment this PR with *update_code* to update `openapi.json` and format the code. Consider to use pre-commit to format the code.' | |
}) | |
core.setFailed('Format your code.') | |
check_size: | |
runs-on: ubuntu-latest | |
name: Check Size | |
steps: | |
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3 | |
with: | |
fetch-depth: 0 | |
- name: Check Size | |
uses: actions/github-script@d556feaca394842dc55e4734bf3bb9f685482fa0 # v6.3.3 | |
env: | |
IGNORED_FILES: openapi.json, openapi-node.json | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const additions = context.payload.pull_request.additions || 0 | |
const deletions = context.payload.pull_request.deletions || 0 | |
var changes = additions + deletions | |
console.log('additions: '+additions+' + deletions: '+deletions+ ' = total changes: ' + changes); | |
const { IGNORED_FILES } = process.env | |
const ignored_files = IGNORED_FILES.trim().split(',').filter(word => word.length > 0); | |
if (ignored_files.length > 0){ | |
var ignored = 0 | |
const execSync = require('child_process').execSync; | |
for (const file of IGNORED_FILES.trim().split(',')) { | |
const ignored_additions_str = execSync('git --no-pager diff --numstat origin/main..origin/${{ github.head_ref}} | grep ' + file + ' | cut -f 1', { encoding: 'utf-8' }) | |
const ignored_deletions_str = execSync('git --no-pager diff --numstat origin/main..origin/${{ github.head_ref}} | grep ' + file + ' | cut -f 2', { encoding: 'utf-8' }) | |
const ignored_additions = ignored_additions_str.split('\n').map(elem=> parseInt(elem || 0)).reduce( | |
(accumulator, currentValue) => accumulator + currentValue, | |
0); | |
const ignored_deletions = ignored_deletions_str.split('\n').map(elem=> parseInt(elem || 0)).reduce( | |
(accumulator, currentValue) => accumulator + currentValue, | |
0); | |
ignored += ignored_additions + ignored_deletions; | |
} | |
changes -= ignored | |
console.log('ignored lines: ' + ignored + ' , consider changes: ' + changes); | |
} | |
if (changes < 200){ | |
github.rest.issues.addLabels({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
labels: ['size/small'] | |
}) | |
var labels = await github.rest.issues.listLabelsOnIssue({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo | |
}); | |
if (labels.data.find(label => label.name == 'size/large')){ | |
github.rest.issues.removeLabel({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
name: 'size/large' | |
}) | |
} | |
} | |
if (changes > 400){ | |
github.rest.issues.addLabels({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
labels: ['size/large'] | |
}) | |
var comments = await github.rest.issues.listComments({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo | |
}); | |
for (const comment of comments.data) { | |
if (comment.body.includes('This PR exceeds the recommended size')){ | |
github.rest.issues.deleteComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
comment_id: comment.id | |
}) | |
} | |
} | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: 'This PR exceeds the recommended size of 400 lines. Please make sure you are NOT addressing multiple issues with one PR. _Note this PR might be rejected due to its size._' | |
}) | |
var labels = await github.rest.issues.listLabelsOnIssue({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo | |
}); | |
if (labels.data.find(label => label.name == 'size/small')){ | |
github.rest.issues.removeLabel({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
name: 'size/small' | |
}) | |
} | |
} |