149 lines
5.1 KiB
YAML
149 lines
5.1 KiB
YAML
name: PRSubmitActions
|
|
run-name: "PRSubmitActions: Test ${{github.event.action}}"
|
|
on:
|
|
workflow_run:
|
|
workflows: [PRSubmitTests]
|
|
types:
|
|
- requested
|
|
- completed
|
|
env:
|
|
ACTION: ${{ github.event.action }}
|
|
CONCLUSION: ${{ github.event.workflow_run.conclusion }}
|
|
REPO: ${{ github.repository }}
|
|
|
|
jobs:
|
|
PRSubmitActions:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Get PR Number
|
|
id: getpr
|
|
uses: actions/github-script@v7
|
|
with:
|
|
retries: 5
|
|
script: |
|
|
let search = `repo:${context.repo.owner}/${context.repo.repo} ${context.payload.workflow_run.head_sha}`;
|
|
let prs = await github.rest.search.issuesAndPullRequests({
|
|
q: search,
|
|
});
|
|
if (prs.data.total_count == 0) {
|
|
core.setFailed(`Unable to get PR for ${context.payload.workflow_run.head_sha}`);
|
|
return;
|
|
}
|
|
let pr_number = prs.data.items[0].number;
|
|
core.setOutput('pr_number', pr_number);
|
|
return;
|
|
|
|
- name: Set Label
|
|
id: setlabel
|
|
uses: actions/github-script@v7
|
|
env:
|
|
PR_NUMBER: ${{ steps.getpr.outputs.PR_NUMBER }}
|
|
LABEL_TIP: ${{ vars.PR_SUBMIT_TESTING_IN_PROGRESS }}
|
|
LABEL_PASS: ${{ vars.PR_SUBMIT_TESTS_PASSED }}
|
|
LABEL_FAIL: ${{ vars.PR_SUBMIT_TESTS_FAILED }}
|
|
with:
|
|
retries: 5
|
|
script: |
|
|
let label;
|
|
if (process.env.ACTION === 'requested') {
|
|
label = process.env.LABEL_TIP;
|
|
} else {
|
|
if ( process.env.CONCLUSION === 'success' ) {
|
|
label = process.env.LABEL_PASS;
|
|
} else {
|
|
label = process.env.LABEL_FAIL;
|
|
}
|
|
}
|
|
core.info(`Setting label ${label}`);
|
|
github.rest.issues.setLabels({
|
|
issue_number: process.env.PR_NUMBER,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
labels: [ label ]
|
|
});
|
|
return;
|
|
|
|
- name: Get cherry-pick branches
|
|
if: github.event.action == 'completed'
|
|
id: getbranches
|
|
uses: asterisk/asterisk-ci-actions/GetCherryPickBranchesFromPR@main
|
|
with:
|
|
repo: ${{env.REPO}}
|
|
pr_number: ${{steps.getpr.outputs.PR_NUMBER}}
|
|
cherry_pick_regex: ${{vars.CHERRY_PICK_REGEX}}
|
|
github_token: ${{secrets.GITHUB_TOKEN}}
|
|
|
|
- name: Add cherry-pick reminder
|
|
if: github.event.action == 'completed'
|
|
uses: actions/github-script@v7
|
|
env:
|
|
PR_NUMBER: ${{steps.getpr.outputs.PR_NUMBER}}
|
|
CHERRY_PICK_REMINDER: ${{vars.CHERRY_PICK_REMINDER}}
|
|
BRANCHES_OUTPUT: ${{toJSON(steps.getbranches.outputs)}}
|
|
BRANCH_COUNT: ${{steps.getbranches.outputs.branch_count}}
|
|
FORCED_NONE: ${{steps.getbranches.outputs.forced_none}}
|
|
with:
|
|
retries: 5
|
|
script: |
|
|
if (process.env.FORCED_NONE === 'true' ||
|
|
process.env.BRANCH_COUNT > 0) {
|
|
core.info("No cherry-pick reminder needed.");
|
|
return;
|
|
}
|
|
let comments = await github.rest.issues.listComments({
|
|
issue_number: process.env.PR_NUMBER,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
});
|
|
let found = false;
|
|
for (const c of comments.data) {
|
|
if (c.body.startsWith("<!--CPR-->")) {
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
if (found) {
|
|
core.info("Cherry-pick reminder already exists.");
|
|
return;
|
|
}
|
|
core.info("Adding cherry-pick reminder.");
|
|
await github.rest.issues.createComment({
|
|
issue_number: process.env.PR_NUMBER,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
body: process.env.CHERRY_PICK_REMINDER
|
|
})
|
|
return;
|
|
|
|
- name: Add reviewers
|
|
if: github.event.action == 'completed'
|
|
uses: actions/github-script@v7
|
|
env:
|
|
PR_NUMBER: ${{steps.getpr.outputs.PR_NUMBER}}
|
|
REVIEWERS: ${{vars.PR_REVIEWERS}}
|
|
with:
|
|
retries: 5
|
|
script: |
|
|
let rs = JSON.parse(process.env.REVIEWERS);
|
|
let users = [];
|
|
let teams = [];
|
|
for (const r of rs) {
|
|
if (r.indexOf("/") > 0) {
|
|
teams.push(r.split('/')[1]);
|
|
} else {
|
|
users.push(r);
|
|
}
|
|
}
|
|
if (teams.length > 0 || users.length > 0) {
|
|
core.info(`Adding user reviewers ${users}`);
|
|
core.info(`Adding team reviewers ${teams}`);
|
|
await github.rest.pulls.requestReviewers({
|
|
pull_number: process.env.PR_NUMBER,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
reviewers: users,
|
|
team_reviewers: teams
|
|
});
|
|
}
|
|
return;
|