diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e636917a..32046f25 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,9 @@ jobs: name: Build the package steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 + with: + submodules: true + - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: node-version: 22 @@ -24,105 +26,102 @@ jobs: - run: pnpm install env: CYPRESS_INSTALL_BINARY: 0 + CHROMEDRIVER_SKIP_DOWNLOAD: true - run: pnpm build - run: pnpm test:unit - # Use cache to share the output across different jobs - # No need to cache node_modules because they are all bundled - - uses: actions/cache/save@v4 - id: cache - with: - path: outfile.cjs - key: ${{ github.sha }}-${{ hashFiles('pnpm-lock.yaml') }} + - run: pnpm snapshot - test: + # Use artifact to share the output across different jobs + # No need to save node_modules because they are all bundled + - uses: actions/upload-artifact@v4 + with: + name: build-output + path: | + outfile.cjs + playground + retention-days: 3 + + verify-scripts: + needs: build + strategy: + matrix: + node-version: [18, 20, 22] + os: [ubuntu-latest, windows-latest, macos-latest] + verification-script: + - pnpm --filter "\!*typescript*" build + - pnpm --filter "*typescript*" build + - pnpm --filter "*vitest*" test:unit + - pnpm --filter "*eslint*" lint --no-fix --max-warnings=0 + - pnpm --filter "*prettier*" format --write --check + # FIXME: it's failing now + # - pnpm --filter "*with-tests*" test:unit + runs-on: ${{ matrix.os }} + continue-on-error: ${{ matrix.os == 'windows-latest' }} + env: + CYPRESS_INSTALL_BINARY: 0 + CHROMEDRIVER_SKIP_DOWNLOAD: true + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'pnpm' + + # use artifacts to share the playground across different jobs + - uses: actions/download-artifact@v4 + with: + name: build-output + + - name: Install dependencies to avoid tsconfig warnings + run: pnpm install + - name: Install dependencies in playground + working-directory: ./playground + run: pnpm install --no-frozen-lockfile + + - name: Run build script in playground + working-directory: ./playground + run: ${{ matrix.verification-script }} + + verify-e2e: needs: build strategy: matrix: - flag-for-ts: ['', '--typescript'] - flag-for-jsx: ['', '--jsx'] - flag-for-router: ['', '--router'] - flag-for-pinia: ['', '--pinia'] - flag-for-vitest: ['', '--vitest'] - - # It's quite costly to install Cypress & Playwright even with cache. - # Maybe we can split them into another job so that all the projects - # can share the same binary installation. - flag-for-e2e: ['', '--cypress', '--playwright'] - - # Skip ESLint/Prettier tests as we've reached the limit of job numbers - # TODO: Find a way to test them without adding new jobs - + e2e-framework: ['cypress', 'playwright'] node-version: [22] - os: [ubuntu-latest] - - # Run a few tests on other systems and Node.js versions - include: - - node-version: 22 - os: windows-latest - flag-for-ts: '--typescript' - flag-for-jsx: '--jsx' - flag-for-router: '--router' - flag-for-pinia: '--pinia' - flag-for-vitest: '--vitest' - flag-for-e2e: '--cypress' - flag-for-eslint: '--eslint' - - - node-version: 22 - os: macos-latest - flag-for-ts: '--typescript' - flag-for-jsx: '--jsx' - flag-for-router: '--router' - flag-for-pinia: '--pinia' - flag-for-vitest: '--vitest' - flag-for-e2e: '--cypress' - flag-for-eslint: '--eslint' - - - node-version: 18 - os: ubuntu-latest - flag-for-ts: '--typescript' - flag-for-jsx: '--jsx' - flag-for-router: '--router' - flag-for-pinia: '--pinia' - flag-for-vitest: '--vitest' - flag-for-e2e: '--cypress' - flag-for-eslint: '--eslint' - - - node-version: 20 - os: ubuntu-latest - flag-for-ts: '--typescript' - flag-for-jsx: '--jsx' - flag-for-router: '--router' - flag-for-pinia: '--pinia' - flag-for-vitest: '--vitest' - flag-for-e2e: '--cypress' - flag-for-eslint: '--eslint' + os: [ubuntu-latest, windows-latest, macos-latest] runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.os == 'windows-latest' }} env: - FEATURE_FLAGS: ${{ matrix.flag-for-ts }} ${{ matrix.flag-for-jsx }} ${{ matrix.flag-for-router }} ${{ matrix.flag-for-pinia }} ${{ matrix.flag-for-vitest }} ${{ matrix.flag-for-e2e }} ${{matrix.flag-for-eslint}} # Sometimes the Linux runner can't verify Cypress in 30s CYPRESS_VERIFY_TIMEOUT: 60000 steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v3 + with: + submodules: true + - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'pnpm' - - uses: actions/cache/restore@v4 - id: cache-restore + + # use artifacts to share the playground across different jobs + - uses: actions/download-artifact@v4 with: - path: outfile.cjs - key: ${{ github.sha }}-${{ hashFiles('pnpm-lock.yaml') }} - - name: Build the package on cache miss - if: steps.cache-restore.outputs.cache-hit != 'true' - run: pnpm install && pnpm build + name: build-output + + - name: Install dependencies to avoid tsconfig warnings + run: pnpm install + - name: Install dependencies in playground + working-directory: ./playground + run: pnpm install --no-frozen-lockfile # https://github.com/vitejs/vite/blob/main/.github/workflows/ci.yml#L62 # Install playwright's binary under custom directory to cache - name: Set Playwright & Cypress path - if: runner.os != 'Windows' run: | echo "PLAYWRIGHT_BROWSERS_PATH=$HOME/.cache/playwright-bin" >> $GITHUB_ENV echo "CYPRESS_CACHE_FOLDER=$HOME/.cache/cypress-bin" >> $GITHUB_ENV @@ -132,7 +131,7 @@ jobs: echo "PLAYWRIGHT_BROWSERS_PATH=$HOME\.cache\playwright-bin" >> $env:GITHUB_ENV echo "CYPRESS_CACHE_FOLDER=$HOME\.cache\cypress-bin" >> $env:GITHUB_ENV - - if: ${{ contains(matrix.flag-for-e2e, '--cypress') }} + - if: ${{ contains(matrix.e2e-framework, 'cypress') }} name: Cache Cypress binaries id: cache-cypress uses: actions/cache@v4 @@ -141,7 +140,7 @@ jobs: key: ${{ runner.os }}-cypress-bin path: ${{ env.CYPRESS_CACHE_FOLDER }} - - if: ${{ contains(matrix.flag-for-e2e, '--playwright') }} + - if: ${{ contains(matrix.e2e-framework, 'playwright') }} name: Cache Playwright's binary uses: actions/cache@v4 with: @@ -150,47 +149,28 @@ jobs: key: ${{ runner.os }}-playwright-bin-v1 path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} - - if: ${{ (contains(env.FEATURE_FLAGS, '--')) }} - name: Create the sample project with feature flags - working-directory: ../ - run: node ./create-vue/outfile.cjs sample-project ${{ env.FEATURE_FLAGS }} - - - if: ${{ !(contains(env.FEATURE_FLAGS, '--')) }} - name: Create the sample project with default options - working-directory: ../ - run: node ./create-vue/outfile.cjs sample-project --default - - - name: Install dependencies in the sample project - working-directory: ../sample-project - run: pnpm install - - - if: ${{ contains(matrix.flag-for-vitest, '--') }} - name: Run unit test script - working-directory: ../sample-project - run: pnpm test:unit - - - name: Run build script - working-directory: ../sample-project - run: pnpm build - - name: Download Cypress - if: ${{ contains(matrix.flag-for-e2e, '--cypress') }} - working-directory: ../sample-project + if: ${{ contains(matrix.e2e-framework, 'cypress') }} + working-directory: ./playground/cypress run: | pnpm exec cypress cache list pnpm exec cypress install - - if: ${{ contains(matrix.flag-for-e2e, '--playwright') }} + - if: ${{ contains(matrix.e2e-framework, 'playwright') }} name: Install Playwright dependencies - working-directory: ../sample-project - run: npx playwright install --with-deps - - - if: ${{ contains(matrix.flag-for-e2e, '--') }} - name: Run e2e test script - working-directory: ../sample-project - run: pnpm test:e2e - - - if: ${{ contains(matrix.flag-for-eslint, '--') }} - name: Run lint script - working-directory: ../sample-project - run: pnpm lint --no-fix --max-warnings=0 + working-directory: ./playground/playwright + run: pnpm exec playwright install --with-deps + + - name: Run build script + working-directory: ./playground + run: pnpm --filter "*${{ matrix.e2e-framework }}*" build + + - name: Run e2e test script + working-directory: ./playground + run: pnpm --filter "*${{ matrix.e2e-framework }}*" --workspace-concurrency 1 test:e2e + + - name: Cypress component testing for projects without Vitest + if: ${{ contains(matrix.e2e-framework, 'cypress') }} + run: pnpm --filter '*cypress*' --filter '!*vitest*' --workspace-concurrency 1 test:unit + + # FIXME: `--with-tests` folders. It's failing now. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy