chore(deps): bump mikefarah/yq from 4.40.5 to 4.41.1 #3434
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: Trigger tests by `/run-ci` comment | |
on: | |
issue_comment: | |
types: [created] | |
pull_request: | |
types: [opened, synchronize] | |
jobs: | |
run-ci: | |
name: run-ci-from-pr-comment | |
# PullRequestEvent: https://docs.github.com/en/rest/overview/github-event-types?apiVersion=2022-11-28#pullrequestevent | |
if: github.event.issue.pull_request && startsWith(github.event.comment.body, '/run-ci') | |
runs-on: ubuntu-22.04 | |
# When the permissions key is used, all unspecified permissions are set to no access, with the exception of the metadata scope, which always gets read access. | |
# See https://docs.github.com/en/actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token | |
permissions: | |
contents: read | |
actions: write | |
pull-requests: write | |
steps: | |
- name: Query author repository permissions | |
uses: octokit/request-action@v2.x | |
id: user_permission | |
with: | |
route: GET /repos/${{ github.repository }}/collaborators/${{ github.event.sender.login }}/permission | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# The `actions:write` permission is required in this step. | |
- name: Dispatch CIs if the user does have correct permission | |
if: contains('admin write', fromJson(steps.user_permission.outputs.data).permission) | |
id: dispatch | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const dispatch = { | |
comment_body: `${{ github.event.comment.body }}`, | |
repo: context.repo, | |
issue: context.issue, | |
}; | |
const jsonDispatch = JSON.stringify(dispatch) | |
.replace(/\\b/g, "\\\\b") | |
.replace(/\\f/g, "\\\\f") | |
.replace(/\\n/g, "\\\\n") | |
.replace(/\\r/g, "\\\\r") | |
.replace(/\\t/g, "\\\\t"); | |
// get pr comments body,not issue comments body | |
const pr = await github.rest.pulls.get({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
pull_number: context.issue.number, | |
}); | |
let check_list = ` | |
\### CI test list: | |
`; | |
const dispatchWorkflow = async (workflowId) => { | |
const resp = await github.rest.actions.createWorkflowDispatch({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
workflow_id: workflowId, | |
ref: `main`, | |
inputs: { | |
dispatch: jsonDispatch, | |
} | |
}); | |
core.info(`${JSON.stringify(resp, null, 2)}`); | |
check_list = `${check_list}\n - ${workflowId}`; | |
}; | |
// check if OpenZeppelin tests is required | |
const OCT_match = pr.data.body.includes("[x] OpenZeppelin tests"); | |
if (OCT_match) { | |
const workflowIds = [ | |
"openzeppelin_test_1_5_and_12_15.yml", | |
"openzeppelin_test_6_10.yml", | |
"openzeppelin_test_11.yml", | |
"openzeppelin_test_16_19.yml", | |
]; | |
await Promise.all(workflowIds.map(dispatchWorkflow)); | |
} | |
// check v3 Core Tests exist or not | |
const v3_match = pr.data.body.includes("[x] v3 Core Tests"); | |
if (v3_match) { | |
await dispatchWorkflow("v3_core_test.yml"); | |
} | |
// check Unit Tests exist or not | |
const web3_match = pr.data.body.includes("[x] Web3 Compatible Tests"); | |
if (web3_match) { | |
await dispatchWorkflow("web3_compatible.yml"); | |
}; | |
return check_list | |
- name: Escape check list | |
id: escape_multiple_lines_test_inputs | |
run: | | |
echo ${{ steps.dispatch.outputs.result}} | |
inputs=${{ steps.dispatch.outputs.result}} | |
echo "result=$inputs" >> $GITHUB_OUTPUT | |
# https://docs.github.com/en/rest/issues/comments?apiVersion=2022-11-28#create-an-issue-comment | |
# The `pull-requests: write` permission is required in the step. | |
- name: Post a coment about component information to PR | |
if: contains('admin write', fromJson(steps.user_permission.outputs.data).permission) | |
id: post_workflow_run_comment | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
console.log(`${{ steps.escape_multiple_lines_test_inputs.outputs.result }}`); | |
const dispatch = { | |
comment_body: `${{ github.event.comment.body }}`, | |
repo: context.repo, | |
issue: context.issue, | |
}; | |
const pr = ( | |
await github.rest.pulls.get({ | |
owner: dispatch.repo.owner, | |
repo: dispatch.repo.repo, | |
pull_number: dispatch.issue.number, | |
}) | |
).data.head; | |
let integrationTestInfo = ` | |
\### CI tests run on commit: | |
- commit id: https://github.com/${{ github.repository }}/commit/${pr.sha}`; | |
integrationTestInfo = `${integrationTestInfo}`; | |
integrationTestInfo = `${integrationTestInfo}\n ${{ steps.escape_multiple_lines_test_inputs.outputs.result }}\n ### Please check ci test results later.`; | |
console.log(integrationTestInfo); | |
const comment = await github.rest.issues.createComment({ | |
issue_number: dispatch.issue.number, | |
owner: dispatch.repo.owner, | |
repo: dispatch.repo.repo, | |
body: integrationTestInfo, | |
}); |