diff --git a/docs/src/dev-docs/building-package.md b/docs/src/dev-docs/building-package.md index 13777691cd..2964063a4e 100644 --- a/docs/src/dev-docs/building-package.md +++ b/docs/src/dev-docs/building-package.md @@ -10,6 +10,11 @@ prebuilt version instead, check out the [releases](https://github.com/y-scope/cl environment. * It should be possible to build a package for a different environment, it just requires a some extra configuration. +* [Docker] + * `containerd.io` >= 1.7.18 + * `docker-buildx-plugin` >= 0.15.1 + * `docker-ce` >= 27.0.3 + * `docker-ce-cli` >= 27.0.3 * Python 3.9 or newer * python3-dev * python3-venv (for the version of Python installed) @@ -80,6 +85,7 @@ task docker-images:package This will create a Docker image named `clp-package:dev`. +[Docker]: https://docs.docker.com/engine/install/ [Task]: https://taskfile.dev/ [uv]: https://docs.astral.sh/uv/ [y-scope/clp#1352]: https://github.com/y-scope/clp/issues/1352 diff --git a/tools/docker-images/clp-package/build.sh b/tools/docker-images/clp-package/build.sh index 39df1a1105..a7d19d997a 100755 --- a/tools/docker-images/clp-package/build.sh +++ b/tools/docker-images/clp-package/build.sh @@ -3,17 +3,38 @@ set -eu set -o pipefail +remove_temp_file_and_prev_image() { + rm -f "$temp_iid_file" + + [[ -z "$prev_image_id" || "$prev_image_id" == "$new_image_id" ]] && return + + if docker image inspect "$prev_image_id" >/dev/null 2>&1; then + echo "Removing previous image $prev_image_id." + docker image remove "$prev_image_id" + fi +} +trap remove_temp_file_and_prev_image EXIT + script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -repo_root=${script_dir}/../../../ +repo_root="${script_dir}/../../../" +iid_file="${repo_root}/build/clp-package-image.id" + +prev_image_id="" +if [[ -f "$iid_file" ]]; then + prev_image_id=$(<"$iid_file") +fi + +temp_iid_file="$(mktemp)" +new_image_id="" build_cmd=( docker build - --tag "clp-package:dev" + --iidfile "$temp_iid_file" "$repo_root" --file "${script_dir}/Dockerfile" ) -if command -v git >/dev/null && git -C "$script_dir" rev-parse --is-inside-work-tree >/dev/null ; +if command -v git >/dev/null && git -C "$script_dir" rev-parse --is-inside-work-tree >/dev/null; then build_cmd+=( --label "org.opencontainers.image.revision=$(git -C "$script_dir" rev-parse HEAD)" @@ -22,3 +43,13 @@ then fi "${build_cmd[@]}" + +if [[ -s "$temp_iid_file" ]]; then + new_image_id="$(<"$temp_iid_file")" + echo "$new_image_id" > "$iid_file" + + user="${USER:-$(id -un 2>/dev/null || whoami 2>/dev/null || echo unknown)}" + short_id="${new_image_id#sha256:}" + short_id="${short_id:0:4}" + docker tag "$new_image_id" "clp-package:dev-${user}-${short_id}" +fi