feat(build): add support for selective builds, platform override and build timeout

This commit is contained in:
2026-02-06 11:58:32 +00:00
parent c279dbd55e
commit 7cac628975
6 changed files with 143 additions and 25 deletions

View File

@@ -7,6 +7,7 @@ import * as DockerModule from './tsdocker.docker.js';
import { logger, ora } from './tsdocker.logging.js';
import { TsDockerManager } from './classes.tsdockermanager.js';
import type { IBuildCommandOptions } from './interfaces/index.js';
const tsdockerCli = new plugins.smartcli.Smartcli();
@@ -23,14 +24,28 @@ export let run = () => {
});
/**
* Build all Dockerfiles in dependency order
* Build Dockerfiles in dependency order
* Usage: tsdocker build [Dockerfile_patterns...] [--platform=linux/arm64] [--timeout=600]
*/
tsdockerCli.addCommand('build').subscribe(async argvArg => {
try {
const config = await ConfigModule.run();
const manager = new TsDockerManager(config);
await manager.prepare();
await manager.build();
const buildOptions: IBuildCommandOptions = {};
const patterns = argvArg._.slice(1) as string[];
if (patterns.length > 0) {
buildOptions.patterns = patterns;
}
if (argvArg.platform) {
buildOptions.platform = argvArg.platform as string;
}
if (argvArg.timeout) {
buildOptions.timeout = Number(argvArg.timeout);
}
await manager.build(buildOptions);
logger.log('success', 'Build completed successfully');
} catch (err) {
logger.log('error', `Build failed: ${(err as Error).message}`);
@@ -40,6 +55,7 @@ export let run = () => {
/**
* Push built images to configured registries
* Usage: tsdocker push [Dockerfile_patterns...] [--platform=linux/arm64] [--timeout=600] [--registry=url]
*/
tsdockerCli.addCommand('push').subscribe(async argvArg => {
try {
@@ -50,11 +66,24 @@ export let run = () => {
// Login first
await manager.login();
// Build images first (if not already built)
await manager.build();
// Parse build options from positional args and flags
const buildOptions: IBuildCommandOptions = {};
const patterns = argvArg._.slice(1) as string[];
if (patterns.length > 0) {
buildOptions.patterns = patterns;
}
if (argvArg.platform) {
buildOptions.platform = argvArg.platform as string;
}
if (argvArg.timeout) {
buildOptions.timeout = Number(argvArg.timeout);
}
// Get registry from arguments if specified
const registryArg = argvArg._[1]; // e.g., tsdocker push registry.gitlab.com
// Build images first (if not already built)
await manager.build(buildOptions);
// Get registry from --registry flag
const registryArg = argvArg.registry as string | undefined;
const registries = registryArg ? [registryArg] : undefined;
await manager.push(registries);