🙋♂️ 组件库新需求 #610
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: PR_COMMENT_CI | |
on: | |
issue_comment: | |
types: [created] | |
env: | |
HUSKY: '0' | |
jobs: | |
check: | |
runs-on: ubuntu-latest | |
outputs: | |
next_action: ${{ steps.get-action.outputs.next_action }} | |
if: ${{ github.event.issue.pull_request }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
repository: Tencent/tdesign | |
sparse-checkout: | | |
.github/.pr-comment-ci-whitelist | |
sparse-checkout-cone-mode: false | |
- uses: actions/github-script@v7 | |
id: get-action | |
with: | |
script: | | |
const user = context.payload.comment.user.login | |
core.info(`user: ${user}`) | |
const fs = require('fs'); | |
const whitelist = fs.readFileSync('.github/.pr-comment-ci-whitelist', 'utf8'); | |
let isWhitelist = false; | |
whitelist.split('\n').forEach((owner) => { | |
if (owner === user) { | |
isWhitelist = true; | |
} | |
}); | |
let next_action = '' | |
if (isWhitelist) { | |
const body = context.payload.comment.body | |
core.info(`body: ${body}`) | |
if (body.startsWith('/update-common')) { | |
next_action='update-common' | |
} | |
if (body.startsWith('/update-snapshot')) { | |
next_action='update-snapshot' | |
} | |
if (body.startsWith('/update-coverage')) { | |
next_action='update-coverage' | |
} | |
if(next_action){ | |
await github.rest.reactions.createForIssueComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
comment_id: context.payload.comment.id, | |
content: 'rocket', | |
}) | |
} | |
} else { | |
core.warning('You are not collaborator'); | |
} | |
core.info(`next_action: ${next_action}`) | |
core.setOutput('next_action', next_action) | |
update-common: | |
needs: check | |
runs-on: ubuntu-latest | |
if: ${{ needs.check.outputs.next_action == 'update-common' }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.PERSONAL_TOKEN }} | |
- name: gh checkout pr | |
env: | |
GH_TOKEN: ${{ secrets.PERSONAL_TOKEN }} | |
run: gh pr checkout ${{ github.event.issue.number }} | |
- name: git config | |
run: | | |
git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
git config --local user.name "github-actions[bot]" | |
- name: submodule init and sync remote | |
run: | | |
git submodule update --init --remote | |
- name: Commit common | |
run: | | |
git status | |
working_tree_clean=$(git status | grep -c 'nothing to commit, working tree clean') || true | |
if [ "$working_tree_clean" -eq "0" ]; then | |
git add . | |
git commit -m "chore: update common" | |
fi | |
git status | |
- name: merge develop | |
run: | | |
git merge develop --no-commit || true | |
- name: check conflicts | |
run: | | |
git status | |
conflict_count=$(git status | grep -c 'both modified:') || true | |
working_tree_clean=$(git status | grep -c 'nothing to commit, working tree clean') || true | |
common_conflict=$(git status | grep 'both modified:' | grep -c '_common') || true | |
conflicts_sum=$((common_conflict)) | |
echo "conflict_count: $conflict_count" | |
echo "working_tree_clean: $working_tree_clean" | |
echo "common_conflict: $common_conflict" | |
echo "conflicts_sum: $conflicts_sum" | |
if [ "$working_tree_clean" -eq "1" ]; then | |
echo "nothing to commit, working tree clean" | |
exit 0 | |
fi | |
if [ "$conflict_count" -gt "0" ]&&[ "$conflicts_sum" -eq "0" ]; then | |
echo "Unknown conflict " | |
git status | |
exit 1 | |
fi | |
if [ "$common_conflict" -eq "1" ];then | |
git checkout --ours src/_common | |
git add src/_common | |
echo "resolve conflict _common" | |
fi | |
git status | |
git commit -am "chore: merge develop" | |
- name: git push | |
run: | | |
git status | |
git push || true | |
update-snapshot: | |
needs: check | |
runs-on: ubuntu-latest | |
if: ${{ needs.check.outputs.next_action == 'update-snapshot' }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.PERSONAL_TOKEN }} | |
- name: gh checkout pr | |
env: | |
GH_TOKEN: ${{ secrets.PERSONAL_TOKEN }} | |
run: gh pr checkout ${{ github.event.issue.number }} --recurse-submodules | |
- name: bot commtent | |
id: bot-comment | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const url = `${context.serverUrl}//${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}` | |
const urlLink = `[Open](${url})` | |
const { data: comment } = await github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: `⏳ 正在运行快照更新。。。 CI: ${urlLink}` | |
}) | |
return comment.id | |
- name: git config | |
run: | | |
git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
git config --local user.name "github-actions[bot]" | |
- name: merge develop | |
run: | | |
git merge develop --no-commit || true | |
- name: check conflicts | |
run: | | |
git status | |
conflict_count=$(git status | grep -c 'both modified:') || true | |
working_tree_clean=$(git status | grep -c 'nothing to commit, working tree clean') || true | |
csr_snap_conflict=$(git status | grep 'both modified:' | grep -c 'csr.test.jsx.snap') || true | |
ssr_snap_conflict=$(git status | grep 'both modified:' | grep -c 'ssr.test.jsx.snap') || true | |
common_conflict=$(git status | grep 'both modified:' | grep -c '_common') || true | |
conflicts_sum=$((csr_snap_conflict + ssr_snap_conflict + common_conflict)) | |
echo "conflict_count: $conflict_count" | |
echo "working_tree_clean: $working_tree_clean" | |
echo "csr_snap_conflict: $csr_snap_conflict" | |
echo "ssr_snap_conflict: $ssr_snap_conflict" | |
echo "common_conflict: $common_conflict" | |
echo "conflicts_sum: $conflicts_sum" | |
if [ "$working_tree_clean" -eq "1" ]; then | |
echo "nothing to commit, working tree clean" | |
exit 0 | |
fi | |
if [ "$conflict_count" -gt "0" ]&&[ "$conflicts_sum" -eq "0" ]; then | |
echo "Unknown conflict " | |
git status | |
exit 1 | |
fi | |
if [ "$csr_snap_conflict" -eq "1" ];then | |
git checkout --theirs test/snap/__snapshots__/csr.test.jsx.snap | |
git add test/snap/__snapshots__/csr.test.jsx.snap | |
echo "resolve conflict csr.test.jsx.snap" | |
fi | |
if [ "$ssr_snap_conflict" -eq "1" ];then | |
git checkout --theirs test/snap/__snapshots__/ssr.test.jsx.snap | |
git add test/snap/__snapshots__/ssr.test.jsx.snap | |
echo "resolve conflict ssr.test.jsx.snap" | |
fi | |
if [ "$common_conflict" -eq "1" ];then | |
git checkout --theirs src/_common | |
git add src/_common | |
echo "resolve conflict _common" | |
fi | |
git status | |
git commit -am "chore: merge develop" | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
- run: npm install | |
- run: npm run test:update | |
- name: Commit Snapshot | |
run: | | |
git status | |
working_tree_clean=$(git status | grep -c 'nothing to commit, working tree clean') || true | |
if [ "$working_tree_clean" -eq "0" ]; then | |
git add . | |
git commit -m "chore: update snapshot" | |
fi | |
git status | |
- name: git push | |
run: | | |
git status | |
git push || true | |
update-coverage: | |
needs: check | |
runs-on: ubuntu-latest | |
if: ${{ needs.check.outputs.next_action == 'update-coverage' }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.PERSONAL_TOKEN }} | |
- name: gh checkout pr | |
env: | |
GH_TOKEN: ${{ secrets.PERSONAL_TOKEN }} | |
run: gh pr checkout ${{ github.event.issue.number }} --recurse-submodules | |
- name: git config | |
run: | | |
git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
git config --local user.name "github-actions[bot]" | |
- name: bot commtent | |
id: bot-comment | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const url = `${context.serverUrl}//${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}` | |
const urlLink = `[Open](${url})` | |
const { data: comment } = await github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: `⏳ 正在运行 coverage badge 更新。。。 CI: ${urlLink}` | |
}) | |
return comment.id | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
- run: npm install | |
- run: npm run generate:coverage-badge | |
- name: commit coverage badge | |
run: | | |
git status | |
working_tree_clean=$(git status | grep -c 'nothing to commit, working tree clean') || true | |
if [ "$working_tree_clean" -eq "0" ]; then | |
git add . | |
git commit -m "chore: update coverage badge" | |
fi | |
git status | |
- name: git push | |
run: | | |
git status | |
git push || true |