From d2c840d77b9d02946a50f2326730bef319303a48 Mon Sep 17 00:00:00 2001 From: Jonah Snider Date: Tue, 21 Jul 2026 22:42:57 -0700 Subject: [PATCH 1/5] feat: add aube --- .github/renovate.json | 2 ++ docs/custom-registries.md | 13 ++++++++ src/cli/install-tool/index.ts | 2 ++ src/cli/tools/aube.ts | 44 ++++++++++++++++++++++++++ src/cli/tools/index.ts | 1 + test/latest/Dockerfile | 13 +++++++- test/latest/Dockerfile.arm64 | 19 +++++++++++ test/latest/src/test/aube/package.json | 4 +++ 8 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 src/cli/tools/aube.ts create mode 100644 test/latest/src/test/aube/package.json diff --git a/.github/renovate.json b/.github/renovate.json index 512eb455ad..c4291c86dd 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -61,6 +61,7 @@ "matchDepNames": [ "apko", "apm", + "aube", "bazelisk", "buf", "buildx", @@ -116,6 +117,7 @@ "matchDepNames": [ "apko", "apm", + "aube", "bazelisk", "buf", "buildx", diff --git a/docs/custom-registries.md b/docs/custom-registries.md index d915a42ad4..593af1cf03 100644 --- a/docs/custom-registries.md +++ b/docs/custom-registries.md @@ -59,6 +59,19 @@ https://github.com/microsoft/apm/releases/download/v0.24.0/apm-linux-arm64.tar.g https://github.com/microsoft/apm/releases/download/v0.24.0/apm-linux-arm64.tar.gz.sha256 ``` +## `aube` + +Aube releases are downloaded from: + +- `https://github.com/jdx/aube/releases` + +Samples: + +```txt +https://github.com/jdx/aube/releases/download/v1.32.0/aube-v1.32.0-aarch64-unknown-linux-gnu.tar.gz +https://github.com/jdx/aube/releases/download/v1.32.0/aube-v1.32.0-x86_64-unknown-linux-gnu.tar.gz +``` + ## `bazelisk` Bazelisk releases are downloaded from: diff --git a/src/cli/install-tool/index.ts b/src/cli/install-tool/index.ts index 80ea5d39b7..2ae3aa622e 100644 --- a/src/cli/install-tool/index.ts +++ b/src/cli/install-tool/index.ts @@ -9,6 +9,7 @@ import { } from '../services/index.ts'; import { ApkoInstallService } from '../tools/apko.ts'; import { ApmInstallService } from '../tools/apm.ts'; +import { AubeInstallService } from '../tools/aube.ts'; import { BazeliskInstallService } from '../tools/bazelisk.ts'; import { BufInstallService } from '../tools/buf.ts'; import { BunInstallService } from '../tools/bun.ts'; @@ -137,6 +138,7 @@ async function prepareInstallContainer(): Promise { container.bind(INSTALL_TOOL_TOKEN).to(AndroidSdkCmdlineToolsInstallService); container.bind(INSTALL_TOOL_TOKEN).to(ApkoInstallService); container.bind(INSTALL_TOOL_TOKEN).to(ApmInstallService); + container.bind(INSTALL_TOOL_TOKEN).to(AubeInstallService); container.bind(INSTALL_TOOL_TOKEN).to(ComposerInstallService); container.bind(INSTALL_TOOL_TOKEN).to(BazeliskInstallService); container.bind(INSTALL_TOOL_TOKEN).to(BuildxInstallService); diff --git a/src/cli/tools/aube.ts b/src/cli/tools/aube.ts new file mode 100644 index 0000000000..e0e43db541 --- /dev/null +++ b/src/cli/tools/aube.ts @@ -0,0 +1,44 @@ +import fs from 'node:fs/promises'; +import { join } from 'node:path'; +import { injectFromHierarchy, injectable } from 'inversify'; +import { BaseInstallService } from '../install-tool/base-install.service.ts'; + +@injectable() +@injectFromHierarchy() +export class AubeInstallService extends BaseInstallService { + readonly name = 'aube'; + + private get ghArch(): string { + switch (this.envSvc.arch) { + case 'arm64': + return 'aarch64'; + case 'amd64': + return 'x86_64'; + } + } + + override async install(version: string): Promise { + const filename = `aube-v${version}-${this.ghArch}-unknown-linux-gnu.tar.gz`; + const file = await this.http.download({ + url: `https://github.com/jdx/aube/releases/download/v${version}/${filename}`, + }); + + await this.pathSvc.ensureToolPath(this.name); + + const path = join( + await this.pathSvc.createVersionedToolPath(this.name, version), + 'bin', + ); + await fs.mkdir(path); + await this.compress.extract({ file, cwd: path }); + } + + override async link(version: string): Promise { + const src = join(this.pathSvc.versionedToolPath(this.name, version), 'bin'); + await this.shellwrapper({ srcDir: src }); + } + + override async test(_version: string): Promise { + await this._spawn(this.name, ['--version']); + } +} diff --git a/src/cli/tools/index.ts b/src/cli/tools/index.ts index 7e0b817fc6..c78da720b3 100644 --- a/src/cli/tools/index.ts +++ b/src/cli/tools/index.ts @@ -4,6 +4,7 @@ export const NoPrepareTools = [ 'android-sdk-cmdline-tools', 'apko', 'apm', + 'aube', 'bazelisk', 'bower', 'buf', diff --git a/test/latest/Dockerfile b/test/latest/Dockerfile index 51062501a0..c342e19d7a 100644 --- a/test/latest/Dockerfile +++ b/test/latest/Dockerfile @@ -212,7 +212,7 @@ RUN prepare-tool all RUN set -ex; [ -d /usr/local/erlang ] && echo "works" || exit 1; #-------------------------------------- -# test: apm, bazelisk, buf, bun, deno, devbox, gh, helmfile, kustomize, skopeo, tofu, vendir +# test: apm, aube, bazelisk, buf, bun, deno, devbox, gh, helmfile, kustomize, skopeo, tofu, vendir #-------------------------------------- FROM base AS teste @@ -234,6 +234,9 @@ RUN install-tool apko 1.2.36 # renovate: datasource=github-releases packageName=microsoft/apm RUN install-tool apm 0.28.0 +# renovate: datasource=github-releases packageName=jdx/aube +RUN install-tool aube 1.32.0 + # renovate: datasource=github-releases packageName=jetify-com/devbox RUN install-tool devbox 0.17.5 @@ -292,8 +295,16 @@ RUN helmfile version | grep "${HELMFILE_VERSION#v}" RUN kustomize version | grep "${KUSTOMIZE_VERSION}" +COPY --chown=12021:0 test/latest/src/test/aube /tmp/aube + +WORKDIR /tmp/aube + USER 12021 +RUN aube install + +RUN aube install --ignore-scripts + RUN bazel --version RUN gh --version diff --git a/test/latest/Dockerfile.arm64 b/test/latest/Dockerfile.arm64 index 47b9e3f8c9..6473c56af9 100644 --- a/test/latest/Dockerfile.arm64 +++ b/test/latest/Dockerfile.arm64 @@ -72,6 +72,24 @@ FROM base AS test-apm # renovate: datasource=github-releases packageName=microsoft/apm RUN install-tool apm 0.28.0 +#-------------------------------------- +# Image: aube +#-------------------------------------- +FROM base AS test-aube + +# renovate: datasource=github-releases packageName=jdx/aube +RUN install-tool aube 1.32.0 + +COPY --chown=12021:0 test/latest/src/test/aube /tmp/aube + +USER 12021 + +WORKDIR /tmp/aube + +RUN aube install + +RUN aube install --ignore-scripts + #-------------------------------------- # Image: devbox #-------------------------------------- @@ -223,6 +241,7 @@ COPY --from=test-bun /.dummy /.dummy COPY --from=test-deno /.dummy /.dummy COPY --from=test-apko /.dummy /.dummy COPY --from=test-apm /.dummy /.dummy +COPY --from=test-aube /.dummy /.dummy COPY --from=test-devbox /.dummy /.dummy COPY --from=test-docker /.dummy /.dummy COPY --from=test-gh /.dummy /.dummy diff --git a/test/latest/src/test/aube/package.json b/test/latest/src/test/aube/package.json new file mode 100644 index 0000000000..463ed72140 --- /dev/null +++ b/test/latest/src/test/aube/package.json @@ -0,0 +1,4 @@ +{ + "name": "containerbase-aube-test", + "private": true +} From 5712629e32c507201bae878ad249f36627d27f16 Mon Sep 17 00:00:00 2001 From: Jonah Snider Date: Mon, 17 Aug 2026 16:27:57 -0700 Subject: [PATCH 2/5] feat: update aube to v1.41.0 Signed-off-by: Jonah Snider --- docs/custom-registries.md | 4 ++-- test/latest/Dockerfile | 2 +- test/latest/Dockerfile.arm64 | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/custom-registries.md b/docs/custom-registries.md index 593af1cf03..cf0b6b4940 100644 --- a/docs/custom-registries.md +++ b/docs/custom-registries.md @@ -68,8 +68,8 @@ Aube releases are downloaded from: Samples: ```txt -https://github.com/jdx/aube/releases/download/v1.32.0/aube-v1.32.0-aarch64-unknown-linux-gnu.tar.gz -https://github.com/jdx/aube/releases/download/v1.32.0/aube-v1.32.0-x86_64-unknown-linux-gnu.tar.gz +https://github.com/jdx/aube/releases/download/v1.41.0/aube-v1.41.0-aarch64-unknown-linux-gnu.tar.gz +https://github.com/jdx/aube/releases/download/v1.41.0/aube-v1.41.0-x86_64-unknown-linux-gnu.tar.gz ``` ## `bazelisk` diff --git a/test/latest/Dockerfile b/test/latest/Dockerfile index c342e19d7a..13e4261fb3 100644 --- a/test/latest/Dockerfile +++ b/test/latest/Dockerfile @@ -235,7 +235,7 @@ RUN install-tool apko 1.2.36 RUN install-tool apm 0.28.0 # renovate: datasource=github-releases packageName=jdx/aube -RUN install-tool aube 1.32.0 +RUN install-tool aube 1.41.0 # renovate: datasource=github-releases packageName=jetify-com/devbox RUN install-tool devbox 0.17.5 diff --git a/test/latest/Dockerfile.arm64 b/test/latest/Dockerfile.arm64 index 6473c56af9..cc4661fcfa 100644 --- a/test/latest/Dockerfile.arm64 +++ b/test/latest/Dockerfile.arm64 @@ -78,7 +78,7 @@ RUN install-tool apm 0.28.0 FROM base AS test-aube # renovate: datasource=github-releases packageName=jdx/aube -RUN install-tool aube 1.32.0 +RUN install-tool aube 1.41.0 COPY --chown=12021:0 test/latest/src/test/aube /tmp/aube From 7c2074fe8f49aba16f56673b9ac29c9d166761d7 Mon Sep 17 00:00:00 2001 From: Jonah Snider Date: Fri, 11 Sep 2026 09:20:59 -0700 Subject: [PATCH 3/5] fix: validate aube checksum --- src/cli/tools/aube.ts | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/cli/tools/aube.ts b/src/cli/tools/aube.ts index e0e43db541..6be10fc07f 100644 --- a/src/cli/tools/aube.ts +++ b/src/cli/tools/aube.ts @@ -3,6 +3,13 @@ import { join } from 'node:path'; import { injectFromHierarchy, injectable } from 'inversify'; import { BaseInstallService } from '../install-tool/base-install.service.ts'; +interface GitHubRelease { + assets: { + digest: string | null; + name: string; + }[]; +} + @injectable() @injectFromHierarchy() export class AubeInstallService extends BaseInstallService { @@ -18,9 +25,25 @@ export class AubeInstallService extends BaseInstallService { } override async install(version: string): Promise { + const baseUrl = `https://github.com/jdx/aube/releases/download/v${version}/`; const filename = `aube-v${version}-${this.ghArch}-unknown-linux-gnu.tar.gz`; + const url = `${baseUrl}${filename}`; + + const release = await this.http.getJson( + `https://api.github.com/repos/jdx/aube/releases/tags/v${version}`, + ); + const expectedChecksum = release.assets + .find((asset) => asset.name === filename) + ?.digest?.replace(/^sha256:/, ''); + + if (!expectedChecksum) { + throw new Error(`Cannot find checksum for '${filename}'`); + } + const file = await this.http.download({ - url: `https://github.com/jdx/aube/releases/download/v${version}/${filename}`, + url, + checksumType: 'sha256', + expectedChecksum, }); await this.pathSvc.ensureToolPath(this.name); From 7b09ac3f46f229f06313e0788823316e7a22b3ac Mon Sep 17 00:00:00 2001 From: Jonah Snider Date: Fri, 11 Sep 2026 09:21:15 -0700 Subject: [PATCH 4/5] fix: remove WORKDIR and condense Dockerfiles --- test/latest/Dockerfile | 6 ++---- test/latest/Dockerfile.arm64 | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/test/latest/Dockerfile b/test/latest/Dockerfile index e8e1c44df5..2c604c1331 100644 --- a/test/latest/Dockerfile +++ b/test/latest/Dockerfile @@ -297,13 +297,11 @@ RUN kustomize version | grep "${KUSTOMIZE_VERSION}" COPY --chown=12021:0 test/latest/src/test/aube /tmp/aube -WORKDIR /tmp/aube - USER 12021 -RUN aube install +RUN set -ex; cd /tmp/aube; aube install; test -f node_modules/is-number/index.js -RUN aube install --ignore-scripts +RUN set -ex; cd /tmp/aube; aube install --ignore-scripts RUN bazel --version diff --git a/test/latest/Dockerfile.arm64 b/test/latest/Dockerfile.arm64 index 30eff4f8b6..0dadb6018a 100644 --- a/test/latest/Dockerfile.arm64 +++ b/test/latest/Dockerfile.arm64 @@ -84,11 +84,9 @@ COPY --chown=12021:0 test/latest/src/test/aube /tmp/aube USER 12021 -WORKDIR /tmp/aube +RUN set -ex; cd /tmp/aube; aube install; test -f node_modules/is-number/index.js -RUN aube install - -RUN aube install --ignore-scripts +RUN set -ex; cd /tmp/aube; aube install --ignore-scripts #-------------------------------------- # Image: devbox From d78355e2ceabdc3d05369102ee8bde1d9d74cbfe Mon Sep 17 00:00:00 2001 From: Jonah Snider Date: Fri, 11 Sep 2026 09:21:22 -0700 Subject: [PATCH 5/5] fix: install a dependency with aube --- test/latest/src/test/aube/package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/latest/src/test/aube/package.json b/test/latest/src/test/aube/package.json index 463ed72140..c07f710bdd 100644 --- a/test/latest/src/test/aube/package.json +++ b/test/latest/src/test/aube/package.json @@ -1,4 +1,7 @@ { "name": "containerbase-aube-test", - "private": true + "private": true, + "dependencies": { + "is-number": "7.0.0" + } }