Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
64b7d8d
feat: Add support for manylinux_2_28 and use it to build x86_64 or aa…
jackluo923 Jun 26, 2025
917cecd
fix: resolved python lint issues
jackluo923 Jun 26, 2025
53f5974
fix: resolved docs issues
jackluo923 Jun 26, 2025
73563d5
fix: resolved issues raised by code-rabbit
jackluo923 Jun 26, 2025
0b81039
fix: resolved more python linting issue
jackluo923 Jun 26, 2025
5ab5946
fix: resolved issues with github workflow
jackluo923 Jun 26, 2025
117ff00
fix: reduced the scope of the PR
jackluo923 Jun 27, 2025
9112825
Revert "fix: resolved issues with github workflow"
jackluo923 Jun 27, 2025
b18c2f3
fix: resolved issues raised by coderabbit
jackluo923 Jun 27, 2025
c6aea71
Merge branch 'main' into manylinux_2_28
jackluo923 Jun 27, 2025
258ba7b
Merge branch 'main' into manylinux_2_28
jackluo923 Jun 29, 2025
ab09ee3
fix: added back a line that wasn't supposed to be removed
jackluo923 Jun 29, 2025
af88773
Restructure docs before adding new, unpublished container images.
kirkrodrigues Jun 29, 2025
8378fdb
refactor: Remove unnecessary comments from build scripts; Make style …
kirkrodrigues Jun 29, 2025
9c5c624
Use latest conventions in install-all.sh
kirkrodrigues Jun 29, 2025
c31a6c0
Use latest conventions in install-packages-from-source.sh; Add commen…
kirkrodrigues Jun 29, 2025
dfa89e9
Use latest conventions in install-prebuilt-packages.sh; Remove unnece…
kirkrodrigues Jun 29, 2025
c744237
Simplify comment.
kirkrodrigues Jun 29, 2025
8cb738f
Rename images for consistency.
kirkrodrigues Jun 29, 2025
a35809d
Add new images to docs.
kirkrodrigues Jun 29, 2025
b1716df
Edit comment.
kirkrodrigues Jun 29, 2025
e916ecb
Don't lock base image version so that we can tell if something breaks…
kirkrodrigues Jun 29, 2025
e1809e8
Improve comment.
kirkrodrigues Jun 29, 2025
502a31c
Rename manylinux scripts directory.
kirkrodrigues Jun 29, 2025
f96a13a
Update more docs.
kirkrodrigues Jun 29, 2025
10dc855
Set minimum CMake version to 3.31.
kirkrodrigues Jun 30, 2025
02d257d
Add link to manylinux 2.28.
kirkrodrigues Jun 30, 2025
31e9874
Update components/core/CMakeLists.txt
kirkrodrigues Jun 30, 2025
8fd2fa0
Revert "Update more docs."
kirkrodrigues Jun 30, 2025
57cda64
Replace manylinux 2.28 with manylinux_2_28.
kirkrodrigues Jun 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions components/core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,15 @@ if (CLP_USE_STATIC_LIBS)
if (APPLE)
set(CLP_STATIC_LIBS_UNSUPPORTED_PLATFORM "macOS")
elseif (EXISTS "/etc/centos-release")
set(CLP_STATIC_LIBS_UNSUPPORTED_PLATFORM "CentOS")
# NOTE:
# 1. We don't support static linking on any CentOS-based distro except manylinux_2_28 (which
# shows up as "AlmaLinux").
# 2. A release called "AlmaLinux" doesn't guarantee we're running on a manylinux distro, but
# we can improve this check when someone reports an issue.
file(READ "/etc/centos-release" CENTOS_RELEASE_CONTENT)
if(NOT "${CENTOS_RELEASE_CONTENT}" MATCHES "AlmaLinux")
set(CLP_STATIC_LIBS_UNSUPPORTED_PLATFORM "CentOS")
endif()
endif()

