playwright/browser_patches/docker/cli.sh

99 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# This script is designed to build Firefox & WebKit on various Linux
# distributions inside docker containers.
set -e
set +x
set -o pipefail
if [[ ($1 == '--help') || ($1 == '-h') ]]; then
echo "usage: $(basename "$0") [webkit-ubuntu-20.04|firefox-debian-11|...] [build|test|compile|enter|cleanup]"
echo
echo "Builds Webkit or Firefox browser inside given Linux distribution"
exit 0
fi
trap "cd $(pwd -P)" EXIT
cd "$(dirname "$0")"
SCRIPT_FOLDER="$(pwd -P)"
export BUILD_FLAVOR="${1}"
export BROWSER_NAME=""
DOCKERFILE=""
if [[ "${BUILD_FLAVOR}" == "firefox-beta-"* ]]; then
DOCKERFILE="${SCRIPT_FOLDER}/firefox-beta/${BUILD_FLAVOR#firefox-beta-}.dockerfile"
BROWSER_NAME="firefox-beta"
elif [[ "${BUILD_FLAVOR}" == "firefox-"* ]]; then
DOCKERFILE="${SCRIPT_FOLDER}/firefox/${BUILD_FLAVOR#firefox-}.dockerfile"
BROWSER_NAME="firefox"
elif [[ "${BUILD_FLAVOR}" == "webkit-"* ]]; then
DOCKERFILE="${SCRIPT_FOLDER}/webkit/${BUILD_FLAVOR#webkit-}.dockerfile"
BROWSER_NAME="webkit"
else
echo "ERROR: unknown build flavor - ${BUILD_FLAVOR}"
exit 1
fi
if [[ "${BUILD_FLAVOR}" == *"-arm64" ]]; then
EXPECTED_ARCH="arm64"
DOCKER_PLATFORM="linux/arm64"
else
EXPECTED_ARCH="x86_64"
DOCKER_PLATFORM="linux/amd64"
fi
if [[ $(arch) != "${EXPECTED_ARCH}" ]]; then
echo "ERROR: host architecture $(arch) does not match expected architecture - ${EXPECTED_ARCH}"
exit 1
fi
DOCKER_IMAGE_NAME="${BUILD_FLAVOR}"
DOCKER_CONTAINER_NAME="${BUILD_FLAVOR}"
DOCKER_ARGS=$(echo \
--env CI \
--env BUILD_FLAVOR \
--env BROWSER_NAME \
--env TELEGRAM_BOT_KEY \
--env AZ_ACCOUNT_NAME \
--env AZ_ACCOUNT_KEY \
--env GITHUB_SERVER_URL \
--env GITHUB_REPOSITORY \
--env GITHUB_RUN_ID \
--env GH_TOKEN \
--env DEBIAN_FRONTEND=noninteractive \
--env TZ="America/Los_Angeles"
)
if [[ "$2" == "build" ]]; then
docker build \
--build-arg ARG_BUILD_FLAVOR="${BUILD_FLAVOR}" \
--build-arg ARG_BROWSER_NAME="${BROWSER_NAME}" \
--no-cache \
--platform "${DOCKER_PLATFORM}" \
-t "${DOCKER_IMAGE_NAME}" \
-f "${DOCKERFILE}" .
elif [[ "$2" == "test" ]]; then
docker run --rm ${DOCKER_ARGS} --init --name "${DOCKER_CONTAINER_NAME}" --platform "${DOCKER_PLATFORM}" -it "${DOCKER_IMAGE_NAME}" /bin/bash -c '
CI=1 ./browser_patches/prepare_checkout.sh "${BROWSER_NAME}"
./browser_patches/build.sh "${BROWSER_NAME}" --full
./browser_patches/${BROWSER_NAME}/archive.sh $PWD/archive.zip
'
elif [[ "$2" == "compile" ]]; then
docker run --rm ${DOCKER_ARGS} --init --name "${DOCKER_CONTAINER_NAME}" --platform "${DOCKER_PLATFORM}" -t "${DOCKER_IMAGE_NAME}" /bin/bash -c '
./browser_patches/checkout_build_archive_upload.sh "${BUILD_FLAVOR}"
'
elif [[ "$2" == "enter" ]]; then
docker run --rm ${DOCKER_ARGS} --init --name "${DOCKER_CONTAINER_NAME}" --platform "${DOCKER_PLATFORM}" -it "${DOCKER_IMAGE_NAME}" /bin/bash
elif [[ "$2" == "cleanup" ]]; then
docker kill "${DOCKER_CONTAINER_NAME}" || true
# Wait for container to stop
docker wait "${DOCKER_CONTAINER_NAME}" || true
docker rmi "${DOCKER_IMAGE_NAME}"
docker system prune -f
else
echo "ERROR: unknown command - $2"
exit 1
fi