chore: release main #16965
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
# Declare default permissions as read only. | |
permissions: read-all | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
types: | |
# These are the defaults. See | |
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request | |
- opened | |
- reopened | |
- synchronize | |
# Used for `full-ci` | |
- labeled | |
branches: | |
- '**' | |
concurrency: | |
group: ci-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
inspect-code: | |
name: '[Required] Inspect code' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: 2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
# Set up GitHub Actions caching for Wireit. | |
- uses: google/wireit@eea3c9f0385a39e6eb4ff6a6daa273311381d436 # setup-github-actions-caching/v2.0.2 | |
- name: Check code | |
run: npm run check | |
- name: Validate licenses | |
run: npm run validate-licenses | |
- name: Build every package | |
run: npm run build | |
- name: Tests types | |
run: npm run test-types | |
- name: Lint code | |
run: npm run lint | |
- name: Generate documents | |
run: npm run docs | |
- name: Check if autogenerated docs differ | |
run: | | |
diff_file=$(mktemp doc_diff_XXXXXX) | |
git diff --color > $diff_file | |
if [[ -s $diff_file ]]; then | |
echo "Please update the documentation by running 'npm run docs'. The following was the diff" | |
cat $diff_file | |
rm $diff_file | |
exit 1 | |
fi | |
rm $diff_file | |
check-changes: | |
uses: ./.github/workflows/changed-packages.yml | |
with: | |
check-mergeable-state: true | |
deploy-docs: | |
needs: check-changes | |
name: Deploy docs (if needed) | |
if: ${{ github.event_name != 'pull_request' && contains(fromJSON(needs.check-changes.outputs.changes), 'website') }} | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Install dependencies | |
working-directory: ./website | |
run: npm ci | |
- 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@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4.0.0 | |
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 | |
- name: Test Algolia if Crawler is blocked | |
env: | |
CRAWLER_USER_ID: ${{secrets.ALGOLIA_CRAWLER_USER_ID}} | |
CRAWLER_API_KEY: ${{secrets.ALGOLIA_CRAWLER_API_KEY}} | |
CRAWLER_ID: ${{secrets.ALGOLIA_CRAWLER_ID}} | |
run: | | |
RESPONSE=$(curl -H "Content-Type: application/json" -X GET --user "$CRAWLER_USER_ID:$CRAWLER_API_KEY" \ | |
"https://crawler.algolia.com/api/1/crawlers/$CRAWLER_ID" | grep "\"blocked\":true" || true ); \ | |
if [ ! -z "$RESPONSE" ]; then echo "Please go to https://crawler.algolia.com/" && exit 1; fi | |
- name: Trigger Algolia reindexing | |
env: | |
CRAWLER_USER_ID: ${{secrets.ALGOLIA_CRAWLER_USER_ID}} | |
CRAWLER_API_KEY: ${{secrets.ALGOLIA_CRAWLER_API_KEY}} | |
CRAWLER_ID: ${{secrets.ALGOLIA_CRAWLER_ID}} | |
run: | | |
curl -H "Content-Type: application/json" -X POST --user "$CRAWLER_USER_ID:$CRAWLER_API_KEY" \ | |
"https://crawler.algolia.com/api/1/crawlers/$CRAWLER_ID/reindex" | |
doctest: | |
name: Doctest | |
runs-on: ubuntu-latest | |
needs: check-changes | |
if: ${{ false && contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Disable AppArmor | |
run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
- name: Run tests | |
run: npm run doctest | |
chrome-tests: | |
name: ${{ matrix.suite }} (${{ matrix.shard }}) on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
strategy: | |
fail-fast: false | |
matrix: | |
linux-only: | |
- ${{ github.event_name == 'pull_request' && !contains(github.head_ref, 'release-please') && !contains(github.event.pull_request.labels.*.name, 'full-ci') }} | |
suite: | |
- chrome-headless | |
- chrome-headful | |
- chrome-headless-shell | |
- chrome-bidi | |
os: | |
- ubuntu-latest | |
- windows-latest | |
- macos-latest | |
shard: | |
- 1-2 | |
- 2-2 | |
exclude: | |
- linux-only: true | |
os: windows-latest | |
- linux-only: true | |
os: macos-latest | |
- linux-only: true | |
suite: chrome-headful | |
- os: windows-latest | |
suite: chrome-bidi | |
- os: macos-latest | |
suite: chrome-headful | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Disable AppArmor | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
# Set up GitHub Actions caching for Wireit. | |
- uses: google/wireit@eea3c9f0385a39e6eb4ff6a6daa273311381d436 # setup-github-actions-caching/v2.0.2 | |
- name: Build packages | |
run: npm run build --workspace @puppeteer-test/test | |
- name: Setup cache for browsers | |
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 | |
with: | |
path: ~/.cache/puppeteer/ | |
key: Browsers-${{ runner.os }}-${{ hashFiles('packages/puppeteer-core/src/revisions.ts') }}-${{ hashFiles('packages/puppeteer/src/node/install.ts') }} | |
- name: Install browsers | |
run: npm run postinstall | |
- name: Run all tests (MacOS) | |
if: ${{ matrix.os == 'macos-latest' }} | |
run: npm run test -- --shard '${{ matrix.shard }}' --test-suite ${{ matrix.suite }} --save-stats-to /tmp/artifacts/${{ github.event_name }}_INSERTID.json | |
- name: Run all tests (Windows) | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: npm run test -- -- --shard '${{ matrix.shard }}' --test-suite ${{ matrix.suite }} --save-stats-to /tmp/artifacts/${{ github.event_name }}_INSERTID.json | |
- name: Run all tests (Linux) | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: xvfb-run --auto-servernum npm run test -- --shard '${{ matrix.shard }}' --test-suite ${{ matrix.suite }} --save-stats-to /tmp/artifacts/${{ github.event_name }}_INSERTID.json | |
- uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
if: always() | |
with: | |
name: test-results-${{ matrix.os }}-${{ matrix.suite }}-${{ matrix.shard }} | |
path: /tmp/artifacts/*.json | |
chrome-tests-required: | |
name: '[Required] Chrome tests' | |
needs: [check-changes, chrome-tests] | |
runs-on: ubuntu-latest | |
if: ${{ always() }} | |
steps: | |
- if: ${{ needs.chrome-tests.result != 'success' && contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
run: 'exit 1' | |
- run: 'exit 0' | |
firefox-tests: | |
name: ${{ matrix.suite }} (${{ matrix.shard }}) on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
strategy: | |
fail-fast: false | |
matrix: | |
linux-only: | |
- ${{ github.event_name == 'pull_request' && !contains(github.head_ref, 'release-please') && !contains(github.event.pull_request.labels.*.name, 'full-ci') }} | |
suite: | |
- firefox-headful | |
- firefox-headless | |
os: | |
- ubuntu-latest | |
- macos-latest | |
- windows-latest | |
shard: | |
- 1-4 | |
- 2-4 | |
- 3-4 | |
- 4-4 | |
exclude: | |
- linux-only: true | |
os: windows-latest | |
- linux-only: true | |
os: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Disable AppArmor | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
# Set up GitHub Actions caching for Wireit. | |
- uses: google/wireit@eea3c9f0385a39e6eb4ff6a6daa273311381d436 # setup-github-actions-caching/v2.0.2 | |
- name: Build packages | |
run: npm run build --workspace @puppeteer-test/test | |
- name: Setup cache for browsers | |
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 | |
with: | |
path: ~/.cache/puppeteer/ | |
key: Browsers-${{ runner.os }}-${{ hashFiles('packages/puppeteer-core/src/revisions.ts') }}-${{ hashFiles('packages/puppeteer/src/node/install.ts') }} | |
- name: Install browsers | |
run: npm run postinstall | |
- name: Run all tests (MacOS) | |
if: ${{ matrix.os == 'macos-latest' }} | |
run: npm run test -- --shard '${{ matrix.shard }}' --test-suite ${{ matrix.suite }} --save-stats-to /tmp/artifacts/${{ github.event_name }}_INSERTID.json | |
- name: Run all tests (Windows) | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: npm run test -- -- --shard '${{ matrix.shard }}' --test-suite ${{ matrix.suite }} --save-stats-to /tmp/artifacts/${{ github.event_name }}_INSERTID.json | |
- name: Run all tests (Linux) | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: xvfb-run --auto-servernum npm run test -- --shard '${{ matrix.shard }}' --test-suite ${{ matrix.suite }} --save-stats-to /tmp/artifacts/${{ github.event_name }}_INSERTID.json | |
- uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | |
if: always() | |
with: | |
name: test-results-${{ matrix.os }}-${{ matrix.suite }}-${{ matrix.shard }} | |
path: /tmp/artifacts/*.json | |
firefox-tests-required: | |
name: '[Required] Firefox tests' | |
needs: [check-changes, firefox-tests] | |
runs-on: ubuntu-latest | |
if: ${{ always() }} | |
steps: | |
- if: ${{ needs.firefox-tests.result != 'success' && contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
run: 'exit 1' | |
- run: 'exit 0' | |
installation-test: | |
name: ${{ matrix.pkg_manager }} installation on ${{ matrix.os }} | |
needs: check-changes | |
if: ${{ !startsWith(github.ref_name, 'release-please') && contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
linux-only: | |
- ${{ github.event_name == 'pull_request' && !contains(github.head_ref, 'release-please') && !contains(github.event.pull_request.labels.*.name, 'full-ci') }} | |
pkg_manager: | |
- npm | |
os: | |
- ubuntu-latest | |
- windows-latest | |
- macos-latest | |
exclude: | |
- linux-only: true | |
os: windows-latest | |
- linux-only: true | |
os: macos-latest | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Disable AppArmor | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
# Set up GitHub Actions caching for Wireit. | |
- uses: google/wireit@eea3c9f0385a39e6eb4ff6a6daa273311381d436 # setup-github-actions-caching/v2.0.2 | |
- name: Setup cache for browsers | |
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 | |
with: | |
path: ~/.cache/puppeteer/ | |
key: Browsers-${{ runner.os }}-${{ hashFiles('packages/puppeteer-core/src/revisions.ts') }}-${{ hashFiles('packages/puppeteer/src/node/install.ts') }} | |
- name: Install browsers | |
run: npm run postinstall | |
- name: Test install | |
env: | |
PKG_MANAGER: ${{ matrix.pkg_manager }} | |
run: ${{ matrix.pkg_manager }} run test-install | |
installation-test-required: | |
name: '[Required] Installation tests' | |
needs: [check-changes, installation-test] | |
runs-on: ubuntu-latest | |
if: ${{ always() }} | |
steps: | |
- if: ${{ needs.installation-test.result != 'success' && contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
run: 'exit 1' | |
- run: 'exit 0' | |
docker-tests: | |
name: '[Required] Docker image test' | |
runs-on: ubuntu-latest | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
fetch-depth: 2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
- name: Build packages | |
run: npm run build --workspace puppeteer | |
- name: Pack packages | |
run: 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`" | |
unit-tests: | |
name: '[Required] Puppeteer Unit tests' | |
runs-on: ubuntu-latest | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
- name: Run unit tests | |
run: | | |
npm run unit -w puppeteer-core -w puppeteer --if-present | |
ng-schematics-unit: | |
name: '[Required] Angular Schematics tests' | |
runs-on: ubuntu-latest | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'ng-schematics') }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
- name: Run tests | |
run: npm run unit --workspace @puppeteer/ng-schematics | |
ng-schematics-smoke-tests: | |
name: Angular Schematics smoke tests on ${{ matrix.os }} ${{ matrix.test-runner }} | |
runs-on: ${{ matrix.os }} | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'ng-schematics') }} | |
strategy: | |
fail-fast: false | |
matrix: | |
linux-only: | |
- ${{ github.event_name == 'pull_request' && !contains(github.head_ref, 'release-please') && !contains(github.event.pull_request.labels.*.name, 'full-ci') }} | |
os: | |
- ubuntu-latest | |
- windows-latest | |
- macos-latest | |
test-runner: | |
- node | |
- jest | |
- jasmine | |
- mocha | |
exclude: | |
- linux-only: true | |
os: windows-latest | |
- linux-only: true | |
os: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Disable AppArmor | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
- name: Build all and schematics | |
run: npm run build | |
- name: Install Browsers | |
run: npm run postinstall | |
- name: Run tests | |
run: node tools/smoke.mjs -r ${{ matrix.test-runner }} | |
working-directory: ./packages/ng-schematics | |
ng-schematics-smoke-tests-required: | |
name: '[Required] Angular Schematics smoke tests' | |
needs: [check-changes, ng-schematics-smoke-tests] | |
runs-on: ubuntu-latest | |
if: ${{ always() }} | |
steps: | |
- if: ${{ needs.ng-schematics-smoke-tests.result != 'success' && contains(fromJSON(needs.check-changes.outputs.changes), 'ng-schematics') }} | |
run: 'exit 1' | |
- run: 'exit 0' | |
browsers-tests: | |
name: Browsers tests on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'browsers') }} | |
strategy: | |
fail-fast: false | |
matrix: | |
linux-only: | |
- ${{ github.event_name == 'pull_request' && !contains(github.head_ref, 'release-please') && !contains(github.event.pull_request.labels.*.name, 'full-ci') }} | |
os: | |
- ubuntu-latest | |
- windows-latest | |
- macos-latest | |
exclude: | |
- linux-only: true | |
os: windows-latest | |
- linux-only: true | |
os: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set up Node.js | |
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 | |
with: | |
cache: npm | |
node-version-file: '.nvmrc' | |
- name: Disable AppArmor | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
- name: Setup cache for browsers | |
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 | |
with: | |
path: packages/browsers/test/.cache/server | |
key: TestBrowsers-${{ runner.os }}-${{ hashFiles('packages/browsers/test/src/versions.ts') }}-${{ hashFiles('packages/browsers/tools/downloadTestBrowsers.mjs') }} | |
- name: Run tests | |
run: npm run test --workspace @puppeteer/browsers | |
browsers-tests-required: | |
name: '[Required] Test the browsers packages' | |
needs: [check-changes, browsers-tests] | |
runs-on: ubuntu-latest | |
if: ${{ always() }} | |
steps: | |
- if: ${{ needs.browsers-tests.result != 'success' && contains(fromJSON(needs.check-changes.outputs.changes), 'browsers') }} | |
run: 'exit 1' | |
- run: 'exit 0' |