chore: release main #9359
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: | |
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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
fetch-depth: 2 | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
cache: npm | |
node-version: lts/* | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
# Set up GitHub Actions caching for Wireit. | |
- uses: google/wireit@f3a3c79c553122e2fe5829eeac7d815326502903 # setup-github-actions-caching/v1 | |
- 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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
cache: npm | |
node-version: lts/* | |
- 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@373f7f263a76c20808c831209c920827a82a2847 # v3.9.3 | |
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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
cache: npm | |
node-version: lts/* | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
- name: Run tests | |
run: npm run doctest | |
chrome-tests: | |
name: ${{ matrix.suite }} tests on ${{ matrix.os }} (${{ matrix.shard }}) | |
runs-on: ${{ matrix.os }} | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-latest | |
- windows-latest | |
- macos-latest | |
suite: | |
- chrome-headless | |
- chrome-headful | |
- chrome-new-headless | |
- chrome-bidi | |
shard: | |
- 1/2 | |
- 2/2 | |
exclude: | |
- os: windows-latest | |
suite: chrome-bidi | |
- os: macos-latest | |
suite: chrome-headful | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
cache: npm | |
node-version: lts/* | |
- name: Set up FFmpeg | |
uses: FedericoCarboni/setup-ffmpeg@5058c9851b649ced05c3e73a4fb5ef2995a89127 # v2.0.0 | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
# Set up GitHub Actions caching for Wireit. | |
- uses: google/wireit@f3a3c79c553122e2fe5829eeac7d815326502903 # setup-github-actions-caching/v1 | |
- name: Build packages | |
run: npm run build --workspace @puppeteer-test/test | |
- name: Setup cache for Chrome binary | |
if: ${{ matrix.suite != 'chrome-bidi' }} | |
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 | |
with: | |
path: ~/.cache/puppeteer/chrome | |
key: ${{ runner.os }}-Chrome-${{ hashFiles('packages/puppeteer-core/src/revisions.ts') }}-${{ hashFiles('packages/puppeteer/src/node/install.ts') }} | |
- name: Install Chrome | |
if: ${{ matrix.suite != 'chrome-bidi' }} | |
run: npm run postinstall | |
- name: Setup cache for Chrome Canary binary | |
if: ${{ matrix.suite == 'chrome-bidi' }} | |
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 | |
with: | |
path: ~/.cache/puppeteer/chrome-canary | |
key: ${{ runner.os }}-Chrome-Canary-${{ hashFiles('package.json') }} | |
- name: Install Chrome Canary | |
if: ${{ matrix.suite == 'chrome-bidi' }} | |
id: browser | |
run: node tools/download_chrome_bidi.mjs ~/.cache/puppeteer/chrome-canary | |
- name: Run all tests (for non-Linux) | |
if: ${{ matrix.os != 'ubuntu-latest' }} | |
run: npm run test -- --shard '${{ matrix.shard }}' --test-suite ${{ matrix.suite }} --save-stats-to /tmp/artifacts/${{ github.event_name }}_INSERTID.json | |
env: | |
PUPPETEER_EXECUTABLE_PATH: ${{ steps.browser.outputs.executablePath }} | |
- name: Run all tests (for 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 | |
env: | |
PUPPETEER_EXECUTABLE_PATH: ${{ steps.browser.outputs.executablePath }} | |
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 | |
if: always() | |
with: | |
name: test-results | |
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 }} tests on ${{ matrix.os }} (${{ matrix.shard }}) | |
runs-on: ${{ matrix.os }} | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-latest | |
- macos-latest | |
suite: | |
- firefox-bidi | |
- firefox-headful | |
- firefox-headless | |
shard: | |
- 1/4 | |
- 2/4 | |
- 3/4 | |
- 4/4 | |
exclude: | |
- os: macos-latest | |
suite: firefox-headful | |
- os: macos-latest | |
suite: firefox-headless | |
# Disabled due to https://bugzilla.mozilla.org/show_bug.cgi?id=1843550 | |
# The first time the browsers launches it crashes. | |
- os: macos-latest | |
suite: firefox-bidi | |
steps: | |
- name: Checkout | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
cache: npm | |
node-version: lts/* | |
- name: Set up FFmpeg | |
uses: FedericoCarboni/setup-ffmpeg@5058c9851b649ced05c3e73a4fb5ef2995a89127 # v2.0.0 | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
# Set up GitHub Actions caching for Wireit. | |
- uses: google/wireit@f3a3c79c553122e2fe5829eeac7d815326502903 # setup-github-actions-caching/v1 | |
- name: Build packages | |
run: npm run build --workspace @puppeteer-test/test | |
- name: Setup cache for Firefox binary | |
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3.3.2 | |
with: | |
path: ~/.cache/puppeteer/firefox | |
key: ${{ runner.os }}-firefox-${{ hashFiles('packages/puppeteer-core/src/revisions.ts') }}-${{ hashFiles('packages/puppeteer/src/node/install.ts') }} | |
- name: Install Firefox | |
env: | |
PUPPETEER_PRODUCT: firefox | |
run: npm run postinstall | |
- name: Run all tests (for non-Linux) | |
if: ${{ matrix.os != 'ubuntu-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 (for 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@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 | |
if: always() | |
with: | |
name: test-results | |
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-build: | |
name: Build installation test | |
runs-on: ubuntu-latest | |
needs: check-changes | |
if: ${{ !startsWith(github.ref_name, 'release-please') && contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
cache: npm | |
node-version: lts/* | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
- name: Build installation test | |
run: npm run build --workspace @puppeteer-test/installation | |
- name: Pack installation test | |
run: npm pack --workspace @puppeteer-test/installation | |
- name: Upload installation test | |
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 | |
with: | |
name: installation-test | |
path: puppeteer-test-installation-latest.tgz | |
installation-test: | |
name: Test ${{ matrix.pkg_manager }} installation on ${{ matrix.os }} (${{ matrix.node }}) | |
needs: installation-test-build | |
if: ${{ !startsWith(github.ref_name, 'release-please') }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-latest | |
- macos-latest | |
- windows-latest | |
node: | |
- 18 | |
pkg_manager: | |
- npm | |
steps: | |
- name: Download installation test | |
uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 | |
with: | |
name: installation-test | |
- name: Unpack installation test | |
run: tar -xf puppeteer-test-installation-latest.tgz --strip-components 1 -C . | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
node-version: ${{ matrix.node }} | |
- name: Set up ${{ matrix.pkg_manager }} | |
run: npm install -g ${{ matrix.pkg_manager }}@latest | |
- name: Install dependencies | |
run: ${{ matrix.pkg_manager }} install | |
- name: Test | |
env: | |
PKG_MANAGER: ${{ matrix.pkg_manager }} | |
run: ${{ matrix.pkg_manager }} test | |
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] Test Docker image' | |
runs-on: ubuntu-latest | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'puppeteer') }} | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
fetch-depth: 2 | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
cache: npm | |
node-version: lts/* | |
- 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] 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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
cache: npm | |
node-version: lts/* | |
- 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-tests: | |
name: '[Required] Test Angular Schematics' | |
runs-on: ubuntu-latest | |
needs: check-changes | |
if: ${{ contains(fromJSON(needs.check-changes.outputs.changes), 'ng-schematics') }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
cache: npm | |
node-version: lts/* | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
- name: Run tests | |
run: npm run test --workspace @puppeteer/ng-schematics | |
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: | |
os: | |
- ubuntu-latest | |
- windows-latest | |
- macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: Set up Node.js | |
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 | |
with: | |
cache: npm | |
node-version: lts/* | |
- name: Install dependencies | |
run: npm ci | |
env: | |
PUPPETEER_SKIP_DOWNLOAD: true | |
- 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' |