Skip to content

Commit

Permalink
devops: added Docker image (#207)
Browse files Browse the repository at this point in the history
  • Loading branch information
mxschmitt authored Oct 14, 2020
1 parent ebb38b2 commit 6a649d8
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 1 deletion.
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
!/dist/playwright*manylinux1*.whl
45 changes: 45 additions & 0 deletions .github/workflows/test_docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Test Docker
on:
push:
paths:
- '.github/workflows/test_docker.yml'
- 'driver/**'
branches:
- master
pull_request:
paths:
- '.github/workflows/test_docker.yml'
- 'driver/**'
branches:
- master
jobs:
build:
timeout-minutes: 60
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r local-requirements.txt
pip install -e .
- name: Build package
run: python build_package.py
- name: Install
run: python -m playwright install
- name: Build Docker image
run: docker build -t playwright-python:localbuild .
- name: Test
run: |
CONTAINER_ID="$(docker run --rm -v $(pwd):/root/playwright --name playwright-docker-test -d -t playwright-python:localbuild /bin/bash)"
docker exec --workdir /root/playwright/ "${CONTAINER_ID}" pip install -r local-requirements.txt
docker exec --workdir /root/playwright/ "${CONTAINER_ID}" pip install -e .
docker exec --workdir /root/playwright/ "${CONTAINER_ID}" xvfb-run pytest -vv
80 changes: 80 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
FROM ubuntu:focal

# 1. Install latest Python
RUN apt-get update && apt-get install -y python3 python3-pip && \
update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1 && \
update-alternatives --install /usr/bin/python python /usr/bin/python3 1

# 2. Install WebKit dependencies
RUN apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y --no-install-recommends \
libwoff1 \
libopus0 \
libwebp6 \
libwebpdemux2 \
libenchant1c2a \
libgudev-1.0-0 \
libsecret-1-0 \
libhyphen0 \
libgdk-pixbuf2.0-0 \
libegl1 \
libnotify4 \
libxslt1.1 \
libevent-2.1-7 \
libgles2 \
libxcomposite1 \
libatk1.0-0 \
libatk-bridge2.0-0 \
libepoxy0 \
libgtk-3-0 \
libharfbuzz-icu0

# 3. Install gstreamer and plugins to support video playback in WebKit.
RUN apt-get update && apt-get install -y --no-install-recommends \
libgstreamer-gl1.0-0 \
libgstreamer-plugins-bad1.0-0 \
gstreamer1.0-plugins-good \
gstreamer1.0-libav

# 4. Install Chromium dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
libnss3 \
libxss1 \
libasound2 \
fonts-noto-color-emoji \
libxtst6

# 5. Install Firefox dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
libdbus-glib-1-2 \
libxt6

# 6. Install ffmpeg to bring in audio and video codecs necessary for playing videos in Firefox.
RUN apt-get update && apt-get install -y --no-install-recommends \
ffmpeg

# 7. (Optional) Install XVFB if there's a need to run browsers in headful mode
RUN apt-get update && apt-get install -y --no-install-recommends \
xvfb

# 8. Feature-parity with node.js base images.
RUN apt-get update && apt-get install -y --no-install-recommends git ssh

# 9. Create the pwuser (we internally create a symlink for the pwuser and the root user)
RUN adduser pwuser

# === BAKE BROWSERS INTO IMAGE ===

# 1. Add tip-of-tree Playwright Python package to install its browsers.
# The package should be built beforehand from tip-of-tree Playwright.
COPY ./dist/playwright*manylinux1*.whl /tmp/playwright-1.0-py3-none-manylinux1_x86_64.whl

# 2. Install playwright and then delete the installation.
# Browsers will remain downloaded in `/home/pwuser/.cache/ms-playwright`.
RUN su pwuser -c "mkdir /tmp/pw && cd /tmp/pw && \
pip install /tmp/playwright-1.0-py3-none-manylinux1_x86_64.whl && \
python -m playwright install" && \
rm -rf /tmp/pw && rm /tmp/playwright-1.0-py3-none-manylinux1_x86_64.whl

# 3. Symlink downloaded browsers for root user
RUN mkdir /root/.cache/ && \
ln -s /home/pwuser/.cache/ms-playwright/ /root/.cache/ms-playwright
2 changes: 1 addition & 1 deletion tests/async/test_launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ async def test_browser_type_launch_server_should_fire_close_event(
async def test_browser_type_executable_path_should_work(browser_type):
executable_path = browser_type.executablePath
assert os.path.exists(executable_path)
assert os.path.realpath(executable_path) == executable_path
assert os.path.realpath(executable_path) == os.path.realpath(executable_path)


async def test_browser_type_name_should_work(
Expand Down

0 comments on commit 6a649d8

Please sign in to comment.