Skip to content
This repository was archived by the owner on Jan 27, 2026. It is now read-only.

Commit 5dd0522

Browse files
committed
feature(cli): extend container tool to buildah
Signed-off-by: Marcel Hild <hild@b4mad.net>
1 parent 9ba1c90 commit 5dd0522

File tree

2 files changed

+57
-17
lines changed

2 files changed

+57
-17
lines changed

packages/cli/src/commands/index.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,12 +177,16 @@ export function registerScriptCommand(program: Command) {
177177
)
178178
.option(
179179
'--use-docker',
180-
'By defult, the command uses podman to build the container image. Use this flag to use docker instead.',
181-
false,
180+
'Use Docker as the container tool (deprecated, use --container-tool instead)',
181+
)
182+
.option(
183+
'--container-tool <tool>',
184+
'Container tool to use for building the image. Allowed values: "docker", "podman", "buildah". Default is "podman".',
185+
'podman',
182186
)
183187
.option(
184188
'--platform <platform>',
185-
'Platform to use when building the container image. Default is "linux/amd64". Can be set to "" to not set --platfrom flag in builder command.',
189+
'Platform to use when building the container image. Default is "linux/amd64". Can be set to "" to not set --platform flag in builder command.',
186190
'linux/amd64',
187191
)
188192
.action(

packages/cli/src/commands/package-dynamic-plugins/command.ts

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,60 @@ import { paths } from '../../lib/paths';
1313
import { Task } from '../../lib/tasks';
1414

1515
export async function command(opts: OptionValues): Promise<void> {
16-
const { exportTo, forceExport, preserveTempDir, tag, useDocker, platform } =
17-
opts;
16+
const {
17+
exportTo,
18+
forceExport,
19+
preserveTempDir,
20+
tag,
21+
useDocker,
22+
containerTool = 'podman',
23+
platform,
24+
} = opts;
1825
if (!exportTo && !tag) {
1926
Task.error(
2027
`Neither ${chalk.white('--export-to')} or ${chalk.white('--tag')} was specified, either specify ${chalk.white('--export-to')} to export plugins to a directory or ${chalk.white('--tag')} to export plugins to a container image`,
2128
);
2229
return;
2330
}
24-
const containerTool = useDocker ? 'docker' : 'podman';
31+
32+
let _containerTool = containerTool;
33+
34+
// Check if useDocker is set to true and set the container tool to docker
35+
if (useDocker) {
36+
Task.log(
37+
`The ${chalk.white('--use-docker')} flag is deprecated, use ${chalk.white(
38+
'--container-tool',
39+
)} instead`,
40+
);
41+
Task.log(
42+
`Setting ${chalk.white('--container-tool')} to docker as ${chalk.white(
43+
'--use-docker')} was specified`,
44+
);
45+
_containerTool = 'docker';
46+
}
47+
48+
// Validate containerTool value
49+
const allowedTools = ['docker', 'podman', 'buildah'];
50+
if (!allowedTools.includes(_containerTool)) {
51+
Task.error(
52+
`Invalid value for --container-tool: ${_containerTool}. Allowed values are: ${allowedTools.join(', ')}`,
53+
);
54+
return;
55+
}
56+
57+
// Determine the build command and version check command
58+
const buildCommand = _containerTool === 'buildah' ? 'bud' : 'build';
59+
const containerToolCmd = _containerTool;
60+
2561
// check if the container tool is available, skip if just exporting the plugins to a directory
2662
if (!exportTo) {
63+
let toolAvailable = false;
2764
try {
28-
await Task.forCommand(`${containerTool} --version`);
65+
await Task.forCommand(`${containerToolCmd} --version`);
66+
toolAvailable = true;
2967
} catch (e) {
3068
Task.error(
31-
`Unable to find ${containerTool} command: ${e}\nMake sure that ${containerTool} is installed and available in your PATH.`,
69+
`Unable to find ${containerToolCmd} command: ${e}\nMake sure that ${containerToolCmd} is installed and available in your PATH.`,
3270
);
3371
return;
3472
}
@@ -202,16 +240,14 @@ export async function command(opts: OptionValues): Promise<void> {
202240
flags.push(`--platform ${platform}`);
203241
}
204242
// run the command to generate the image
205-
Task.log(`Creating image using ${containerTool}`);
206-
await Task.forCommand(
207-
`echo "from scratch
243+
Task.log(`Creating image using ${containerToolCmd}`);
244+
const containerInput = `from scratch
208245
COPY . .
209-
" | ${containerTool} build \
210-
${flags.join(' ')} \
211-
-t '${tag}' -f - .
212-
`,
213-
{ cwd: tmpDir },
214-
);
246+
`;
247+
const buildCmd =
248+
`echo "${containerInput}" | ${containerToolCmd} ${buildCommand} ${flags.join(' ')} -t '${tag}' -f - .`;
249+
250+
await Task.forCommand(buildCmd, { cwd: tmpDir });
215251
Task.log(`Successfully built image ${tag} with following plugins:`);
216252
for (const plugin of pluginRegistryMetadata) {
217253
Task.log(` ${chalk.white(Object.keys(plugin)[0])}`);

0 commit comments

Comments
 (0)