diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cdbb036ddd..685bc88820 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -189,6 +189,7 @@ jobs: distro: - jammy - noble + - resolute env: TAG: ${{ matrix.distro }} @@ -227,6 +228,7 @@ jobs: matrix: distro: - jammy + - resolute env: TAG: ${{ matrix.distro }} diff --git a/README.md b/README.md index 7ef24929ce..96ce492391 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,15 @@ For other test images see the [`test`](./test/) folder. ### Distro test images +#### Jammy + +Ubuntu `jammy` is deprecated and will be removed in the next major release. +You can still run the tests with the following command, it will run the test from [`test/Dockerfile.distro`](./test/Dockerfile.distro). + +```sh +TAG=jammy docker buildx bake test-distro +``` + #### Noble To run the `noble` tests use the following command, it will run the test from [`test/Dockerfile.distro`](./test/Dockerfile.distro). @@ -62,12 +71,12 @@ To run the `noble` tests use the following command, it will run the test from [` TAG=noble docker buildx bake test-distro ``` -#### Jammy +#### Resolute -To run the `jammy` tests use the following command, it will run the test from [`test/Dockerfile.distro`](./test/Dockerfile.distro). +To run the `resolute` tests use the following command, it will run the test from [`test/Dockerfile.distro`](./test/Dockerfile.distro). ```sh -TAG=jammy docker buildx bake test-distro +TAG=resolute docker buildx bake test-distro ``` ## Apt proxy diff --git a/src/cli/tools/php/index.ts b/src/cli/tools/php/index.ts index ffbc7e7948..c1196d4745 100644 --- a/src/cli/tools/php/index.ts +++ b/src/cli/tools/php/index.ts @@ -34,6 +34,18 @@ export class PhpPrepareService extends BasePrepareService { break; + case 'resolute': + await this.aptSvc.install( + 'libjpeg-turbo8', + 'libmcrypt4', + 'libonig5', + 'libpng16-16t64', + 'libtidy58', + 'libxslt1.1', + 'libzip5', + ); + + break; default: throw new Error(`Unsupported distro version: ${distro.versionCode}`); } diff --git a/src/cli/tools/python/conan.ts b/src/cli/tools/python/conan.ts index a60203307f..fb926955b6 100644 --- a/src/cli/tools/python/conan.ts +++ b/src/cli/tools/python/conan.ts @@ -75,6 +75,8 @@ function getCompilerVersion(distro: Distro): string { return '11'; case 'noble': return '13'; + case 'resolute': + return '15'; } throw new Error(`Unsupported distro: ${distro.name}`); diff --git a/src/cli/tools/utils/prebuild.ts b/src/cli/tools/utils/prebuild.ts index 3c5d11a440..50c72e9ae5 100644 --- a/src/cli/tools/utils/prebuild.ts +++ b/src/cli/tools/utils/prebuild.ts @@ -27,7 +27,7 @@ export abstract class PrebuildInstallService extends BaseInstallService { const distro = await getDistro(); let code = distro.versionCode; - if (code === 'noble') { + if (code === 'noble' || code === 'resolute') { logger.debug(`Using jammy prebuild for ${name} on ${code}`); code = 'jammy'; } diff --git a/src/cli/tools/wally.ts b/src/cli/tools/wally.ts index c9e6ac1bfe..a54637fb60 100644 --- a/src/cli/tools/wally.ts +++ b/src/cli/tools/wally.ts @@ -23,7 +23,7 @@ export class WallyInstallService extends BaseInstallService { const distro = await getDistro(); let code = distro.versionCode; - if (code === 'noble') { + if (code === 'noble' || code === 'resolute') { logger.debug(`Using jammy prebuild for ${name} on ${code}`); code = 'jammy'; } diff --git a/src/cli/utils/common.ts b/src/cli/utils/common.ts index 9808017bd8..70f884abee 100644 --- a/src/cli/utils/common.ts +++ b/src/cli/utils/common.ts @@ -24,11 +24,12 @@ export async function validateSystem(): Promise { /* v8 ignore next -- hard to test */ case 'jammy': case 'noble': + case 'resolute': break; default: logger.fatal( { distro: d }, - `Unsupported distro: ${d.versionCode}! Please use Ubuntu 'jammy' or 'noble'.`, + `Unsupported distro: ${d.versionCode}! Please use Ubuntu 'noble' or 'resolute'.`, ); process.exit(1); } diff --git a/src/usr/local/containerbase/tools/v2/erlang.sh b/src/usr/local/containerbase/tools/v2/erlang.sh index 94d3b7ccbc..6ec23e3703 100644 --- a/src/usr/local/containerbase/tools/v2/erlang.sh +++ b/src/usr/local/containerbase/tools/v2/erlang.sh @@ -25,8 +25,9 @@ function check_tool_requirements () { case "${version_codename}" in "jammy");; "noble");; + "resolute");; *) - echo "Tool '${TOOL_NAME}' not supported on: ${version_codename}! Please use ubuntu 'jammy' or 'noble'." >&2 + echo "Tool '${TOOL_NAME}' not supported on: ${version_codename}! Please use ubuntu 'noble' or 'resolute'." >&2 exit 1 ;; esac @@ -58,7 +59,7 @@ function install_tool () { base_url="https://github.com/containerbase/${name}-prebuild/releases/download" version_codename=$(get_distro) - if [[ "${version_codename}" == "noble" ]]; then + if [[ "${version_codename}" == "noble" || "${version_codename}" == "resolute" ]]; then version_codename="jammy" fi diff --git a/src/usr/local/containerbase/tools/v2/powershell.sh b/src/usr/local/containerbase/tools/v2/powershell.sh index a75d9e80a7..3bf1c20e0a 100644 --- a/src/usr/local/containerbase/tools/v2/powershell.sh +++ b/src/usr/local/containerbase/tools/v2/powershell.sh @@ -5,10 +5,12 @@ function prepare_tool() { version_codename="$(get_distro)" case "${version_codename}" in - "jammy") apt_install libc6 libgcc1 libgssapi-krb5-2 libicu70 libssl3 libstdc++6 zlib1g;; - "noble") apt_install libc6 libgcc1 libgssapi-krb5-2 libicu74 libssl3 libstdc++6 zlib1g;; + # https://learn.microsoft.com/en-us/dotnet/core/install/linux-ubuntu-install?tabs=dotnet10&pivots=os-linux-ubuntu-2204#dependencies-4 + "jammy") apt_install libc6 libgcc-s1 libgssapi-krb5-2 libicu70 libssl3 libstdc++6 tzdata zlib1g;; + "noble") apt_install libc6 libgcc-s1 libgssapi-krb5-2 libicu74 libssl3t64 libstdc++6 tzdata zlib1g;; + "resolute") apt_install libbrotli1 libc6 libgcc-s1 libgssapi-krb5-2 libicu78 libssl3t64 libstdc++6 tzdata zlib1g;; *) - echo "Tool '${TOOL_NAME}' not supported on: ${version_codename}! Please use ubuntu 'jammy' or 'noble'." >&2 + echo "Tool '${TOOL_NAME}' not supported on: ${version_codename}! Please use ubuntu 'noble' or 'resolute'." >&2 exit 1 ;; esac diff --git a/src/usr/local/containerbase/tools/v2/python.sh b/src/usr/local/containerbase/tools/v2/python.sh index aae408c3a8..79514a1046 100644 --- a/src/usr/local/containerbase/tools/v2/python.sh +++ b/src/usr/local/containerbase/tools/v2/python.sh @@ -27,8 +27,9 @@ function prepare_tool() { case "${version_codename}" in "jammy");; "noble");; + "resolute");; *) - echo "Tool '${TOOL_NAME}' not supported on: ${version_codename}! Please use ubuntu 'jammy' or 'noble'." >&2 + echo "Tool '${TOOL_NAME}' not supported on: ${version_codename}! Please use ubuntu 'noble' or 'resolute'." >&2 exit 1 ;; esac @@ -67,7 +68,7 @@ function install_tool () { base_url="https://github.com/containerbase/${name}-prebuild/releases/download" version_codename=$(get_distro) - if [[ "${version_codename}" == "noble" ]]; then + if [[ "${version_codename}" == "noble" || "${version_codename}" == "resolute" ]]; then version_codename="jammy" fi diff --git a/src/usr/local/containerbase/tools/v2/ruby.sh b/src/usr/local/containerbase/tools/v2/ruby.sh index 564fbdcad1..bb93f45ace 100644 --- a/src/usr/local/containerbase/tools/v2/ruby.sh +++ b/src/usr/local/containerbase/tools/v2/ruby.sh @@ -8,8 +8,9 @@ function prepare_tool() { case "${version_codename}" in "jammy");; "noble");; + "resolute");; *) - echo "Tool '${TOOL_NAME}' not supported on: ${version_codename}! Please use ubuntu 'jammy' or 'noble'." >&2 + echo "Tool '${TOOL_NAME}' not supported on: ${version_codename}! Please use ubuntu 'noble' or 'resolute'." >&2 exit 1 ;; esac @@ -93,7 +94,7 @@ function install_tool () { base_url="https://github.com/containerbase/${name}-prebuild/releases/download" version_codename=$(get_distro) - if [[ "${version_codename}" == "noble" ]]; then + if [[ "${version_codename}" == "noble" || "${version_codename}" == "resolute" ]]; then version_codename="jammy" fi diff --git a/src/usr/local/containerbase/tools/v2/swift.sh b/src/usr/local/containerbase/tools/v2/swift.sh index 9368dd7e2e..73cc6c2856 100644 --- a/src/usr/local/containerbase/tools/v2/swift.sh +++ b/src/usr/local/containerbase/tools/v2/swift.sh @@ -43,8 +43,27 @@ function prepare_tool() { unzip \ zlib1g-dev \ ;; + "resolute") + apt_install \ + binutils \ + gnupg2 \ + libc6-dev \ + libcurl4-openssl-dev \ + libedit2 \ + libgcc-11-dev \ + libncurses6 \ + libpython3.14 \ + libsqlite3-0 \ + libstdc++-11-dev \ + libxml2-dev \ + libz3-dev \ + pkg-config \ + tzdata \ + unzip \ + zlib1g-dev \ + ;; *) - echo "Tool '${TOOL_NAME}' not supported on: ${version_codename}! Please use ubuntu 'jammy' or 'noble'." >&2 + echo "Tool '${TOOL_NAME}' not supported on: ${version_codename}! Please use ubuntu 'noble' or 'resolute'." >&2 exit 1 ;; esac diff --git a/src/usr/local/containerbase/util.sh b/src/usr/local/containerbase/util.sh index b7a6b1d77e..05eabf7468 100644 --- a/src/usr/local/containerbase/util.sh +++ b/src/usr/local/containerbase/util.sh @@ -150,8 +150,9 @@ function require_distro () { case "$DISTRO_CODENAME" in "jammy") ;; #supported "noble") ;; #supported + "resolute") ;; #supported *) - echo "Distro not supported: ${DISTRO_CODENAME}! Please use ubuntu 'jammy' or 'noble'." >&2 + echo "Distro not supported: ${DISTRO_CODENAME}! Please use ubuntu 'noble' or 'resolute'." >&2 exit 1 ;; esac diff --git a/test/Dockerfile.base b/test/Dockerfile.base index 061db07187..7fa71e8d70 100644 --- a/test/Dockerfile.base +++ b/test/Dockerfile.base @@ -6,6 +6,7 @@ ARG BASE_IMAGE=latest #-------------------------------------- FROM ghcr.io/containerbase/ubuntu:22.04 AS jammy FROM ghcr.io/containerbase/ubuntu:24.04 AS noble +FROM ghcr.io/containerbase/ubuntu:26.04 AS resolute FROM ghcr.io/containerbase/ubuntu:24.04 AS latest #-------------------------------------- diff --git a/test/Dockerfile.distro b/test/Dockerfile.distro index e29d9045d5..8cfce6d4a6 100644 --- a/test/Dockerfile.distro +++ b/test/Dockerfile.distro @@ -6,6 +6,7 @@ ARG BASE_IMAGE=latest #-------------------------------------- FROM ghcr.io/containerbase/ubuntu:22.04 AS jammy FROM ghcr.io/containerbase/ubuntu:24.04 AS noble +FROM ghcr.io/containerbase/ubuntu:26.04 AS resolute FROM ghcr.io/containerbase/ubuntu:24.04 AS latest #-------------------------------------- @@ -112,8 +113,16 @@ RUN install-tool skopeo 1.22.2 # renovate: datasource=github-releases packageName=getsops/sops RUN install-tool sops v3.12.2 -# renovate: datasource=docker versioning=docker -RUN install-tool swift 6.3.1 +# not yet supported on resolute https://github.com/swiftlang/swift-docker/issues/524 +# renovate: datasource=docker depName=swift +ARG SWIFT_VERSION=6.3.1 +RUN set -ex; \ + if [ "$(. /etc/os-release && echo "${VERSION_CODENAME}")" = "resolute" ]; then \ + echo "Skipping Swift installation on resolute."; \ + else \ + install-tool swift; \ + fi; \ + true # renovate: datasource=docker packageName=hashicorp/terraform versioning=docker RUN install-tool terraform 1.15.1