spiegel-keyman/resources/docker-images
Marc Durdin f394245636 maint(common): consolidate builder scripts
Clarifies the confusing builder.inc.sh / build-utils.sh distinction by
giving the scripts more appropriate names. Most build scripts should use
builder-full.inc.sh; some helper scripts can use builder-basic.inc.sh.
Documented in resources/build/README.md.

Renames:
* resources/build/builder.inc.sh to resources/build/builder-full.inc.sh
* resources/build/build-utils.sh to resources/build/builder-basic.inc.sh

Other changes:
* Moves Android-specific functions out of builder-basic.inc.sh and into
  android/build.sh.
* Renames functions in builder-basic.inc.sh

More functions may be moved from builder-basic.inc.sh into utils.inc.sh
or other scripts in the future.

Fixes: #14065
Build-bot: build all
Test-bot: skip
2025-08-02 08:11:24 +10:00
..
android maint(developer): use docker buildx to build docker images 2025-06-06 18:10:53 +02:00
base maint(developer): use docker buildx to build docker images 2025-06-06 18:10:53 +02:00
core maint(developer): use docker buildx to build docker images 2025-06-06 18:10:53 +02:00
developer maint(developer): use docker buildx to build docker images 2025-06-06 18:10:53 +02:00
linux maint(developer): use docker buildx to build docker images 2025-06-06 18:10:53 +02:00
web maint(developer): use docker buildx to build docker images 2025-06-06 18:10:53 +02:00
build.sh maint(common): consolidate builder scripts 2025-08-02 08:11:24 +10:00
docker-build.inc.sh maint(common): rename shellHelperFunctions.sh to utils.inc.sh 2025-08-02 06:58:40 +10:00
README.md maint(developer): specify platforms as targets instead of actions in run.sh 2025-06-06 17:07:02 +02:00
run.sh maint(common): consolidate builder scripts 2025-08-02 08:11:24 +10:00

Container

Docker containers that can be used to build Keyman on the respective platforms. They contain everything that a CI build agent needs to build for the platform.

Prerequisites

You'll need Docker Buildx installed to successfully be able to build the container images. This is most easily achieved by installing the official Docker version.

Currently it is not possible to use Podman instead of Docker due to a number of bugs and incompatibilities in the Podman implementation.

Building the images

To build the docker images:

resources/docker-images/build.sh

By default this will create 64-bit images for building Keyman Core, Keyman for Android, Keyman for Linux, Keyman for Web and (cross-platform parts of) Keyman Developer. These images are based on Ubuntu 24.04 with Node 20 and Emscripten 3.1.58 (for the exact versions, see minimum-versions.inc.sh). The images are named e.g. keymanapp/keyman-core-ci:default.

The versions can be changed, e.g.

resources/docker-images/build.sh --distro-version jammy --node 20

This will create an image named e.g. keymanapp/keyman-core-ci:ubuntu-jammy-java21-node20.16.0-emsdk3.1.58.

Once the image is built, it may be used to build parts of Keyman.

Building locally

It is possible to build locally with these images:

# build 'Keyman Core' in docker
resources/docker-images/run.sh :core -- core/build.sh --debug build

Note: For Core and Linux we put the generated binaries in a container specific directory because they are platform dependent.

If you build both with Docker and directly with the build scripts, it is advisable to run a git clean -dxf before switching between the two. The reason is that the Docker images use a different user, so that paths will be different.

Running tests locally

To run the tests locally, use the run.sh script:

# Run common/web tests
resources/docker-images/run.sh :web -- common/web/build.sh --debug test