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 diff --git a/package.json b/package.json index 7345f270c..669ad9a46 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "lint:fix-eslint": "eslint --ext .vue,.ts,.tsx ./ --max-warnings 0 --ignore-path .gitignore --ignore-path .eslintignore --fix", "lint:fix-prettier": "prettier ./ --ignore-path .gitignore --ignore-path .eslintignore --write './*.{vue,ts,tsx}' --ignore-unknown", "lint:vue": "vue-tsc --noEmit -p tsconfig.build.json", - "update:coverage-badge": "node scripts/test/generate-coverage.js", + "generate:coverage-badge": "npm run test:unit-coverage && node scripts/test/generate-coverage.js", "update:css": "node scripts/generate-css-vars.js", "changelog": "publish-cli changelog", "robot": "publish-cli robot-msg", @@ -123,7 +123,8 @@ "@typescript-eslint/parser": "~5.34.0", "@vitejs/plugin-vue": "^2.3.1", "@vitejs/plugin-vue-jsx": "^1.3.3", - "@vitest/ui": "^1.6.0", + "@vitest/coverage-v8": "^2.0.5", + "@vitest/ui": "^2.0.5", "@vue/babel-plugin-jsx": "1.1.1", "@vue/eslint-config-typescript": "^9.1.0", "@vue/runtime-core": "^3.2.41", @@ -132,7 +133,6 @@ "@vue/test-utils": "2.4.1", "autoprefixer": "^10.2.4", "axios": "^1.7.2", - "c8": "^7.11.3", "commitizen": "^4.2.3", "concurrently": "^6.5.1", "cross-env": "^7.0.3", @@ -179,7 +179,7 @@ "typescript": "~4.7.2", "vite": "^2.9.14", "vite-plugin-tdoc": "^2.0.1", - "vitest": "^1.6.0", + "vitest": "^2.0.5", "vue": "3.3.8", "vue-eslint-parser": "^8.0.1", "vue-router": "4.0.11",