diff --git a/.github/renovate.json b/.github/renovate.json index 2f8968dcd5..13580f79bf 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -62,6 +62,7 @@ "matchDepNames": [ "apko", "apm", + "aube", "bazelisk", "buf", "buildx", @@ -121,6 +122,7 @@ "matchDepNames": [ "apko", "apm", + "aube", "bazelisk", "buf", "buildx", diff --git a/docs/custom-registries.md b/docs/custom-registries.md index e62afe7370..8deba39d94 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.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` Bazelisk releases are downloaded from: diff --git a/packages/base/data/tools.json b/packages/base/data/tools.json index e9b7b4c978..3fe87c8552 100644 --- a/packages/base/data/tools.json +++ b/packages/base/data/tools.json @@ -3,6 +3,7 @@ "android-sdk-cmdline-tools": { "parent": "java" }, "apko": {}, "apm": {}, + "aube": {}, "bazelisk": {}, "bower": { "type": "npm", "parent": "node", "deprecated": true }, "buf": {}, diff --git a/packages/base/src/data.ts b/packages/base/src/data.ts index a1ef3d3e0b..b7b8b21c16 100644 --- a/packages/base/src/data.ts +++ b/packages/base/src/data.ts @@ -8,6 +8,7 @@ export const tools = { 'android-sdk-cmdline-tools': { parent: 'java' }, apko: {}, apm: {}, + aube: {}, bazelisk: {}, bower: { type: 'npm', parent: 'node', deprecated: true }, buf: {}, diff --git a/src/cli/install-tool/index.ts b/src/cli/install-tool/index.ts index 9ae6a81866..fa5c8df523 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'; @@ -119,6 +120,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..e89f837df7 --- /dev/null +++ b/src/cli/tools/aube.ts @@ -0,0 +1,45 @@ +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 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 file = await this.http.download({ url }); + + 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 369d2d2a88..61efedd465 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/node/Dockerfile b/test/node/Dockerfile index 6ae4b191e7..348255961e 100644 --- a/test/node/Dockerfile +++ b/test/node/Dockerfile @@ -125,6 +125,25 @@ RUN set -ex; cd a; \ printf 'allowBuilds:\n re2: false\n' > pnpm-workspace.yaml; \ pnpm i +#-------------------------------------- +# test: aube +#-------------------------------------- +FROM build AS test-aube + +# renovate: datasource=github-releases packageName=jdx/aube +RUN install-tool aube 1.41.0 + +RUN set -ex; cd aube; \ + aube install; \ + test -f node_modules/is-number/index.js; \ + test -f postinstall-ran + +RUN set -ex; cd aube; \ + rm -rf node_modules postinstall-ran; \ + aube install --ignore-scripts; \ + test -f node_modules/is-number/index.js; \ + test ! -e postinstall-ran + #-------------------------------------- # test: node 20 #-------------------------------------- @@ -651,6 +670,7 @@ FROM base COPY --from=testa /.dummy /.dummy COPY --from=testb /.dummy /.dummy COPY --from=testc /.dummy /.dummy +COPY --from=test-aube /.dummy /.dummy COPY --from=teste /.dummy /.dummy COPY --from=testf /.dummy /.dummy COPY --from=testg /.dummy /.dummy diff --git a/test/node/Dockerfile.arm64 b/test/node/Dockerfile.arm64 index 0a6c44c61d..1197447024 100644 --- a/test/node/Dockerfile.arm64 +++ b/test/node/Dockerfile.arm64 @@ -68,6 +68,29 @@ RUN install-tool yarn "${YARN_VERSION}" RUN test "$(yarn --version)" = "${YARN_VERSION}" +#-------------------------------------- +# Image: aube +#-------------------------------------- +FROM test-node AS test-aube + +# renovate: datasource=github-releases packageName=jdx/aube +RUN install-tool aube 1.41.0 + +COPY --chown=12021:0 test/node/test/aube /tmp/aube + +USER 12021 + +RUN set -ex; cd /tmp/aube; \ + aube install; \ + test -f node_modules/is-number/index.js; \ + test -f postinstall-ran + +RUN set -ex; cd /tmp/aube; \ + rm -rf node_modules postinstall-ran; \ + aube install --ignore-scripts; \ + test -f node_modules/is-number/index.js; \ + test ! -e postinstall-ran + #-------------------------------------- # Image: renovate #-------------------------------------- @@ -107,5 +130,6 @@ FROM base COPY --from=test-node /.dummy /.dummy COPY --from=test-pnpm /.dummy /.dummy COPY --from=test-yarn /.dummy /.dummy +COPY --from=test-aube /.dummy /.dummy COPY --from=test-renovate /.dummy /.dummy COPY --from=test-vp /.dummy /.dummy diff --git a/test/node/test/aube/package.json b/test/node/test/aube/package.json new file mode 100644 index 0000000000..29a06e834f --- /dev/null +++ b/test/node/test/aube/package.json @@ -0,0 +1,10 @@ +{ + "name": "containerbase-aube-test", + "private": true, + "scripts": { + "postinstall": "touch postinstall-ran" + }, + "dependencies": { + "is-number": "7.0.0" + } +}