diff --git a/.github/workflows/pr-comment-ci.yml b/.github/workflows/pr-comment-ci.yml index 807663f7e..88cb71c0d 100644 --- a/.github/workflows/pr-comment-ci.yml +++ b/.github/workflows/pr-comment-ci.yml @@ -4,7 +4,7 @@ on: issue_comment: types: [created] env: - HUSKY: "0" + HUSKY: '0' jobs: check: @@ -15,29 +15,30 @@ jobs: steps: - uses: actions/checkout@v4 with: + repository: Tencent/tdesign sparse-checkout: | - .github/CODEOWNERS + .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.debug(`user: ${user}`) + core.info(`user: ${user}`) - const fs = require('fs') - const CODEOWNERS = fs.readFileSync('.github/CODEOWNERS', 'utf8') - core.debug(`CODEOWNERS: ${CODEOWNERS}`) + const fs = require('fs'); + const whitelist = fs.readFileSync('.github/.pr-comment-ci-whitelist', 'utf8'); - let isReviewer = false; - CODEOWNERS.match(/@\w+/g).forEach((owner) => { - if (owner === `@${user}`) { - isReviewer = true + let isWhitelist = false; + whitelist.split('\n').forEach((owner) => { + if (owner === user) { + isWhitelist = true; } - }) + }); let next_action = '' - if (isReviewer) { + if (isWhitelist) { const body = context.payload.comment.body core.info(`body: ${body}`) if (body.startsWith('/update-common')) { @@ -46,6 +47,10 @@ jobs: 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, @@ -69,16 +74,33 @@ jobs: 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 + run: gh pr checkout ${{ github.event.issue.number }} - - name: merge develop + - 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 @@ -105,25 +127,13 @@ jobs: fi if [ "$common_conflict" -eq "1" ];then - git checkout --theirs src/_common + git checkout --ours src/_common git add src/_common echo "resolve conflict _common" fi git status git commit -am "chore: merge develop" - - name: udpate common - run: | - git submodule update --remote --merge - - 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: git push run: | @@ -139,15 +149,36 @@ jobs: 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: merge develop + + - 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 @@ -199,8 +230,11 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 18 + - run: npm install + - run: npm run test:update + - name: Commit Snapshot run: | git status @@ -210,6 +244,65 @@ jobs: 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