chore(linux): allow to build and use Debian docker image

This commit is contained in:
Eberhard Beilharz 2025-02-18 18:12:46 +01:00
parent a8adb33d9a
commit 1dde4c3f1f
No known key found for this signature in database
GPG key ID: E9140597606020D3
3 changed files with 42 additions and 24 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"
@ -49,11 +51,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
@ -64,7 +69,7 @@ _convert_parameters_to_build_args() {
}
_is_default_values() {
[[ -z "${UBUNTU_VERSION:-}" ]] && [[ -z "${JAVA_VERSION:-}" ]]
[[ -z "${DISTRO_VERSION:-}" ]] && [[ -z "${JAVA_VERSION:-}" ]]
}
build_action() {
@ -75,7 +80,7 @@ build_action() {
_convert_parameters_to_build_args
if [[ "${platform}" == "base" ]]; then
docker pull --platform "amd64" "ubuntu:${UBUNTU_VERSION:-${KEYMAN_DEFAULT_VERSION_UBUNTU_CONTAINER}}"
docker pull --platform "amd64" "${DISTRO:-ubuntu}:${DISTRO_VERSION:-${KEYMAN_DEFAULT_VERSION_UBUNTU_CONTAINER}}"
elif [[ "${platform}" == "linux" ]]; then
cp "${KEYMAN_ROOT}/linux/debian/control" "${platform}"
fi
@ -103,7 +108,8 @@ 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}"
}
if builder_has_action build; then

View file

@ -16,44 +16,53 @@ 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() {
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:default \
"keymanapp/keyman-linux-ci:${image_version}" \
"${builder_extra_params[@]}"
}
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