if (DEFINED CLP_STATIC_LIBS_UNSUPPORTED_PLATFORM)
Expand Down Expand Up @@ -212,7 +220,7 @@ endif()
# Find and setup libcurl
# By default, CURL does not provide static libraries
if(CLP_NEED_CURL)
find_package(CURL 7.68.0 REQUIRED)
find_package(CURL 7.61.1 REQUIRED)
if(CURL_FOUND)
message(STATUS "Found CURL ${CURL_VERSION_STRING}")
else()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM quay.io/pypa/manylinux_2_28_aarch64
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Base image tag should be immutable

Same comment as the x86_64 Dockerfile: pin the manylinux base image by digest to ensure deterministic builds.

🧰 Tools
🪛 Checkov (3.2.334)

[LOW] 1-1: Ensure the base image uses a non latest version tag

(CKV_DOCKER_7)


[LOW] 1-14: Ensure that HEALTHCHECK instructions have been added to container images

(CKV_DOCKER_2)


[LOW] 1-14: Ensure that a user for the container has been created

(CKV_DOCKER_3)

🪛 Hadolint (2.12.0)

[warning] 1-1: Always tag the version of an image explicitly

(DL3006)

🤖 Prompt for AI Agents
In
components/core/tools/docker-images/clp-env-base-manylinux_2_28-aarch64/Dockerfile
at line 1, the base image is currently referenced by tag only, which can lead to
non-deterministic builds. Update the FROM instruction to pin the manylinux base
image by its digest instead of just the tag. Retrieve the correct digest for
quay.io/pypa/manylinux_2_28_aarch64 and replace the tag with the digest to
ensure the image is immutable and builds are reproducible.


WORKDIR /root

RUN mkdir -p ./tools/scripts/lib_install
COPY ./tools/scripts/lib_install ./tools/scripts/lib_install

RUN ./tools/scripts/lib_install/manylinux_2_28/install-all.sh

