diff --git a/resources/docker-images/base/Dockerfile b/resources/docker-images/base/Dockerfile index 87516b3f96..ae0d098acf 100644 --- a/resources/docker-images/base/Dockerfile +++ b/resources/docker-images/base/Dockerfile @@ -1,7 +1,8 @@ # Keyman is copyright (C) SIL Global. MIT License. -ARG UBUNTU_VERSION=latest -FROM ubuntu:${UBUNTU_VERSION} +ARG DISTRO=ubuntu +ARG DISTRO_VERSION=latest +FROM ${DISTRO}:${DISTRO_VERSION} LABEL org.opencontainers.image.authors="SIL Global." LABEL org.opencontainers.image.url="https://github.com/keymanapp/keyman.git" @@ -21,8 +22,10 @@ ENV DEBCONF_NOWARNINGS=yes # Update to the latest RUN apt-get -q -y update && \ apt-get -q -y install ca-certificates curl gnupg meson software-properties-common sudo && \ - add-apt-repository ppa:keymanapp/keyman && \ - add-apt-repository ppa:keymanapp/keyman-alpha + if [[ "$(lsb_release -is)" == "Ubuntu" ]]; then \ + add-apt-repository ppa:keymanapp/keyman && \ + add-apt-repository ppa:keymanapp/keyman-alpha ; \ + fi RUN apt-get -q -y update && \ apt-get -q -y upgrade diff --git a/resources/docker-images/build.sh b/resources/docker-images/build.sh index 8100459d47..b97e267d99 100755 --- a/resources/docker-images/build.sh +++ b/resources/docker-images/build.sh @@ -18,7 +18,9 @@ builder_describe \ ":core" \ ":linux" \ ":web" \ - "--ubuntu-version=UBUNTU_VERSION The Ubuntu version (default: ${KEYMAN_DEFAULT_VERSION_UBUNTU_CONTAINER})" \ + "--distro=DISTRO The distribution to use for the base image "\ + " (debian or ubuntu, default: ubuntu)" \ + "--distro-version=DISTRO_VERSION The Ubuntu/Debian version (default: ${KEYMAN_DEFAULT_VERSION_UBUNTU_CONTAINER})" \ "--no-cache Force rebuild of docker images" \ "build Build docker images" \ "test Test the docker images by running configure,build,test for all or the specified platforms" @@ -31,11 +33,7 @@ _add_build_args() { local name=$3 local value - if [[ -n "${!var:-}" ]]; then - value="${!var}" - else - value="${!default_var:-}" - fi + value="${!var:=${!default_var:-}}" build_args+=(--build-arg="${var}=${value}") @@ -49,11 +47,14 @@ _add_build_args() { _convert_parameters_to_build_args() { build_args=() build_version= - local required_node_version + local required_node_version keyman_default_distro # shellcheck disable=SC2034 required_node_version="$(_print_expected_node_version)" + # shellcheck disable=SC2034 + keyman_default_distro="ubuntu" - _add_build_args UBUNTU_VERSION KEYMAN_DEFAULT_VERSION_UBUNTU_CONTAINER "" + _add_build_args DISTRO keyman_default_distro "" + _add_build_args DISTRO_VERSION KEYMAN_DEFAULT_VERSION_UBUNTU_CONTAINER "" _add_build_args JAVA_VERSION KEYMAN_VERSION_JAVA java _add_build_args REQUIRED_NODE_VERSION required_node_version node _add_build_args REQUIRED_EMSCRIPTEN_VERSION KEYMAN_MIN_VERSION_EMSCRIPTEN emsdk @@ -63,8 +64,16 @@ _convert_parameters_to_build_args() { fi } +_check_for_default_values() { + if [[ -z "${DISTRO_VERSION:-}" ]] && [[ -z "${JAVA_VERSION:-}" ]]; then + is_default_values=true + else + is_default_values=false + fi +} + _is_default_values() { - [[ -z "${UBUNTU_VERSION:-}" ]] && [[ -z "${JAVA_VERSION:-}" ]] + ${is_default_values} } build_action() { @@ -72,10 +81,9 @@ build_action() { builder_echo debug "Building image for ${platform}" - _convert_parameters_to_build_args - if [[ "${platform}" == "base" ]]; then - docker pull --platform "amd64" "ubuntu:${UBUNTU_VERSION:-${KEYMAN_DEFAULT_VERSION_UBUNTU_CONTAINER}}" + # shellcheck disable=SC2154 # set by _convert_parameters_to_build_args + docker pull --platform "amd64" "${DISTRO}:${DISTRO_VERSION}" elif [[ "${platform}" == "linux" ]]; then cp "${KEYMAN_ROOT}/linux/debian/control" "${platform}" fi @@ -103,9 +111,13 @@ test_action() { local platform=$1 builder_echo debug "Testing image for ${platform}" - ./run.sh "${platform}" -- ./build.sh configure,build,test:"${platform}" + ./run.sh --distro "${DISTRO}" --distro-version "${DISTRO_VERSION}" \ + "${platform}" -- ./build.sh configure,build,test:"${platform}" } +_check_for_default_values +_convert_parameters_to_build_args + if builder_has_action build; then build_action base BASE_VERSION="${build_version}" diff --git a/resources/docker-images/run.sh b/resources/docker-images/run.sh index bf8dd40d6d..f85c41b238 100755 --- a/resources/docker-images/run.sh +++ b/resources/docker-images/run.sh @@ -17,37 +17,32 @@ builder_describe \ "core" \ "linux" \ "web" \ - "--ubuntu-version=UBUNTU_VERSION The Ubuntu version (default: ${KEYMAN_DEFAULT_VERSION_UBUNTU_CONTAINER})" + "--distro=DISTRO The distribution (debian or ubuntu, default: ubuntu)" \ + "--distro-version=DISTRO_VERSION The Ubuntu/Debian version (default: ${KEYMAN_DEFAULT_VERSION_UBUNTU_CONTAINER})" builder_parse "$@" run_android() { docker run -it --rm -v "${KEYMAN_ROOT}":/home/build/build \ - -v "${KEYMAN_ROOT}/core/build/docker-core":/home/build/build/core/build \ - keymanapp/keyman-android-ci:default \ + -v "${KEYMAN_ROOT}/core/build/docker-core/${build_dir}":/home/build/build/core/build \ + "keymanapp/keyman-android-ci:${image_version}" \ "${builder_extra_params[@]}" } run_core() { docker run -it --rm -v "${KEYMAN_ROOT}":/home/build/build \ - -v "${KEYMAN_ROOT}/core/build/docker-core":/home/build/build/core/build \ - keymanapp/keyman-core-ci:default \ + -v "${KEYMAN_ROOT}/core/build/docker-core/${build_dir}":/home/build/build/core/build \ + "keymanapp/keyman-core-ci:${image_version}" \ "${builder_extra_params[@]}" } run_linux() { - if [[ -z "${UBUNTU_VERSION:-}" ]]; then - image_version=default - else - image_version="${UBUNTU_VERSION}-java${KEYMAN_VERSION_JAVA}-node$(_print_expected_node_version)-emsdk${KEYMAN_MIN_VERSION_EMSCRIPTEN}" - fi - - mkdir -p "${KEYMAN_ROOT}/linux/build/docker-linux" - mkdir -p "${KEYMAN_ROOT}/linux/keyman-system-service/build/docker-linux" + mkdir -p "${KEYMAN_ROOT}/linux/build/docker-linux/${build_dir}" + mkdir -p "${KEYMAN_ROOT}/linux/keyman-system-service/build/docker-linux/${build_dir}" docker run -it --privileged --rm -v "${KEYMAN_ROOT}":/home/build/build \ - -v "${KEYMAN_ROOT}/core/build/docker-core":/home/build/build/core/build \ - -v "${KEYMAN_ROOT}/linux/build/docker-linux":/home/build/build/linux/build \ - -v "${KEYMAN_ROOT}/linux/keyman-system-service/build/docker-linux":/home/build/build/linux/keyman-system-service/build \ + -v "${KEYMAN_ROOT}/core/build/docker-core/${build_dir}":/home/build/build/core/build \ + -v "${KEYMAN_ROOT}/linux/build/docker-linux/${build_dir}":/home/build/build/linux/build \ + -v "${KEYMAN_ROOT}/linux/keyman-system-service/build/docker-linux/${build_dir}":/home/build/build/linux/keyman-system-service/build \ -e DESTDIR=/tmp \ "keymanapp/keyman-linux-ci:${image_version}" \ "${builder_extra_params[@]}" @@ -55,12 +50,20 @@ run_linux() { run_web() { docker run -it --privileged --rm -v "${KEYMAN_ROOT}":/home/build/build \ - -v "${KEYMAN_ROOT}/core/build/docker-core":/home/build/build/core/build \ - keymanapp/keyman-web-ci:default \ + -v "${KEYMAN_ROOT}/core/build/docker-core/${build_dir}":/home/build/build/core/build \ + "keymanapp/keyman-web-ci:${image_version}" \ "${builder_extra_params[@]}" } -mkdir -p "${KEYMAN_ROOT}/core/build/docker-core" +if [[ -z "${DISTRO_VERSION:-}" ]]; then + image_version=default + build_dir=default +else + image_version="${DISTRO:-}-${DISTRO_VERSION}-java${KEYMAN_VERSION_JAVA}-node$(_print_expected_node_version)-emsdk${KEYMAN_MIN_VERSION_EMSCRIPTEN}" + build_dir="${DISTRO:-}-${DISTRO_VERSION}" +fi + +mkdir -p "${KEYMAN_ROOT}/core/build/docker-core/${build_dir}" builder_run_action android run_android builder_run_action core run_core