Skip to content

CC 3.5.0 - Browser hot-reload on Prefab/Animation Save #20170

CC 3.5.0 - Browser hot-reload on Prefab/Animation Save

CC 3.5.0 - Browser hot-reload on Prefab/Animation Save #20170

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
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 Number
id: get_pr
shell: pwsh
run: |
if ("${{ github.event_name }}" -eq "issue_comment") {
Write-Host "::set-output name=pr_number::${{ github.event.issue.number }}"
}
else {
Write-Host "::set-output name=pr_number::${{ github.event.pull_request.number }}"
}
- name: Get PR Details
id: pr_details
uses: octokit/request-action@v2.x
with:
route: GET /repos/cocos/cocos-engine/pulls/${{ steps.get_pr.outputs.pr_number }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Parse Pull Request
id: parse_pr
shell: pwsh
run: |
$pull_request = @"
${{ steps.pr_details.outputs.data }}
"@ | ConvertFrom-Json
Write-Host $pull_request
Write-Host "::set-output name=pr_html_url::$($pull_request.html_url)"
Write-Host "::set-output name=pr_author::$($pull_request.user.login)"
Write-Host "::set-output name=pr_head_ref::$($pull_request.head.ref)"
Write-Host "::set-output name=pr_head_sha::$($pull_request.head.sha)"
Write-Host "::set-output name=pr_base_ref::$($pull_request.base.ref)"
Write-Host "::set-output name=pr_base_sha::$($pull_request.base.sha)"
- name: Check Job Parameter
run: |
echo "${{ steps.parse_pr.outputs.pr_head_ref }}"
echo "${{ steps.parse_pr.outputs.pr_head_sha }}"
echo "${{ steps.parse_pr.outputs.pr_base_ref }}"
echo "${{ steps.parse_pr.outputs.pr_base_sha }}"
- name: Checkout engine
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: ${{ steps.parse_pr.outputs.pr_base_ref }}
- name: Checkout rebase
run: |
git config user.email
git config user.name
git fetch origin
git reset --hard
git checkout origin/${{ steps.parse_pr.outputs.pr_base_ref }}
git pull origin ${{ steps.parse_pr.outputs.pr_base_ref }} --allow-unrelated-histories
git branch -D ${{ steps.parse_pr.outputs.pr_base_ref }}
git branch ${{ steps.parse_pr.outputs.pr_base_ref }}
git branch -D pull-${{ steps.get_pr.outputs.pr_number }} || true
git fetch origin pull/${{ steps.get_pr.outputs.pr_number }}/head:pull-${{ steps.get_pr.outputs.pr_number }}
git merge --ff -s recursive --no-verify -m "PR Test" origin/${{ steps.parse_pr.outputs.pr_base_ref }} pull-${{ steps.get_pr.outputs.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: 90
id: run_test_cases
run: |
scheduler cicd -p PR-TEST -v ${{ steps.parse_pr.outputs.pr_base_ref }} -g PR-TEST -i "0,1,3" -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@v5
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 }}
PR_NUMBER: ${{ steps.get_pr.outputs.pr_number }}
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@v2
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 Number
id: get_pr
shell: pwsh
run: |
if ("${{ github.event_name }}" -eq "issue_comment") {
Write-Host "::set-output name=pr_number::${{ github.event.issue.number }}"
}
else {
Write-Host "::set-output name=pr_number::${{ github.event.pull_request.number }}"
}
- name: Get PR Details
id: pr_deatils
uses: octokit/request-action@v2.x
with:
route: GET /repos/cocos/cocos-engine/pulls/${{ steps.get_pr.outputs.pr_number }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Parse Pull Request
id: parse_pr
shell: pwsh
run: |
$pull_request = @"
${{ steps.pr_deatils.outputs.data }}
"@ | ConvertFrom-Json
Write-Host $pull_request
Write-Host "::set-output name=pr_html_url::$($pull_request.html_url)"
Write-Host "::set-output name=pr_author::$($pull_request.user.login)"
Write-Host "::set-output name=pr_head_ref::$($pull_request.head.ref)"
Write-Host "::set-output name=pr_head_sha::$($pull_request.head.sha)"
Write-Host "::set-output name=pr_base_ref::$($pull_request.base.ref)"
Write-Host "::set-output name=pr_base_sha::$($pull_request.base.sha)"
- name: Check Job Parameter
run: |
echo "${{ steps.parse_pr.outputs.pr_head_ref }}"
echo "${{ steps.parse_pr.outputs.pr_head_sha }}"
echo "${{ steps.parse_pr.outputs.pr_base_ref }}"
echo "${{ steps.parse_pr.outputs.pr_base_sha }}"
- name: Checkout engine
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: ${{ steps.parse_pr.outputs.pr_base_ref }}
- name: Checkout rebase
run: |
git fetch origin
git reset --hard
git checkout origin/${{ steps.parse_pr.outputs.pr_base_ref }}
git pull origin ${{ steps.parse_pr.outputs.pr_base_ref }} --allow-unrelated-histories
git branch -D ${{ steps.parse_pr.outputs.pr_base_ref }}
git branch ${{ steps.parse_pr.outputs.pr_base_ref }}
git fetch origin pull/${{ steps.get_pr.outputs.pr_number }}/head:pull-${{ steps.get_pr.outputs.pr_number }}
git merge --ff -s recursive --no-verify -m "PR Test" origin/${{ steps.parse_pr.outputs.pr_base_ref }} pull-${{ steps.get_pr.outputs.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: 90
id: run_test_cases
run: |
scheduler cicd -p PR-TEST -v ${{ steps.parse_pr.outputs.pr_base_ref }} -g PR-TEST -i 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@v5
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 }}
PR_NUMBER: ${{ steps.get_pr.outputs.pr_number }}
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@v2
with:
name: pr.txt
path: |
pr.txt
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: comment.txt
path: |
comment.txt