# https://cn.vitejs.dev/guide/static-deploy name: CI on: push: workflow_dispatch: concurrency: group: 'ci' cancel-in-progress: true jobs: build-and-deploy: # timeout-minutes: 60 runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 修改 .npmrc run: | sed -i '/use-node-version/d' .npmrc; sed -i '/node-mirror/d' .npmrc; - name: 安装 pnpm uses: pnpm/action-setup@v4 with: version: latest run_install: false - name: 安装 Node.js uses: actions/setup-node@v4 with: node-version: lts/* cache: 'pnpm' - name: 安装依赖 run: pnpm install --frozen-lockfile - name: 静态代码分析 run: pnpm lint # - name: Build # run: pnpm build # env: # VITE_BUILD_COMMIT: ${{ github.sha }} # https://github.com/vercel/examples/tree/main/ci-cd/github-actions # cname-cn.vercel.com cname-china.vercel-dns.com - name: 拉取 Vercel 环境信息 run: pnpm exec vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} - name: 构建项目 run: pnpm exec vercel build --target=production --token=${{ secrets.VERCEL_TOKEN }} env: VITE_BUILD_COMMIT: ${{ github.sha }} - name: 部署到 Vercel run: pnpm exec vercel deploy --prebuilt --target=production --token=${{ secrets.VERCEL_TOKEN }} - name: 部署到 Surge id: surge_deploy # pnpm exec surge token / pnpx surge token # https://github.com/Tencent/tdesign-vue-next/pull/1604#issuecomment-1236244550 # https://github.com/Tencent/tdesign-vue-next/blob/03036a19adccf4657d7792e3a61a6c6a7d902e3e/.github/workflows/preview-publish.yml # https://github.com/Tencent/tdesign/blob/0c0c9b63897c05d10c58e1a1e36feda2cb99eca7/.github/workflows/preview.yml#L40 run: | repository=${{github.repository}} project_name=${repository#*/} export DEPLOY_DOMAIN=https://preview-pr${{ github.run_number }}-$project_name.surge.sh cp dist/index.html dist/200.html pnpm exec surge --project ./dist --domain $DEPLOY_DOMAIN --token ${{ secrets.SURGE_TOKEN }} echo the preview URL is $DEPLOY_DOMAIN echo "url=$DEPLOY_DOMAIN" >> $GITHUB_OUTPUT - name: Install Playwright Browsers run: pnpm exec playwright install --with-deps - name: Run Playwright tests run: pnpm exec playwright test env: BASE_URL: ${{ steps.surge_deploy.outputs.url }}