mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
b72d9498fb
This PR adds an official Dockerfile for Puppeteer. The content of the Dockerfile is practically the same as documented in troubleshooting.md: 1) It installs chrome-stable and dependencies via apt-get. 2) it installs a local Puppeteer build into the docker user's home folder. 3) configures required permissions for the user. 4) outputs licenses into the THIRD_PARTY_NOTICES file. The local Puppeteer build is created by `docker/pack.sh` which is meant to be used in CI. This PR also includes a GitHub action that would build a docker image and run a smote test inside of it. The next step would be actually publishing the docker image from GitHub Actions to GitHub Registry.
216 lines
6.2 KiB
YAML
216 lines
6.2 KiB
YAML
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.3.0
|
|
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.3.0
|
|
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.3.0
|
|
with:
|
|
cache: npm
|
|
- name: Install dependencies
|
|
working-directory: ./website
|
|
run: npm ci
|
|
- name: Build website
|
|
working-directory: ./website
|
|
env:
|
|
NODE_OPTIONS: --max-old-space-size=4096
|
|
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.3.0
|
|
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
|
|
- name: Run all tests (only on Linux)
|
|
id: full-test
|
|
if: ${{ matrix.spec.name == 'Linux' }}
|
|
run: xvfb-run --auto-servernum npm test
|
|
- name: Test Chrome
|
|
id: test-chrome
|
|
if: ${{ steps.full-test.conclusion == 'skipped' }}
|
|
run: npm run test:chrome
|
|
- name: Test Firefox
|
|
if: ${{ steps.test-chrome.conclusion != 'skipped' }}
|
|
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.1.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`"
|