Merge pull request #13284 from keymanapp/chore/linux/docker

chore(linux): allow to build and use Debian docker image
This commit is contained in:
Eberhard Beilharz 2025-02-20 18:03:18 +01:00 committed by GitHub
commit 72ce7727bf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 54 additions and 36 deletions

View file

@ -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

View file

@ -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}"

View file

@ -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