From 6985dd25fb7fccfc5da972161604b50dfd93c16d Mon Sep 17 00:00:00 2001 From: ajaxzheng <894103554@qq.com> Date: Thu, 19 Dec 2024 15:56:52 +0800 Subject: [PATCH] ci(unit-test): [alert] add unit test actions --- .github/workflows/test-unit-pr.yml | 106 +++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 .github/workflows/test-unit-pr.yml diff --git a/.github/workflows/test-unit-pr.yml b/.github/workflows/test-unit-pr.yml new file mode 100644 index 0000000000..6def04e6fd --- /dev/null +++ b/.github/workflows/test-unit-pr.yml @@ -0,0 +1,106 @@ +name: E2E Test PR +run-name: E2E Test PR--${{ github.event.pull_request.title }} +on: + pull_request: + types: [opened, reopened, synchronize, edited] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.number || github.sha }} + cancel-in-progress: true + +jobs: + parse-components: + name: Parse Affected Components + runs-on: ubuntu-latest + outputs: + testComponents: ${{ steps.parseTitle.outputs.testComponents }} + steps: + - name: Parse Title + id: parseTitle + uses: actions/github-script@v6 + with: + script: | + const prTitle = context.payload.pull_request.title + const regex = /\[(.*?)\]/ + const matches = prTitle.match(regex) + if (matches && matches.length > 1 && matches[1]) { + let components = matches[1] + .split(',') + .map((c) => c.trim()) + .filter((c) => /^[a-z\-\/]+$/.test(c)) + .map((c) => `"\\/${c}\\/"`) + components = [...new Set(components)].slice(0, 3).join(' ') + core.setOutput('testComponents', components) + } else { + const warningString =`**[e2e-test-warn]** + The component to be tested is missing. + + The title of the Pull request should look like "fix(vue-renderless): [action-menu, alert] fix xxx bug". + + Please make sure you've read our [contributing guide](https://github.com/opentiny/tiny-vue/blob/dev/CONTRIBUTING.md) + ` + core.setOutput('tip', warningString) + core.warning(warningString) + } + - name: generate user-tip.txt + if: ${{ steps.parseTitle.outputs.tip }} + run: | + cat << EOF > user-tip.txt + ${{ steps.parseTitle.outputs.tip }} + EOF + - name: Upload User Tip + if: ${{ steps.parseTitle.outputs.tip }} + uses: actions/upload-artifact@v4 + with: + name: user-tip + path: user-tip.txt + retention-days: 1 + - name: Save PR number + if: ${{ steps.parseTitle.outputs.tip }} + run: echo ${{ github.event.number }} > ./pr-id.txt + + - name: Upload PR number + if: ${{ steps.parseTitle.outputs.tip }} + uses: actions/upload-artifact@v4 + with: + name: pr + path: ./pr-id.txt + + pr-test: + if: ${{ needs.parse-components.outputs.testComponents }} + strategy: + matrix: + testcli: ${{ fromJson(needs.parse-components.outputs.testclis) }} + + name: PR E2E Test + needs: parse-components + runs-on: ubuntu-latest + env: + TEST_COMPONENTS: ${{ needs.parse-components.outputs.testComponents }} + steps: + - uses: actions/checkout@v3 + - name: Setup pnpm + uses: pnpm/action-setup@v2 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 20 + - name: Get pnpm store directory + id: pnpm-cache + run: | + echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm i --no-frozen-lockfile + + - name: E2E unit + run: pnpm test:unit3 ${{ env.TEST_COMPONENTS }}