# Remove cached files
RUN dnf clean all && rm -rf /var/cache/dnf /tmp/* /var/tmp/*

Comment on lines +10 to +12
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Redundant cache purge

dnf clean all already wipes /var/cache/dnf. Removing the explicit rm -rf /var/cache/dnf simplifies the layer.

🤖 Prompt for AI Agents
In
components/core/tools/docker-images/clp-env-base-manylinux_2_28-aarch64/Dockerfile
at lines 10 to 12, the command redundantly removes /var/cache/dnf after running
dnf clean all, which already clears that cache. Simplify the RUN command by
removing the explicit rm -rf /var/cache/dnf to avoid unnecessary duplication
while still cleaning the cache and temporary files.

# NOTE: Don't flatten the image or else we'll lose any environment modifications from the base
# image.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env bash

set -eu
set -o pipefail

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
component_root="${script_dir}/../../../"

build_cmd=(
docker buildx build
--platform linux/arm64
--tag clp-core-dependencies-aarch64-manylinux_2_28:dev
"$component_root"
--file "${script_dir}/Dockerfile"
--load
)
Comment on lines +9 to +16
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Allow caller-supplied tag/version

Hard-coding clp-core-dependencies-aarch64-manylinux_2_28:dev limits reuse. Consider exposing the tag via an environment variable or --tag CLI option so CI can publish versioned images easily.

🤖 Prompt for AI Agents
In
components/core/tools/docker-images/clp-env-base-manylinux_2_28-aarch64/build.sh
around lines 9 to 16, the Docker image tag is hard-coded, limiting flexibility.
Modify the script to accept a tag/version from an environment variable or a
command-line argument, defaulting to the current tag if none is provided. Update
the build_cmd array to use this dynamic tag value instead of the fixed string.


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)"
--label "org.opencontainers.image.source=$(git -C "$script_dir" remote get-url origin)"
)
fi
Comment on lines +18 to +24
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Git labels: handle detached HEAD & shallow clones

git rev-parse HEAD fails in a shallow clone without the commit object. Guard with git rev-parse --verify or fallback to CI_COMMIT_SHA to avoid build crashes in minimal CI checkouts.

🤖 Prompt for AI Agents
In
components/core/tools/docker-images/clp-env-base-manylinux_2_28-aarch64/build.sh
around lines 18 to 24, the git commands for setting image labels can fail in
shallow clones or detached HEAD states. Modify the script to first verify the
commit hash with 'git rev-parse --verify HEAD' and if that fails, fallback to
using the environment variable CI_COMMIT_SHA for the revision label. This
prevents build crashes when the commit object is missing in minimal CI
checkouts.


echo "Running: ${build_cmd[*]}"
"${build_cmd[@]}"
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM quay.io/pypa/manylinux_2_28_x86_64
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Pin base image with an immutable digest for repeatable builds

quay.io/pypa/manylinux_2_28_x86_64 is a moving tag. Switching to a digest (@sha256:…) or a dated tag guarantees that future rebuilds use the exact same environment, avoiding “works-yesterday-breaks-today” scenarios.

🧰 Tools
🪛 Checkov (3.2.334)

[LOW] 1-1: Ensure the base image uses a non latest version tag

(CKV_DOCKER_7)


[LOW] 1-14: Ensure that HEALTHCHECK instructions have been added to container images

(CKV_DOCKER_2)


[LOW] 1-14: Ensure that a user for the container has been created

(CKV_DOCKER_3)

🪛 Hadolint (2.12.0)

[warning] 1-1: Always tag the version of an image explicitly

(DL3006)

🤖 Prompt for AI Agents
In
components/core/tools/docker-images/clp-env-base-manylinux_2_28-x86_64/Dockerfile
at line 1, the base image is currently specified using a mutable tag which can
change over time. To ensure repeatable builds, replace the tag with an immutable
digest by finding the corresponding sha256 digest for the desired image version
and updating the FROM line to use the digest format (e.g., FROM
quay.io/pypa/manylinux_2_28_x86_64@sha256:...). This pins the base image to a
specific version and prevents unexpected changes in future builds.


WORKDIR /root

RUN mkdir -p ./tools/scripts/lib_install
COPY ./tools/scripts/lib_install ./tools/scripts/lib_install

RUN ./tools/scripts/lib_install/manylinux_2_28/install-all.sh

# Remove cached files
RUN dnf clean all && rm -rf /var/cache/dnf /tmp/* /var/tmp/*

Comment on lines +10 to +12
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Clean up yum metadata before final layer

dnf clean all is good, but rm -rf /var/cache/dnf is redundant after clean all. Removing both saves a few kilobytes and one layer.

🤖 Prompt for AI Agents
In
components/core/tools/docker-images/clp-env-base-manylinux_2_28-x86_64/Dockerfile
around lines 10 to 12, the command uses both 'dnf clean all' and 'rm -rf
/var/cache/dnf' which is redundant since 'dnf clean all' already removes the
cache. Remove the 'rm -rf /var/cache/dnf' part to simplify the command and
reduce image size and layers.

# NOTE: Don't flatten the image or else we'll lose any environment modifications from the base
# image.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env bash

set -eu
set -o pipefail

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
component_root="${script_dir}/../../../"

Comment on lines +6 to +8
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Make path variables readonly for clarity & safety

Both script_dir and component_root are constants after initialisation.
Lock them down to prevent accidental mutation.

-script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
-component_root="${script_dir}/../../../"
+readonly script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
+readonly component_root="${script_dir}/../../../"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
component_root="${script_dir}/../../../"
readonly script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
readonly component_root="${script_dir}/../../../"
🤖 Prompt for AI Agents
In
components/core/tools/docker-images/clp-env-base-manylinux_2_28-x86_64/build.sh
around lines 6 to 8, the variables script_dir and component_root are assigned
once and should not change. Declare both variables as readonly immediately after
their assignment to prevent accidental modification and improve code clarity.

build_cmd=(
docker buildx build
--platform linux/amd64
--tag clp-core-dependencies-x86-manylinux_2_28:dev
"$component_root"
--file "${script_dir}/Dockerfile"
--load
)

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)"
--label "org.opencontainers.image.source=$(git -C "$script_dir" remote get-url origin)"
)
fi
Comment on lines +18 to +24
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Use repository root for Git metadata labels

When the script lives in a sub-directory, git -C "$script_dir" returns the
SHA of the script’s sub-tree, not the root commit that produced the image.
Switching to $component_root ensures the labels always reference the true
repo revision and its remote.

-        --label "org.opencontainers.image.revision=$(git -C "$script_dir" rev-parse HEAD)"
-        --label "org.opencontainers.image.source=$(git -C "$script_dir" remote get-url origin)"
+        --label "org.opencontainers.image.revision=$(git -C "$component_root" rev-parse HEAD)"
+        --label "org.opencontainers.image.source=$(git -C "$component_root" remote get-url origin)"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
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)"
--label "org.opencontainers.image.source=$(git -C "$script_dir" remote get-url origin)"
)
fi
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 "$component_root" rev-parse HEAD)"
--label "org.opencontainers.image.source=$(git -C "$component_root" remote get-url origin)"
)
fi
🤖 Prompt for AI Agents
In
components/core/tools/docker-images/clp-env-base-manylinux_2_28-x86_64/build.sh
around lines 18 to 24, the git commands use "$script_dir" which points to a
sub-directory, causing the labels to reflect the sub-tree commit instead of the
repository root commit. Update the git commands to use "$component_root" instead
of "$script_dir" to ensure the labels reference the true root commit and remote
URL of the repository.


echo "Running: ${build_cmd[*]}"
"${build_cmd[@]}"
4 changes: 2 additions & 2 deletions components/core/tools/scripts/lib_install/libarchive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ fi
cd ${extracted_dir}
mkdir -p cmake-build-release
cd cmake-build-release
# NOTE: Disable expat so the static libarchive doesn't look for it at link time
cmake -DENABLE_EXPAT=OFF ../
# NOTE: Disable Expat and OpenSSL so the static libarchive doesn't look for them at link time.
cmake -DENABLE_EXPAT=OFF -DENABLE_OPENSSL=OFF ../
make -j${num_cpus}

# Check if checkinstall is installed
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/usr/bin/env bash

set -eu
set -o pipefail

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"

Comment on lines +3 to +7
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Declare script_dir as a readonly constant

The value of script_dir is meant to stay immutable for the lifetime of the script.
Marking it readonly makes that intent explicit and guards against accidental reassignment.

-script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
+readonly script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
🤖 Prompt for AI Agents
In components/core/tools/scripts/lib_install/manylinux_2_28/install-all.sh
around lines 3 to 7, the variable script_dir is assigned but not marked
readonly. To prevent accidental reassignment and make the intent clear, declare
script_dir as a readonly variable immediately after its assignment by adding the
readonly keyword before or after the assignment.

"${script_dir}/install-prebuilt-packages.sh"
"${script_dir}/install-packages-from-source.sh"

# TODO: https://github.com/y-scope/clp/issues/795
"${script_dir}/../check-cmake-version.sh"
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env bash

set -eu
set -o pipefail

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
lib_install_scripts_dir="${script_dir}/.."

Comment on lines +3 to +8
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Declare constants as readonly for defensive programming

script_dir and lib_install_scripts_dir are effectively constants after initialisation.
Marking them readonly prevents accidental reassignment later in the script (or in sourced code) and makes intent explicit.

-script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
-lib_install_scripts_dir="${script_dir}/.."
+readonly script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
+readonly lib_install_scripts_dir="${script_dir}/.."
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
set -eu
set -o pipefail
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
lib_install_scripts_dir="${script_dir}/.."
set -eu
set -o pipefail
readonly script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
readonly lib_install_scripts_dir="${script_dir}/.."
🤖 Prompt for AI Agents
In
components/core/tools/scripts/lib_install/manylinux_2_28/install-packages-from-source.sh
around lines 3 to 8, the variables script_dir and lib_install_scripts_dir are
assigned once and should be treated as constants. To prevent accidental
reassignment and clarify intent, declare both variables as readonly immediately
after their assignment by adding the readonly keyword before or after their
initialization.

# NOTE: The remaining installation scripts depend on boost, so we install it beforehand.
"${lib_install_scripts_dir}/install-boost.sh" 1.87.0

# NOTE:
# 1. libarchive may statically link with LZMA, LZ4, and Zstandard, so we install them beforehand.
# 2. The versions of libarchive, LZMA, LZ4, and Zstandard available in manylinux_2_28's package
# repositories are either dated or don't include static libraries, so we install more recent
# versions from source.
"${lib_install_scripts_dir}/liblzma.sh" 5.8.1
"${lib_install_scripts_dir}/lz4.sh" 1.10.0
"${lib_install_scripts_dir}/zstandard.sh" 1.5.7
"${lib_install_scripts_dir}/libarchive.sh" 3.8.0

"${lib_install_scripts_dir}/msgpack.sh" 7.0.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/usr/bin/env bash

set -eu
set -o pipefail

dnf install -y \
gcc-c++ \
java-11-openjdk \
jq \
libcurl-devel \
mariadb-connector-c-devel \
openssl-devel \
zlib-devel \
zlib-static
Comment on lines +6 to +14
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Trim the image by suppressing weak dependencies

dnf install will pull in weak-deps by default, adding ~100 MB of packages that nothing in CLP actually uses. Passing --setopt=install_weak_deps=False (or --nodocs) keeps the resulting wheel/container smaller while having zero functional impact on the build.

-dnf install -y \
+dnf install -y --setopt=install_weak_deps=False \
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
dnf install -y \
gcc-c++ \
java-11-openjdk \
jq \
libcurl-devel \
mariadb-connector-c-devel \
openssl-devel \
zlib-devel \
zlib-static
dnf install -y --setopt=install_weak_deps=False \
gcc-c++ \
java-11-openjdk \
jq \
libcurl-devel \
mariadb-connector-c-devel \
openssl-devel \
zlib-devel \
zlib-static
🤖 Prompt for AI Agents
In
components/core/tools/scripts/lib_install/manylinux_2_28/install-prebuilt-packages.sh
around lines 6 to 14, the dnf install command currently installs weak
dependencies by default, increasing image size unnecessarily. Modify the dnf
install command to include the option --setopt=install_weak_deps=False to
suppress installing weak dependencies and reduce the image size without
affecting functionality.


# Determine architecture for `task` release to install
rpm_arch=$(rpm --eval "%{_arch}")
case "$rpm_arch" in
"x86_64")
task_pkg_arch="amd64"
;;
"aarch64")
task_pkg_arch="arm64"
;;
*)
echo "Error: Unsupported architecture - $rpm_arch"
exit 1
;;
esac

# Install `task`
# NOTE: We lock `task` to a version < 3.43 to avoid https://github.com/y-scope/clp/issues/872
task_pkg_path=$(mktemp -t --suffix ".rpm" task-pkg.XXXXXXXXXX) || exit 1
curl \
--fail \
--location \
--output "$task_pkg_path" \
--show-error \
"https://github.com/go-task/task/releases/download/v3.42.1/task_linux_${task_pkg_arch}.rpm"
dnf install --assumeyes "$task_pkg_path"
rm "$task_pkg_path"

# Downgrade to CMake v3 to work around https://github.com/y-scope/clp/issues/795
pipx uninstall cmake
pipx install cmake~=3.31
105 changes: 91 additions & 14 deletions docs/src/dev-guide/tooling-containers.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,115 @@
# Containers

We publish (to [GitHub packages][gh-packages]) several Docker container images useful for building
and running CLP:
We maintain several Docker container images that are useful for building and running CLP. All images
can be built and used locally, but some are available to download from
[GitHub Packages][gh-packages].

* An [image][core-deps-centos-stream-9] containing the dependencies necessary to build CLP core in a
Centos Stream 9 x86 environment.
To build an image locally, run the `build.sh` script in the image's directory.

## clp-core-dependencies-&lt;arch&gt;-manylinux_2_28

Images containing the dependencies necessary to build CLP core in a [manylinux_2_28][manylinux_2_28]
environment (aarch64 or x86).

Binaries built on manylinux_2_28 (based on AlmaLinux 8) are expected to be compatible with other
distros using glibc 2.28+, including:

* CentOS/RHEL 8+
* Debian 10+
* Fedora 29+
* Ubuntu 18.10+

### clp-core-dependencies-aarch64-manylinux_2_28

* Path:

```text
ghcr.io/y-scope/clp/clp-core-dependencies-x86-centos-stream-9:main
components/core/tools/docker-images/clp-env-base-manylinux_2_28-aarch64
```

* An [image][core-deps-ubuntu-jammy] containing the dependencies necessary to build CLP core in an
Ubuntu Jammy x86 environment.
### clp-core-dependencies-x86-manylinux_2_28

* Path:

```text
ghcr.io/y-scope/clp/clp-core-dependencies-x86-ubuntu-jammy:main
components/core/tools/docker-images/clp-env-base-manylinux_2_28-x86_64
```

## clp-core-dependencies-x86-centos-stream-9

An image containing the dependencies necessary to build CLP core in a CentOS Stream 9 x86
environment.

* [GitHub Packages page][core-deps-centos-stream-9]
* Pull command:

```bash
docker pull ghcr.io/y-scope/clp/clp-core-dependencies-x86-centos-stream-9:main
```

* An [image][core-ubuntu-jammy] containing the CLP core binaries (`clg`, `clp`, `clp-s`, `glt`,
etc.) built in an Ubuntu Jammy x86 environment.
* Path:

```text
ghcr.io/y-scope/clp/clp-core-x86-ubuntu-jammy:main
components/core/tools/docker-images/clp-env-base-centos-stream-9
```

## clp-core-dependencies-x86-ubuntu-jammy

An image containing the dependencies necessary to build CLP core in an Ubuntu Jammy x86
environment.

* [GitHub Packages page][core-deps-ubuntu-jammy]
* Pull command:

```bash
docker pull ghcr.io/y-scope/clp/clp-core-dependencies-x86-ubuntu-jammy:main
```

* Path:

```text
components/core/tools/docker-images/clp-env-base-ubuntu-jammy
```

## clp-core-x86-ubuntu-jammy

An image containing the CLP core binaries (`clg`, `clp`, `clp-s`, `glt`, etc.) built in an Ubuntu
Jammy x86 environment.

* [GitHub Packages page][core-ubuntu-jammy]
* Pull command:

```bash
docker pull ghcr.io/y-scope/clp/clp-core-x86-ubuntu-jammy:main
```

* Path:

```text
components/core/tools/docker-images/clp-core-ubuntu-jammy
```

## clp-execution-x86-ubuntu-jammy

An image containing the dependencies necessary to run the CLP package in an Ubuntu Jammy x86
environment.

* [GitHub Packages page][exe-ubuntu-jammy]
* Pull command:

```bash
docker pull ghcr.io/y-scope/clp/clp-execution-x86-ubuntu-jammy:main
```

* An [image][exe-ubuntu-jammy] containing the dependencies necessary to run the CLP package in an
Ubuntu Jammy x86 environment.
* Path:

```text
ghcr.io/y-scope/clp/clp-execution-x86-ubuntu-jammy:main
tools/docker-images/clp-execution-base-ubuntu-jammy
```

[core-deps-centos-stream-9]: https://github.com/y-scope/clp/pkgs/container/clp%2Fclp-core-dependencies-x86-centos-stream-9
[core-deps-ubuntu-jammy]: https://github.com/y-scope/clp/pkgs/container/clp%2Fclp-core-dependencies-x86-ubuntu-jammy
[core-ubuntu-jammy]: https://github.com/y-scope/clp/pkgs/container/clp%2Fclp-core-x86-ubuntu-jammy
[exe-ubuntu-jammy]: https://github.com/y-scope/clp/pkgs/container/clp%2Fclp-execution-x86-ubuntu-jammy
[gh-packages]: https://github.com/orgs/y-scope/packages?repo_name=clp
[manylinux_2_28]: https://github.com/pypa/manylinux?tab=readme-ov-file#manylinux_2_28-almalinux-8-based
Loading