name: CI # Declare default permissions as read only. permissions: read-all on: push: branches: - main pull_request: branches: - '**' concurrency: group: ${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: inspect-code: name: Inspect code runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 2 - name: Set up Node.js uses: actions/setup-node@v3.4.1 with: node-version: 18 - name: Setup cache for Chromium binary uses: actions/cache@v3 with: path: .local-chromium key: ${{ runner.os }}-chromium-${{ hashFiles('src/revisions.ts') }} - name: Install dependencies run: npm ci - name: Check code run: npm run check - name: Lint code run: npm run lint - name: Lint commits run: npm run commitlint if: github.event_name != 'pull_request' check-docs: name: Check documentation runs-on: ubuntu-latest outputs: needs_deploying: ${{ steps.needs_deploying.outputs.value }} steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 2 - name: Set up Node.js uses: actions/setup-node@v3.4.1 with: cache: npm - name: Setup cache for Chromium binary uses: actions/cache@v3 with: path: .local-chromium key: ${{ runner.os }}-chromium-${{ hashFiles('src/revisions.ts') }} - name: Install dependencies run: npm ci - name: Build run: npm run docs - name: Check if autogenerated docs differ run: | if [[ $(git diff) ]]; then echo "Please update the documentation by running 'npm run docs'" exit 1 fi - name: Check if docs need to be deployed id: needs_deploying run: | if [[ $(git diff HEAD^ -- ./docs ./website) ]]; then needs_deploying=true else needs_deploying=false fi echo "::set-output name=value::$needs_deploying" deploy-docs: needs: check-docs name: Deploy docs (if needed) if: ${{ needs.check-docs.outputs.needs_deploying == 'true' && github.event_name != 'pull_request' }} runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3.4.1 with: cache: npm - name: Install dependencies working-directory: ./website run: npm ci - name: Increase swap space uses: pierotofy/set-swap-space@49819abfb41bd9b44fb781159c033dba90353a7c with: swap-size-gb: 10 - name: Build website working-directory: ./website env: NODE_OPTIONS: --max-old-space-size=6144 run: npm run build - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./website/build user_name: release-please[bot] user_email: 55107282+release-please[bot]@users.noreply.github.com tests: name: ${{ matrix.spec.name }} tests (${{ matrix.spec.node }}) runs-on: ${{ matrix.spec.machine }} continue-on-error: true strategy: matrix: spec: - name: Linux machine: ubuntu-latest node: 14 - name: Linux machine: ubuntu-latest node: 16 - name: Linux machine: ubuntu-latest node: 18 - name: macOS machine: macos-latest node: 14 - name: Windows machine: windows-latest node: 14 steps: - name: Checkout uses: actions/checkout@v3 - name: Setup cache for Chromium binary uses: actions/cache@v3 with: path: .local-chromium key: ${{ runner.os }}-chromium-${{ hashFiles('src/revisions.ts') }} - name: Setup cache for Firefox binary uses: actions/cache@v3 with: path: .local-firefox key: ${{ runner.os }}-firefox-${{ hashFiles('src/revisions.ts') }} - name: Set up Node.js uses: actions/setup-node@v3.4.1 with: node-version: ${{ matrix.spec.node }} - name: Install dependencies with Chromium run: npm install - name: Install Firefox env: PUPPETEER_PRODUCT: firefox run: npm install - name: Install linux dependencies. if: ${{ matrix.spec.name == 'Linux' }} run: sudo apt-get install xvfb - name: Build run: npm run build - name: Test types run: npm run test:types # On Linux we run all Chrome tests without retries and Firefox tests with retries. - name: Run all Chrome tests (only on Linux) if: ${{ matrix.spec.name == 'Linux' }} run: xvfb-run --auto-servernum npm run test:chrome - name: Run all Firefox tests (only on Linux) if: ${{ matrix.spec.name == 'Linux' }} uses: nick-invision/retry@v2 with: command: xvfb-run --auto-servernum npm run test:firefox timeout_minutes: 20 max_attempts: 3 # On other platforms we only run chrome:headless tests and continue on Firefox errors. - name: Test Chrome Headless (not on Linux) id: test-chrome if: ${{ matrix.spec.name != 'Linux' }} run: npm run test:chrome:headless - name: Run all Firefox tests (not on Linux) if: ${{ matrix.spec.name != 'Linux' }} continue-on-error: true run: npm run test:firefox - name: Test bundling and installation if: ${{ matrix.spec.name == 'Linux' }} run: | # Note: this modifies package.json to test puppeteer-core, so we test this last. npm run test:install docker-tests: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest] node: [16] steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 2 - name: Set up Node.js uses: actions/setup-node@v3.4.1 with: node-version: ${{ matrix.node }} - name: Install dependencies run: | npm install ls .local-chromium - name: Build run: | npm run build docker/pack.sh - name: Build docker image working-directory: ./docker run: | docker build -t puppeteer-test-image . - name: Run smoke test working-directory: ./docker run: | docker run -i --init --cap-add=SYS_ADMIN --rm puppeteer-test-image node -e "`cat test/smoke-test.js`"