Skip to content

[安卓原生]线上版本出现大量的 java 的 NullPointer异常引起的闪退问题. #23168

[安卓原生]线上版本出现大量的 java 的 NullPointer异常引起的闪退问题.

[安卓原生]线上版本出现大量的 java 的 NullPointer异常引起的闪退问题. #23168

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