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

Commit 35c0999

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

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,61 @@ 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+
2532
// check if the container tool is available, skip if just exporting the plugins to a directory
33+
let containerToolCmd = containerTool;
34+
let containerBuildCommand = 'build';
35+
2636
if (!exportTo) {
37+
let _containerTool = containerTool;
38+
39+
// Check if useDocker is set to true and set the container tool to docker
40+
if (useDocker) {
41+
Task.log(
42+
`The ${chalk.white('--use-docker')} flag is deprecated, use ${chalk.white(
43+
'--container-tool',
44+
)} instead`,
45+
);
46+
Task.log(
47+
`Setting ${chalk.white('--container-tool')} to docker as ${chalk.white(
48+
'--use-docker',
49+
)} was specified`,
50+
);
51+
_containerTool = 'docker';
52+
}
53+
54+
// Validate containerTool value
55+
const allowedTools = ['docker', 'podman', 'buildah'];
56+
if (!allowedTools.includes(_containerTool)) {
57+
Task.error(
58+
`Invalid value for --container-tool: ${_containerTool}. Allowed values are: ${allowedTools.join(', ')}`,
59+
);
60+
return;
61+
}
62+
63+
// Determine the build command and version check command
64+
containerBuildCommand = _containerTool === 'buildah' ? 'bud' : 'build';
65+
containerToolCmd = _containerTool;
2766
try {
28-
await Task.forCommand(`${containerTool} --version`);
67+
await Task.forCommand(`${containerToolCmd} --version`);
2968
} catch (e) {
3069
Task.error(
31-
`Unable to find ${containerTool} command: ${e}\nMake sure that ${containerTool} is installed and available in your PATH.`,
70+
`Unable to find ${containerToolCmd} command: ${e}\nMake sure that ${containerToolCmd} is installed and available in your PATH.`,
3271
);
3372
return;
3473
}
@@ -202,16 +241,13 @@ export async function command(opts: OptionValues): Promise<void> {
202241
flags.push(`--platform ${platform}`);
203242
}
204243
// run the command to generate the image
205-
Task.log(`Creating image using ${containerTool}`);
206-
await Task.forCommand(
207-
`echo "from scratch
244+
Task.log(`Creating image using ${containerToolCmd}`);
245+
const containerInput = `from scratch
208246
COPY . .
209-
" | ${containerTool} build \
210-
${flags.join(' ')} \
211-
-t '${tag}' -f - .
212-
`,
213-
{ cwd: tmpDir },
214-
);
247+
`;
248+
const buildCmd = `echo "${containerInput}" | ${containerToolCmd} ${containerBuildCommand} ${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)