From b84b49d97a0518feeb270816fe87bdd0451276a3 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Wed, 12 Apr 2023 19:18:41 +0200 Subject: [PATCH] devops: publish Jammy Docker images --- .github/workflows/test_docker.yml | 17 +++++---- utils/docker/Dockerfile.jammy | 57 +++++++++++++++++++++++++++++++ utils/docker/build.sh | 2 +- utils/docker/publish_docker.sh | 37 +++++++++++--------- 4 files changed, 90 insertions(+), 23 deletions(-) create mode 100644 utils/docker/Dockerfile.jammy diff --git a/.github/workflows/test_docker.yml b/.github/workflows/test_docker.yml index cc3a18fd6..0a9a401f1 100644 --- a/.github/workflows/test_docker.yml +++ b/.github/workflows/test_docker.yml @@ -1,4 +1,4 @@ -name: Test Docker +name: Docker on: push: paths: @@ -18,13 +18,18 @@ on: - release-* jobs: test: - timeout-minutes: 60 - runs-on: ubuntu-20.04 + name: Test + timeout-minutes: 120 + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + flavor: [focal, jammy] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Build Docker image - run: bash utils/docker/build.sh --amd64 focal playwright-java:localbuild-focal + run: bash utils/docker/build.sh --amd64 ${{ matrix.flavor }} playwright-java:localbuild-${{ matrix.flavor }} - name: Test run: | - CONTAINER_ID="$(docker run --rm --ipc=host -v $(pwd):/root/playwright --name playwright-docker-test -d -t playwright-java:localbuild-focal /bin/bash)" + CONTAINER_ID="$(docker run --rm --ipc=host -v $(pwd):/root/playwright --name playwright-docker-test -d -t playwright-java:localbuild-${{ matrix.flavor }} /bin/bash)" docker exec "${CONTAINER_ID}" /root/playwright/tools/test-local-installation/create_project_and_run_tests.sh diff --git a/utils/docker/Dockerfile.jammy b/utils/docker/Dockerfile.jammy new file mode 100644 index 000000000..b64d9f680 --- /dev/null +++ b/utils/docker/Dockerfile.jammy @@ -0,0 +1,57 @@ +FROM ubuntu:jammy + +ARG DEBIAN_FRONTEND=noninteractive +ARG TZ=America/Los_Angeles +ARG DOCKER_IMAGE_NAME_TEMPLATE="mcr.microsoft.com/playwright/java:v%version%-jammy" + +# === INSTALL JDK and Maven === + +RUN apt-get update && \ + # Install install jdk 17 in a separate apt-get command so that + # installing maven doesn't bring in jdk 11 + apt-get install -y --no-install-recommends openjdk-17-jdk && \ + apt-get install -y --no-install-recommends \ + # Ubuntu 22.04 and earlier come with Maven 3.6.3 which fails with + # Java 17, so we install latest Maven from Apache instead. + # maven \ + # Install utilities required for downloading browsers + curl \ + # Install utilities required for downloading driver + unzip \ + # For the MSEdge install script + gpg && \ + rm -rf /var/lib/apt/lists/* && \ + # Create the pwuser + adduser pwuser + +RUN VERSION=3.8.8 && \ + curl -o - https://archive.apache.org/dist/maven/maven-3/$VERSION/binaries/apache-maven-$VERSION-bin.tar.gz | tar zxfv - -C /opt/ && \ + ln -s /opt/apache-maven-$VERSION/bin/mvn /usr/local/bin/ + +ARG PW_TARGET_ARCH +ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-${PW_TARGET_ARCH} + +# === BAKE BROWSERS INTO IMAGE === + +# Browsers will remain downloaded in `/ms-playwright`. +# Note: make sure to set 777 to the registry so that any user can access +# registry. + +ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright + +RUN mkdir /ms-playwright && \ + mkdir /tmp/pw-java + +COPY . /tmp/pw-java + +RUN cd /tmp/pw-java && \ + ./scripts/download_driver_for_all_platforms.sh && \ + mvn install -D skipTests --no-transfer-progress && \ + DEBIAN_FRONTEND=noninteractive mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI \ + -D exec.args="install-deps" -f playwright/pom.xml --no-transfer-progress && \ + mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI \ + -D exec.args="install" -f playwright/pom.xml --no-transfer-progress && \ + mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI \ + -D exec.args="mark-docker-image '${DOCKER_IMAGE_NAME_TEMPLATE}'" -f playwright/pom.xml --no-transfer-progress && \ + rm -rf /tmp/pw-java && \ + chmod -R 777 $PLAYWRIGHT_BROWSERS_PATH diff --git a/utils/docker/build.sh b/utils/docker/build.sh index fa6046773..03d162873 100755 --- a/utils/docker/build.sh +++ b/utils/docker/build.sh @@ -3,7 +3,7 @@ set -e set +x if [[ ($1 == '--help') || ($1 == '-h') || ($1 == '') || ($2 == '') ]]; then - echo "usage: $(basename $0) {--arm64,--amd64} {focal} playwright:localbuild-focal" + echo "usage: $(basename $0) {--arm64,--amd64} {focal,jammy} playwright:localbuild-focal" echo echo "Build Playwright docker image and tag it as 'playwright:localbuild-focal'." echo "Once image is built, you can run it with" diff --git a/utils/docker/publish_docker.sh b/utils/docker/publish_docker.sh index 17e1c5fee..246a8abf6 100755 --- a/utils/docker/publish_docker.sh +++ b/utils/docker/publish_docker.sh @@ -34,14 +34,6 @@ if [[ -z "${GITHUB_SHA}" ]]; then exit 1 fi -BIONIC_TAGS=( - "next-bionic" - "v${PW_VERSION}-bionic" -) -if [[ "$RELEASE_CHANNEL" == "stable" ]]; then - BIONIC_TAGS+=("bionic") -fi - FOCAL_TAGS=( "next" "sha-${GITHUB_SHA}" @@ -55,6 +47,15 @@ if [[ "$RELEASE_CHANNEL" == "stable" ]]; then FOCAL_TAGS+=("v${PW_VERSION}") fi +JAMMY_TAGS=( + "next-jammy" + "v${PW_VERSION}-jammy" +) + +if [[ "$RELEASE_CHANNEL" == "stable" ]]; then + JAMMY_TAGS+=("jammy") +fi + tag_and_push() { local source="$1" local target="$2" @@ -66,12 +67,12 @@ tag_and_push() { publish_docker_images_with_arch_suffix() { local FLAVOR="$1" local TAGS=() - if [[ "$FLAVOR" == "bionic" ]]; then - TAGS=("${BIONIC_TAGS[@]}") - elif [[ "$FLAVOR" == "focal" ]]; then + if [[ "$FLAVOR" == "focal" ]]; then TAGS=("${FOCAL_TAGS[@]}") + elif [[ "$FLAVOR" == "jammy" ]]; then + TAGS=("${JAMMY_TAGS[@]}") else - echo "ERROR: unknown flavor - $FLAVOR. Must be either 'bionic' or 'focal'" + echo "ERROR: unknown flavor - $FLAVOR. Must be either 'focal' or 'jammy'" exit 1 fi local ARCH="$2" @@ -92,12 +93,12 @@ publish_docker_images_with_arch_suffix() { publish_docker_manifest () { local FLAVOR="$1" local TAGS=() - if [[ "$FLAVOR" == "bionic" ]]; then - TAGS=("${BIONIC_TAGS[@]}") - elif [[ "$FLAVOR" == "focal" ]]; then + if [[ "$FLAVOR" == "focal" ]]; then TAGS=("${FOCAL_TAGS[@]}") + elif [[ "$FLAVOR" == "jammy" ]]; then + TAGS=("${JAMMY_TAGS[@]}") else - echo "ERROR: unknown flavor - $FLAVOR. Must be either 'bionic' or 'focal'" + echo "ERROR: unknown flavor - $FLAVOR. Must be either 'focal' or 'jammy'" exit 1 fi @@ -119,3 +120,7 @@ publish_docker_manifest () { publish_docker_images_with_arch_suffix focal amd64 publish_docker_images_with_arch_suffix focal arm64 publish_docker_manifest focal amd64 arm64 + +publish_docker_images_with_arch_suffix jammy amd64 +publish_docker_images_with_arch_suffix jammy arm64 +publish_docker_manifest jammy amd64 arm64