@@ -13,22 +13,60 @@ import { paths } from '../../lib/paths';
1313import { Task } from '../../lib/tasks' ;
1414
1515export 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+ // version check command
64+ containerToolCmd = _containerTool ;
2765 try {
28- await Task . forCommand ( `${ containerTool } --version` ) ;
66+ await Task . forCommand ( `${ containerToolCmd } --version` ) ;
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,13 @@ 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
208245COPY . .
209- " | ${ containerTool } build \
210- ${ flags . join ( ' ' ) } \
211- -t '${ tag } ' -f - .
212- ` ,
213- { cwd : tmpDir } ,
214- ) ;
246+ ` ;
247+ const buildCmd = `echo "${ containerInput } " | ${ containerToolCmd } build ${ flags . join ( ' ' ) } -t '${ tag } ' -f - .` ;
248+
249+ await Task . forCommand ( buildCmd , { cwd : tmpDir } ) ;
215250 Task . log ( `Successfully built image ${ tag } with following plugins:` ) ;
216251 for ( const plugin of pluginRegistryMetadata ) {
217252 Task . log ( ` ${ chalk . white ( Object . keys ( plugin ) [ 0 ] ) } ` ) ;
0 commit comments