Skip to content

chore(deps): bump actions/cache from 3 to 4 #3426

chore(deps): bump actions/cache from 3 to 4

chore(deps): bump actions/cache from 3 to 4 #3426

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/[email protected]
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,
});