Skip to content

Commit 47a1eca

Browse files
committed
improve push and load flag handling
1 parent 4db1de2 commit 47a1eca

File tree

3 files changed

+71
-23
lines changed

3 files changed

+71
-23
lines changed

packages/cli-v3/src/commands/deploy.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ const DeployCommandOptions = CommonCommandOptions.extend({
4545
skipSyncEnvVars: z.boolean().default(false),
4646
env: z.enum(["prod", "staging", "preview"]),
4747
branch: z.string().optional(),
48-
load: z.boolean().default(false),
48+
load: z.boolean().optional(),
4949
config: z.string().optional(),
5050
projectRef: z.string().optional(),
5151
saveLogs: z.boolean().default(false),
@@ -55,7 +55,7 @@ const DeployCommandOptions = CommonCommandOptions.extend({
5555
envFile: z.string().optional(),
5656
// Local build options
5757
network: z.enum(["default", "none", "host"]).optional(),
58-
push: z.boolean().default(false),
58+
push: z.boolean().optional(),
5959
builder: z.string().default("trigger"),
6060
});
6161

@@ -111,6 +111,12 @@ export function configureDeployCommand(program: Command) {
111111
.addOption(
112112
new CommandOption("--load", "Load the built image into your local docker").hideHelp()
113113
)
114+
.addOption(
115+
new CommandOption(
116+
"--no-load",
117+
"Do not load the built image into your local docker"
118+
).hideHelp()
119+
)
114120
.addOption(
115121
new CommandOption(
116122
"--save-logs",
@@ -119,6 +125,9 @@ export function configureDeployCommand(program: Command) {
119125
)
120126
// Local build options
121127
.addOption(new CommandOption("--push", "Push the image after local builds").hideHelp())
128+
.addOption(
129+
new CommandOption("--no-push", "Do not push the image after local builds").hideHelp()
130+
)
122131
.addOption(
123132
new CommandOption(
124133
"--network <mode>",
@@ -392,7 +401,7 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) {
392401
deploymentVersion: deployment.version,
393402
imageTag: deployment.imageTag,
394403
imagePlatform: deployment.imagePlatform,
395-
loadImage: options.load,
404+
load: options.load,
396405
contentHash: deployment.contentHash,
397406
externalBuildId: deployment.externalBuildData?.buildId,
398407
externalBuildToken: deployment.externalBuildData?.buildToken,

packages/cli-v3/src/commands/workers/build.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ async function _workerBuildCommand(dir: string, options: WorkersBuildCommandOpti
335335
deploymentId: deployment.id,
336336
deploymentVersion: deployment.version,
337337
imageTag: deployment.imageTag,
338-
loadImage: options.load,
338+
load: options.load,
339339
contentHash: deployment.contentHash,
340340
externalBuildId: deployment.externalBuildData?.buildId,
341341
externalBuildToken: deployment.externalBuildData?.buildToken,

packages/cli-v3/src/deploy/buildImage.ts

Lines changed: 58 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,17 @@ import { safeReadJSONFile } from "../utilities/fileSystem.js";
88
import { readFileSync } from "fs";
99
import { isLinux } from "std-env";
1010
import { z } from "zod";
11+
import { assertExhaustive } from "../utilities/assertExhaustive.js";
1112

1213
export interface BuildImageOptions {
1314
// Common options
1415
isLocalBuild: boolean;
1516
imagePlatform: string;
1617
noCache?: boolean;
17-
loadImage?: boolean;
18+
load?: boolean;
1819

1920
// Local build options
20-
push: boolean;
21+
push?: boolean;
2122
network?: string;
2223
builder: string;
2324

@@ -50,7 +51,7 @@ export async function buildImage(options: BuildImageOptions): Promise<BuildImage
5051
imagePlatform,
5152
noCache,
5253
push,
53-
loadImage,
54+
load,
5455
authAccessToken,
5556
imageTag,
5657
deploymentId,
@@ -83,7 +84,7 @@ export async function buildImage(options: BuildImageOptions): Promise<BuildImage
8384
contentHash,
8485
projectRef,
8586
push,
86-
loadImage,
87+
load,
8788
noCache,
8889
extraCACerts,
8990
apiUrl,
@@ -113,7 +114,7 @@ export async function buildImage(options: BuildImageOptions): Promise<BuildImage
113114
deploymentVersion,
114115
contentHash,
115116
projectRef,
116-
loadImage,
117+
load,
117118
imagePlatform,
118119
noCache,
119120
extraCACerts,
@@ -140,7 +141,7 @@ export interface DepotBuildImageOptions {
140141
apiUrl: string;
141142
apiKey: string;
142143
branchName?: string;
143-
loadImage?: boolean;
144+
load?: boolean;
144145
noCache?: boolean;
145146
extraCACerts?: string;
146147
buildEnvVars?: Record<string, string | undefined>;
@@ -174,6 +175,7 @@ async function remoteBuildImage(options: DepotBuildImageOptions): Promise<BuildI
174175
options.noCache ? "--no-cache" : undefined,
175176
"--platform",
176177
options.imagePlatform,
178+
options.load ? "--load" : undefined,
177179
"--provenance",
178180
"false",
179181
"--metadata-file",
@@ -200,7 +202,6 @@ async function remoteBuildImage(options: DepotBuildImageOptions): Promise<BuildI
200202
"plain",
201203
".",
202204
"--save",
203-
options.loadImage ? "--load" : undefined,
204205
].filter(Boolean) as string[];
205206

206207
logger.debug(`depot ${args.join(" ")}`, { cwd: options.cwd });
@@ -290,7 +291,7 @@ interface SelfHostedBuildImageOptions {
290291
contentHash: string;
291292
projectRef: string;
292293
imagePlatform: string;
293-
push: boolean;
294+
push?: boolean;
294295
apiUrl: string;
295296
apiKey: string;
296297
branchName?: string;
@@ -299,7 +300,7 @@ interface SelfHostedBuildImageOptions {
299300
buildEnvVars?: Record<string, string | undefined>;
300301
network?: string;
301302
builder: string;
302-
loadImage?: boolean;
303+
load?: boolean;
303304
onLog?: (log: string) => void;
304305
}
305306

@@ -408,15 +409,13 @@ async function localBuildImage(options: SelfHostedBuildImageOptions): Promise<Bu
408409

409410
const apiUrl = normalizeApiUrlForBuild(options.apiUrl);
410411
const addHost = getAddHost(apiUrl);
412+
const push = shouldPush(options.imageTag, options.push);
413+
const load = shouldLoad(options.load, push);
411414

412-
// Don't push if the image tag is a local address, unless the user explicitly wants to push
413-
const shouldPush = options.push
414-
? true
415-
: imageTag.startsWith("localhost") ||
416-
imageTag.startsWith("127.0.0.1") ||
417-
imageTag.startsWith("0.0.0.0")
418-
? false
419-
: true;
415+
console.log("imageTag", options.imageTag);
416+
console.log("apiUrl", apiUrl);
417+
console.log("push", push);
418+
console.log("load", load);
420419

421420
await ensureQemuRegistered(options.imagePlatform);
422421

@@ -432,8 +431,8 @@ async function localBuildImage(options: SelfHostedBuildImageOptions): Promise<Bu
432431
options.imagePlatform,
433432
options.network ? `--network=${options.network}` : undefined,
434433
addHost ? `--add-host=${addHost}` : undefined,
435-
shouldPush ? "--push" : undefined,
436-
options.loadImage ? "--load" : undefined,
434+
push ? "--push" : undefined,
435+
load ? "--load" : undefined,
437436
"--provenance",
438437
"false",
439438
"--metadata-file",
@@ -897,3 +896,43 @@ const BuildKitMetadata = z.object({
897896
"containerimage.digest": z.string().optional(),
898897
"image.name": z.string().optional(),
899898
});
899+
900+
// Don't push if the image tag is a local address, unless the user explicitly wants to push
901+
function shouldPush(imageTag: string, push?: boolean) {
902+
switch (push) {
903+
case true: {
904+
return true;
905+
}
906+
case false: {
907+
return false;
908+
}
909+
case undefined: {
910+
return imageTag.startsWith("localhost") ||
911+
imageTag.startsWith("127.0.0.1") ||
912+
imageTag.startsWith("0.0.0.0")
913+
? false
914+
: true;
915+
}
916+
default: {
917+
assertExhaustive(push);
918+
}
919+
}
920+
}
921+
922+
// Don't load if we're pushing, unless the user explicitly wants to load
923+
function shouldLoad(load?: boolean, push?: boolean) {
924+
switch (load) {
925+
case true: {
926+
return true;
927+
}
928+
case false: {
929+
return false;
930+
}
931+
case undefined: {
932+
return push ? false : true;
933+
}
934+
default: {
935+
assertExhaustive(load);
936+
}
937+
}
938+
}

0 commit comments

Comments
 (0)