[安卓原生]线上版本出现大量的 java 的 NullPointer异常引起的闪退问题. #23171
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: run test cases | |
on: | |
pull_request: | |
issue_comment: | |
types: [created, edited] | |
permissions: read-all | |
# github.head_ref is only defined on pull_request events | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.actor }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
env: | |
PR_NUMBER: ${{ github.event.issue.number || github.event.pull_request.number }} | |
jobs: | |
Win-RunTestCases: | |
if: | | |
contains(github.event.pull_request.body, '[X] needs automatic test cases check') || | |
contains(github.event.comment.body, '@cocos-robot run test cases') | |
runs-on: self-hosted-win | |
steps: | |
- name: Get PR Details | |
id: pr_details | |
uses: octokit/request-action@v2.x | |
with: | |
route: GET /repos/cocos/cocos-engine/pulls/${{ env.PR_NUMBER }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Parse Pull Request | |
id: parse_pr | |
env: | |
details: ${{ steps.pr_details.outputs.data }} | |
last_update_date: ${{ github.event.comment.created_at || github.event.pull_request.updated_at }} | |
shell: bash | |
run: | | |
set -x | |
whoami | |
pull_request=$(echo "$details" | jq -r '.') | |
pr_html_url=$(echo "$pull_request" | jq -r '.html_url') | |
pr_author=$(echo "$pull_request" | jq -r '.user.login') | |
pr_head_ref=$(echo "$pull_request" | jq -r '.head.ref') | |
pr_head_sha=$(echo "$pull_request" | jq -r '.head.sha') | |
pr_base_ref=$(echo "$pull_request" | jq -r '.base.ref') | |
pr_base_sha=$(echo "$pull_request" | jq -r '.base.sha') | |
pr_updated_at=$(echo "$pull_request" | jq -r '.updated_at') | |
# Print out the timestamps | |
echo "PR Updated At Timestamp: $pr_updated_at" | |
echo "Last Update Date Timestamp: $last_update_date" | |
# Check if the PR has new updates | |
if [[ $(date -d "$last_update_date" +%s) -gt $(date -d "$pr_updated_at" +%s) ]]; then | |
# If there is an update, exit the script | |
exit 101 | |
fi | |
# If there are no new updates, write the PR details to the output file | |
echo "pr_html_url=$pr_html_url" >> $GITHUB_OUTPUT | |
echo "pr_author=$pr_author" >> $GITHUB_OUTPUT | |
echo "pr_head_ref=$pr_head_ref" >> $GITHUB_OUTPUT | |
echo "pr_head_sha=$pr_head_sha" >> $GITHUB_OUTPUT | |
echo "pr_base_ref=$pr_base_ref" >> $GITHUB_OUTPUT | |
echo "pr_base_sha=$pr_base_sha" >> $GITHUB_OUTPUT | |
- name: Checkout engine | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ steps.parse_pr.outputs.pr_base_ref }} | |
- name: Checkout rebase | |
env: | |
BASE: ${{ steps.parse_pr.outputs.pr_base_ref }} | |
HEAD: ${{ steps.parse_pr.outputs.pr_head_sha }} | |
shell: bash | |
run: | | |
set -x | |
echo "before whoami" | |
whoami | |
git fetch origin | |
git reset --hard | |
echo "Branch name required: $BASE" | |
git checkout origin/$BASE | |
git pull origin $BASE --allow-unrelated-histories | |
git branch -D $BASE | |
git branch $BASE | |
echo "PR_NUMBER: $PR_NUMBER" | |
git branch -D pull-$PR_NUMBER || true | |
git fetch origin $HEAD:pull-$PR_NUMBER | |
git merge --ff -s recursive --no-verify -m "PR Test" origin/$BASE pull-$PR_NUMBER | |
- name: Download external libraries | |
shell: bash | |
run: | | |
set -x | |
EXT_VERSION=`node ./.github/workflows/get-native-external-version.js` | |
PRECLONE_EXTERNAL="E:/preclone/cocos-engine-external" | |
if [ ! -d $PRECLONE_EXTERNAL ]; then | |
mkdir -p $PRECLONE_EXTERNAL | |
git clone https://github.com/cocos/cocos-engine-external $PRECLONE_EXTERNAL | |
else | |
echo "directory $PRECLONE_EXTERNAL is ready" | |
fi | |
if [ ! -d native/external ]; then | |
mkdir native/external | |
fi | |
git -C $PRECLONE_EXTERNAL reset --hard | |
git -C $PRECLONE_EXTERNAL fetch --all --prune | |
git -C $PRECLONE_EXTERNAL archive --format=tar $EXT_VERSION | tar -C native/external -xf - | |
- name: Generate bindings | |
run: | | |
cd ./native/tools/swig-config | |
echo "Create auto-generated jsbinding glue codes." | |
node genbindings.js && | |
git status | |
- name: npm install | |
run: | | |
npm -v | |
npm install --registry https://registry.npmmirror.com | |
- name: Checkout test-projects | |
shell: bash | |
run: | | |
set -x | |
TEST_PROJECTS_EXTERNAL="E:/pr-test/cocos-test-projects" | |
CCTEST_PLUGINS="E:/pr-test/TestPlugin" | |
if [ ! -d $TEST_PROJECTS_EXTERNAL ]; then | |
mkdir -p $TEST_PROJECTS_EXTERNAL | |
git clone https://github.com/cocos/cocos-test-projects.git $TEST_PROJECTS_EXTERNAL | |
else | |
echo "directory $TEST_PROJECTS_EXTERNAL is ready" | |
fi | |
git -C $TEST_PROJECTS_EXTERNAL reset --hard | |
git -C $TEST_PROJECTS_EXTERNAL fetch --all --prune | |
git -C $TEST_PROJECTS_EXTERNAL checkout origin/${{ steps.parse_pr.outputs.pr_base_ref }} | |
git -C $TEST_PROJECTS_EXTERNAL pull origin ${{ steps.parse_pr.outputs.pr_base_ref }} --allow-unrelated-histories | |
rm -rf $TEST_PROJECTS_EXTERNAL/extensions/automation-framework | |
7z x -y $CCTEST_PLUGINS/*.zip -o$TEST_PROJECTS_EXTERNAL/extensions/automation-framework | |
- name: Run test cases | |
timeout-minutes: 100 | |
id: run_test_cases | |
run: | | |
scheduler cicd -p PR-TEST -v ${{ steps.parse_pr.outputs.pr_base_ref }} -g PR-TEST -i "1,3,5" -d E:\cctest\devices.json -r https://cctest.cocos.org | |
$JOBID = Get-Content C:\Users\Administrator\AppData\Roaming\npm\node_modules\@cctest\scheduler\logs\PR-TEST\nowJobId.log | |
cd .. | |
pwd | |
python3 -u ./python/main.py --target=job_editor --jobid=$JOBID | |
- name: Write comment body and issue number to file | |
uses: actions/github-script@v7 | |
env: | |
PR_AUTHOR: ${{ steps.parse_pr.outputs.pr_author }} | |
EDITOR_VERSION: ${{ steps.run_test_cases.outputs.editor }} | |
TASK_STATUS: ${{ steps.run_test_cases.outputs.status }} | |
TASK_REPORT: ${{ steps.run_test_cases.outputs.report }} | |
JOB_ID: ${{ steps.run_test_cases.outputs.jobid }} | |
GITHUB_RUN_ID: ${{ github.run_id }} | |
with: | |
script: | | |
const fs = require('fs'); | |
fs.writeFileSync('commentwin.txt', `@${process.env.PR_AUTHOR}, Please check the result of \`run test cases\`: | |
- Test Platform: PR-Test | |
- Editor Version: ${process.env.EDITOR_VERSION} | |
- Task Result: ${process.env.TASK_STATUS} | |
- Task URL: https://cctest.cocos.org/#/reportview/PR-TEST/${process.env.JOB_ID}/-1 | |
- GitHub Action: https://github.com/cocos/cocos-engine/actions/runs/${process.env.GITHUB_RUN_ID} | |
## Task Details | |
${process.env.TASK_REPORT}`); | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: commentwin.txt | |
path: | | |
commentwin.txt | |
macOS-RunTestCases: | |
if: | | |
contains(github.event.pull_request.body, '[X] needs automatic test cases check') || | |
contains(github.event.comment.body, '@cocos-robot run test cases') | |
runs-on: self-hosted-mac | |
steps: | |
- name: Get PR Details | |
id: pr_details | |
uses: octokit/request-action@v2.x | |
with: | |
route: GET /repos/cocos/cocos-engine/pulls/${{ env.PR_NUMBER }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Parse Pull Request | |
id: parse_pr | |
env: | |
details: ${{ steps.pr_details.outputs.data }} | |
last_update_date: ${{ github.event.comment.created_at || github.event.pull_request.updated_at }} | |
run: | | |
set -x | |
pull_request=$(echo "$details" | jq -r '.') | |
pr_html_url=$(echo "$pull_request" | jq -r '.html_url') | |
pr_author=$(echo "$pull_request" | jq -r '.user.login') | |
pr_head_ref=$(echo "$pull_request" | jq -r '.head.ref') | |
pr_head_sha=$(echo "$pull_request" | jq -r '.head.sha') | |
pr_base_ref=$(echo "$pull_request" | jq -r '.base.ref') | |
pr_base_sha=$(echo "$pull_request" | jq -r '.base.sha') | |
pr_updated_at=$(echo "$pull_request" | jq -r '.updated_at') | |
# Print out the timestamps | |
echo "PR Updated At Timestamp: $pr_updated_at" | |
echo "Last Update Date Timestamp: $last_update_date" | |
# Check if the PR has new updates | |
if [[ $(gdate -d "$last_update_date" +%s) -gt $(gdate -d "$pr_updated_at" +%s) ]]; then | |
# If there is an update, exit the script | |
exit 101 | |
fi | |
# If there are no new updates, write the PR details to the output file | |
echo "pr_html_url=$pr_html_url" >> $GITHUB_OUTPUT | |
echo "pr_author=$pr_author" >> $GITHUB_OUTPUT | |
echo "pr_head_ref=$pr_head_ref" >> $GITHUB_OUTPUT | |
echo "pr_head_sha=$pr_head_sha" >> $GITHUB_OUTPUT | |
echo "pr_base_ref=$pr_base_ref" >> $GITHUB_OUTPUT | |
echo "pr_base_sha=$pr_base_sha" >> $GITHUB_OUTPUT | |
- name: Checkout engine | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ steps.parse_pr.outputs.pr_base_ref }} | |
- name: Checkout rebase | |
env: | |
BASE: ${{ steps.parse_pr.outputs.pr_base_ref }} | |
HEAD: ${{ steps.parse_pr.outputs.pr_head_sha }} | |
run: | | |
git fetch origin | |
git reset --hard | |
git checkout origin/$BASE | |
git pull origin $BASE --allow-unrelated-histories | |
git branch -D $BASE | |
git branch $BASE | |
git branch -D pull-$PR_NUMBER || true | |
git fetch origin $HEAD:pull-$PR_NUMBER | |
git merge --ff -s recursive --no-verify -m "PR Test" origin/$BASE pull-$PR_NUMBER | |
- name: Download external libraries | |
shell: bash | |
run: | | |
set -x | |
EXT_VERSION=`node ./.github/workflows/get-native-external-version.js` | |
PRECLONE_EXTERNAL="/Users/admin/Documents/actions-runner/preclone/cocos-engine-external" | |
if [ ! -d $PRECLONE_EXTERNAL ]; then | |
echo "create directory $PRECLONE_EXTERNAL" | |
# remove all sub-folders | |
rm -rf /Users/admin/Documents/actions-runner/preclone | |
mkdir -p $PRECLONE_EXTERNAL | |
git clone https://github.com/cocos/cocos-engine-external $PRECLONE_EXTERNAL | |
else | |
echo "directory $PRECLONE_EXTERNAL is ready" | |
fi | |
if [ ! -d native/external ]; then | |
mkdir native/external | |
fi | |
git -C $PRECLONE_EXTERNAL reset --hard | |
git -C $PRECLONE_EXTERNAL fetch --all --prune | |
git -C $PRECLONE_EXTERNAL archive --format=tar $EXT_VERSION | tar -C native/external -xf - | |
- name: Generate bindings | |
run: | | |
cd ./native/tools/swig-config | |
echo "Create auto-generated jsbinding glue codes." | |
node genbindings.js && | |
git status | |
- name: npm install | |
run: | | |
npm -v | |
npm install --registry https://registry.npmmirror.com | |
- name: Checkout test-projects | |
shell: bash | |
run: | | |
set -x | |
TEST_PROJECTS_EXTERNAL="../../cocos-test-projects" | |
CCTEST_PLUGINS="../../TestPlugin" | |
if [ ! -d $TEST_PROJECTS_EXTERNAL ]; then | |
mkdir -p $TEST_PROJECTS_EXTERNAL | |
git clone https://github.com/cocos/cocos-test-projects.git $TEST_PROJECTS_EXTERNAL | |
else | |
echo "directory $TEST_PROJECTS_EXTERNAL is ready" | |
fi | |
git -C $TEST_PROJECTS_EXTERNAL reset --hard | |
git -C $TEST_PROJECTS_EXTERNAL fetch --all --prune | |
git -C $TEST_PROJECTS_EXTERNAL checkout origin/${{ steps.parse_pr.outputs.pr_base_ref }} | |
git -C $TEST_PROJECTS_EXTERNAL pull origin ${{ steps.parse_pr.outputs.pr_base_ref }} --allow-unrelated-histories | |
rm -rf $TEST_PROJECTS_EXTERNAL/extensions/automation-framework | |
unzip -oq $CCTEST_PLUGINS/*.zip -d $TEST_PROJECTS_EXTERNAL/extensions/automation-framework | |
- name: Run test cases | |
timeout-minutes: 100 | |
id: run_test_cases | |
run: | | |
scheduler cicd -p PR-TEST -v ${{ steps.parse_pr.outputs.pr_base_ref }} -g PR-TEST -i 0,2,4 -d /Users/admin/Documents/cctest/devices.json -r https://cctest.cocos.org | |
JOBID=`cat /usr/local/lib/node_modules/@cctest/scheduler/logs/PR-TEST/nowJobId.log` | |
cd .. | |
python3 -u ./python/main.py --target=job_editor --jobid=$JOBID | |
- name: Write comment body and issue number to file | |
uses: actions/github-script@v7 | |
env: | |
PR_AUTHOR: ${{ steps.parse_pr.outputs.pr_author }} | |
EDITOR_VERSION: ${{ steps.run_test_cases.outputs.editor }} | |
TASK_STATUS: ${{ steps.run_test_cases.outputs.status }} | |
TASK_REPORT: ${{ steps.run_test_cases.outputs.report }} | |
JOB_ID: ${{ steps.run_test_cases.outputs.jobid }} | |
GITHUB_RUN_ID: ${{ github.run_id }} | |
with: | |
script: | | |
const fs = require('fs'); | |
fs.writeFileSync('pr.txt', process.env.PR_NUMBER); | |
fs.writeFileSync('comment.txt', `@${process.env.PR_AUTHOR}, Please check the result of \`run test cases\`: | |
- Test Platform: PR-Test | |
- Editor Version: ${process.env.EDITOR_VERSION} | |
- Task Result: ${process.env.TASK_STATUS} | |
- Task URL: https://cctest.cocos.org/#/reportview/PR-TEST/${process.env.JOB_ID}/-1 | |
- GitHub Action: https://github.com/cocos/cocos-engine/actions/runs/${process.env.GITHUB_RUN_ID} | |
## Task Details | |
${process.env.TASK_REPORT}`); | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pr.txt | |
path: | | |
pr.txt | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: comment.txt | |
path: | | |
comment.txt | |
Win-RunTestCasesCustom: | |
if: | | |
contains(github.event.comment.body, '@cocos-robot run test cases custom') | |
runs-on: self-hosted-win | |
steps: | |
- name: Get PR Details | |
id: pr_details | |
uses: octokit/request-action@v2.x | |
with: | |
route: GET /repos/cocos/cocos-engine/pulls/${{ env.PR_NUMBER }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Parse Pull Request | |
id: parse_pr | |
env: | |
details: ${{ steps.pr_details.outputs.data }} | |
last_update_date: ${{ github.event.comment.created_at || github.event.pull_request.updated_at }} | |
shell: bash | |
run: | | |
set -x | |
whoami | |
pull_request=$(echo "$details" | jq -r '.') | |
pr_html_url=$(echo "$pull_request" | jq -r '.html_url') | |
pr_author=$(echo "$pull_request" | jq -r '.user.login') | |
pr_head_ref=$(echo "$pull_request" | jq -r '.head.ref') | |
pr_head_sha=$(echo "$pull_request" | jq -r '.head.sha') | |
pr_base_ref=$(echo "$pull_request" | jq -r '.base.ref') | |
pr_base_sha=$(echo "$pull_request" | jq -r '.base.sha') | |
pr_updated_at=$(echo "$pull_request" | jq -r '.updated_at') | |
# Print out the timestamps | |
echo "PR Updated At Timestamp: $pr_updated_at" | |
echo "Last Update Date Timestamp: $last_update_date" | |
# Check if the PR has new updates | |
if [[ $(date -d "$last_update_date" +%s) -gt $(date -d "$pr_updated_at" +%s) ]]; then | |
# If there is an update, exit the script | |
exit 101 | |
fi | |
# If there are no new updates, write the PR details to the output file | |
echo "pr_html_url=$pr_html_url" >> $GITHUB_OUTPUT | |
echo "pr_author=$pr_author" >> $GITHUB_OUTPUT | |
echo "pr_head_ref=$pr_head_ref" >> $GITHUB_OUTPUT | |
echo "pr_head_sha=$pr_head_sha" >> $GITHUB_OUTPUT | |
echo "pr_base_ref=$pr_base_ref" >> $GITHUB_OUTPUT | |
echo "pr_base_sha=$pr_base_sha" >> $GITHUB_OUTPUT | |
- name: Checkout engine | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ steps.parse_pr.outputs.pr_base_ref }} | |
- name: Checkout rebase | |
env: | |
BASE: ${{ steps.parse_pr.outputs.pr_base_ref }} | |
HEAD: ${{ steps.parse_pr.outputs.pr_head_sha }} | |
shell: bash | |
run: | | |
set -x | |
echo "before whoami" | |
whoami | |
git fetch origin | |
git reset --hard | |
echo "Branch name required: $BASE" | |
git checkout origin/$BASE | |
git pull origin $BASE --allow-unrelated-histories | |
git branch -D $BASE | |
git branch $BASE | |
echo "PR_NUMBER: $PR_NUMBER" | |
git branch -D pull-$PR_NUMBER || true | |
git fetch origin $HEAD:pull-$PR_NUMBER | |
git merge --ff -s recursive --no-verify -m "PR Test" origin/$BASE pull-$PR_NUMBER | |
- name: Download external libraries | |
shell: bash | |
run: | | |
set -x | |
EXT_VERSION=`node ./.github/workflows/get-native-external-version.js` | |
PRECLONE_EXTERNAL="E:/preclone/cocos-engine-external" | |
if [ ! -d $PRECLONE_EXTERNAL ]; then | |
mkdir -p $PRECLONE_EXTERNAL | |
git clone https://github.com/cocos/cocos-engine-external $PRECLONE_EXTERNAL | |
else | |
echo "directory $PRECLONE_EXTERNAL is ready" | |
fi | |
if [ ! -d native/external ]; then | |
mkdir native/external | |
fi | |
git -C $PRECLONE_EXTERNAL reset --hard | |
git -C $PRECLONE_EXTERNAL fetch --all --prune | |
git -C $PRECLONE_EXTERNAL archive --format=tar $EXT_VERSION | tar -C native/external -xf - | |
- name: Generate bindings | |
run: | | |
cd ./native/tools/swig-config | |
echo "Create auto-generated jsbinding glue codes." | |
node genbindings.js && | |
git status | |
- name: npm install | |
run: | | |
npm -v | |
npm install --registry https://registry.npmmirror.com | |
- name: Checkout test-projects | |
shell: bash | |
run: | | |
set -x | |
TEST_PROJECTS_EXTERNAL="E:/pr-test/cocos-test-projects" | |
CCTEST_PLUGINS="E:/pr-test/TestPlugin" | |
if [ ! -d $TEST_PROJECTS_EXTERNAL ]; then | |
mkdir -p $TEST_PROJECTS_EXTERNAL | |
git clone https://github.com/cocos/cocos-test-projects.git $TEST_PROJECTS_EXTERNAL | |
else | |
echo "directory $TEST_PROJECTS_EXTERNAL is ready" | |
fi | |
git -C $TEST_PROJECTS_EXTERNAL reset --hard | |
git -C $TEST_PROJECTS_EXTERNAL fetch --all --prune | |
git -C $TEST_PROJECTS_EXTERNAL checkout origin/${{ steps.parse_pr.outputs.pr_base_ref }} | |
git -C $TEST_PROJECTS_EXTERNAL pull origin ${{ steps.parse_pr.outputs.pr_base_ref }} --allow-unrelated-histories | |
rm -rf $TEST_PROJECTS_EXTERNAL/extensions/automation-framework | |
7z x -y $CCTEST_PLUGINS/*.zip -o$TEST_PROJECTS_EXTERNAL/extensions/automation-framework | |
- name: Run test cases | |
timeout-minutes: 100 | |
id: run_test_cases | |
run: | | |
scheduler cicd -p PR-TEST-DEFERRED -v ${{ steps.parse_pr.outputs.pr_base_ref }} -g PR-TEST -i "1,3,5" -d E:\cctest\devices.json -r https://cctest.cocos.org | |
$JOBID = Get-Content C:\Users\Administrator\AppData\Roaming\npm\node_modules\@cctest\scheduler\logs\PR-TEST\nowJobId.log | |
cd .. | |
pwd | |
python3 -u ./python/main.py --target=job_editor --jobid=$JOBID | |
- name: Write comment body and issue number to file | |
uses: actions/github-script@v7 | |
env: | |
PR_AUTHOR: ${{ steps.parse_pr.outputs.pr_author }} | |
EDITOR_VERSION: ${{ steps.run_test_cases.outputs.editor }} | |
TASK_STATUS: ${{ steps.run_test_cases.outputs.status }} | |
TASK_REPORT: ${{ steps.run_test_cases.outputs.report }} | |
JOB_ID: ${{ steps.run_test_cases.outputs.jobid }} | |
GITHUB_RUN_ID: ${{ github.run_id }} | |
with: | |
script: | | |
const fs = require('fs'); | |
fs.writeFileSync('commentwin.txt', `@${process.env.PR_AUTHOR}, Please check the result of \`run test cases\`: | |
- Test Platform: PR-Test | |
- Editor Version: ${process.env.EDITOR_VERSION} | |
- Task Result: ${process.env.TASK_STATUS} | |
- Task URL: https://cctest.cocos.org/#/reportview/PR-TEST/${process.env.JOB_ID}/-1 | |
- GitHub Action: https://github.com/cocos/cocos-engine/actions/runs/${process.env.GITHUB_RUN_ID} | |
## Task Details | |
${process.env.TASK_REPORT}`); | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: commentwin.txt | |
path: | | |
commentwin.txt | |
macOS-RunTestCasesCustom: | |
if: | | |
contains(github.event.comment.body, '@cocos-robot run test cases custom') | |
runs-on: self-hosted-mac | |
steps: | |
- name: Get PR Details | |
id: pr_details | |
uses: octokit/request-action@v2.x | |
with: | |
route: GET /repos/cocos/cocos-engine/pulls/${{ env.PR_NUMBER }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Parse Pull Request | |
id: parse_pr | |
env: | |
details: ${{ steps.pr_details.outputs.data }} | |
last_update_date: ${{ github.event.comment.created_at || github.event.pull_request.updated_at }} | |
run: | | |
set -x | |
pull_request=$(echo "$details" | jq -r '.') | |
pr_html_url=$(echo "$pull_request" | jq -r '.html_url') | |
pr_author=$(echo "$pull_request" | jq -r '.user.login') | |
pr_head_ref=$(echo "$pull_request" | jq -r '.head.ref') | |
pr_head_sha=$(echo "$pull_request" | jq -r '.head.sha') | |
pr_base_ref=$(echo "$pull_request" | jq -r '.base.ref') | |
pr_base_sha=$(echo "$pull_request" | jq -r '.base.sha') | |
pr_updated_at=$(echo "$pull_request" | jq -r '.updated_at') | |
# Print out the timestamps | |
echo "PR Updated At Timestamp: $pr_updated_at" | |
echo "Last Update Date Timestamp: $last_update_date" | |
# Check if the PR has new updates | |
if [[ $(gdate -d "$last_update_date" +%s) -gt $(gdate -d "$pr_updated_at" +%s) ]]; then | |
# If there is an update, exit the script | |
exit 101 | |
fi | |
# If there are no new updates, write the PR details to the output file | |
echo "pr_html_url=$pr_html_url" >> $GITHUB_OUTPUT | |
echo "pr_author=$pr_author" >> $GITHUB_OUTPUT | |
echo "pr_head_ref=$pr_head_ref" >> $GITHUB_OUTPUT | |
echo "pr_head_sha=$pr_head_sha" >> $GITHUB_OUTPUT | |
echo "pr_base_ref=$pr_base_ref" >> $GITHUB_OUTPUT | |
echo "pr_base_sha=$pr_base_sha" >> $GITHUB_OUTPUT | |
- name: Checkout engine | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ steps.parse_pr.outputs.pr_base_ref }} | |
- name: Checkout rebase | |
env: | |
BASE: ${{ steps.parse_pr.outputs.pr_base_ref }} | |
HEAD: ${{ steps.parse_pr.outputs.pr_head_sha }} | |
run: | | |
git fetch origin | |
git reset --hard | |
git checkout origin/$BASE | |
git pull origin $BASE --allow-unrelated-histories | |
git branch -D $BASE | |
git branch $BASE | |
git branch -D pull-$PR_NUMBER || true | |
git fetch origin $HEAD:pull-$PR_NUMBER | |
git merge --ff -s recursive --no-verify -m "PR Test" origin/$BASE pull-$PR_NUMBER | |
- name: Download external libraries | |
shell: bash | |
run: | | |
set -x | |
EXT_VERSION=`node ./.github/workflows/get-native-external-version.js` | |
PRECLONE_EXTERNAL="/Users/admin/Documents/actions-runner/preclone/cocos-engine-external" | |
if [ ! -d $PRECLONE_EXTERNAL ]; then | |
echo "create directory $PRECLONE_EXTERNAL" | |
# remove all sub-folders | |
rm -rf /Users/admin/Documents/actions-runner/preclone | |
mkdir -p $PRECLONE_EXTERNAL | |
git clone https://github.com/cocos/cocos-engine-external $PRECLONE_EXTERNAL | |
else | |
echo "directory $PRECLONE_EXTERNAL is ready" | |
fi | |
if [ ! -d native/external ]; then | |
mkdir native/external | |
fi | |
git -C $PRECLONE_EXTERNAL reset --hard | |
git -C $PRECLONE_EXTERNAL fetch --all --prune | |
git -C $PRECLONE_EXTERNAL archive --format=tar $EXT_VERSION | tar -C native/external -xf - | |
- name: Generate bindings | |
run: | | |
cd ./native/tools/swig-config | |
echo "Create auto-generated jsbinding glue codes." | |
node genbindings.js && | |
git status | |
- name: npm install | |
run: | | |
npm -v | |
npm install --registry https://registry.npmmirror.com | |
- name: Checkout test-projects | |
shell: bash | |
run: | | |
set -x | |
TEST_PROJECTS_EXTERNAL="../../cocos-test-projects" | |
CCTEST_PLUGINS="../../TestPlugin" | |
if [ ! -d $TEST_PROJECTS_EXTERNAL ]; then | |
mkdir -p $TEST_PROJECTS_EXTERNAL | |
git clone https://github.com/cocos/cocos-test-projects.git $TEST_PROJECTS_EXTERNAL | |
else | |
echo "directory $TEST_PROJECTS_EXTERNAL is ready" | |
fi | |
git -C $TEST_PROJECTS_EXTERNAL reset --hard | |
git -C $TEST_PROJECTS_EXTERNAL fetch --all --prune | |
git -C $TEST_PROJECTS_EXTERNAL checkout origin/${{ steps.parse_pr.outputs.pr_base_ref }} | |
git -C $TEST_PROJECTS_EXTERNAL pull origin ${{ steps.parse_pr.outputs.pr_base_ref }} --allow-unrelated-histories | |
rm -rf $TEST_PROJECTS_EXTERNAL/extensions/automation-framework | |
unzip -oq $CCTEST_PLUGINS/*.zip -d $TEST_PROJECTS_EXTERNAL/extensions/automation-framework | |
- name: Run test cases | |
timeout-minutes: 100 | |
id: run_test_cases | |
run: | | |
scheduler cicd -p PR-TEST-DEFERRED -v ${{ steps.parse_pr.outputs.pr_base_ref }} -g PR-TEST -i 0,2,4 -d /Users/admin/Documents/cctest/devices.json -r https://cctest.cocos.org | |
JOBID=`cat /usr/local/lib/node_modules/@cctest/scheduler/logs/PR-TEST/nowJobId.log` | |
cd .. | |
python3 -u ./python/main.py --target=job_editor --jobid=$JOBID | |
- name: Write comment body and issue number to file | |
uses: actions/github-script@v7 | |
env: | |
PR_AUTHOR: ${{ steps.parse_pr.outputs.pr_author }} | |
EDITOR_VERSION: ${{ steps.run_test_cases.outputs.editor }} | |
TASK_STATUS: ${{ steps.run_test_cases.outputs.status }} | |
TASK_REPORT: ${{ steps.run_test_cases.outputs.report }} | |
JOB_ID: ${{ steps.run_test_cases.outputs.jobid }} | |
GITHUB_RUN_ID: ${{ github.run_id }} | |
with: | |
script: | | |
const fs = require('fs'); | |
fs.writeFileSync('pr.txt', process.env.PR_NUMBER); | |
fs.writeFileSync('comment.txt', `@${process.env.PR_AUTHOR}, Please check the result of \`run test cases\`: | |
- Test Platform: PR-Test | |
- Editor Version: ${process.env.EDITOR_VERSION} | |
- Task Result: ${process.env.TASK_STATUS} | |
- Task URL: https://cctest.cocos.org/#/reportview/PR-TEST/${process.env.JOB_ID}/-1 | |
- GitHub Action: https://github.com/cocos/cocos-engine/actions/runs/${process.env.GITHUB_RUN_ID} | |
## Task Details | |
${process.env.TASK_REPORT}`); | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pr.txt | |
path: | | |
pr.txt | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: comment.txt | |
path: | | |
comment.txt |