From 0e6d95b2f3c96395c0ce6bdf85be25edc534bb59 Mon Sep 17 00:00:00 2001 From: Florent Benoit Date: Thu, 11 Jan 2024 09:41:05 -0500 Subject: [PATCH] feat: add platform parameter to image build method related to https://github.com/containers/podman-desktop/issues/5492 Signed-off-by: Florent Benoit --- packages/extension-api/src/extension-api.d.ts | 1 + .../main/src/plugin/container-registry.spec.ts | 17 ++++++++++------- packages/main/src/plugin/container-registry.ts | 2 ++ packages/main/src/plugin/extension-loader.ts | 2 ++ packages/main/src/plugin/index.ts | 2 ++ packages/preload/src/index.ts | 2 ++ .../image/BuildImageFromContainerfile.svelte | 2 ++ 7 files changed, 21 insertions(+), 7 deletions(-) diff --git a/packages/extension-api/src/extension-api.d.ts b/packages/extension-api/src/extension-api.d.ts index 4d988708cf80..922c3b5a4d4b 100644 --- a/packages/extension-api/src/extension-api.d.ts +++ b/packages/extension-api/src/extension-api.d.ts @@ -1924,6 +1924,7 @@ declare module '@podman-desktop/api' { containerBuildContextDirectory: string, relativeContainerfilePath: string, imageName: string, + platform: string, selectedProvider: ProviderContainerConnectionInfo | containerDesktopAPI.ContainerProviderConnection, eventCollect: (eventName: 'stream' | 'error' | 'finish', data: string) => void, abortController?: AbortController, diff --git a/packages/main/src/plugin/container-registry.spec.ts b/packages/main/src/plugin/container-registry.spec.ts index 209be2b4808d..441abe5ae083 100644 --- a/packages/main/src/plugin/container-registry.spec.ts +++ b/packages/main/src/plugin/container-registry.spec.ts @@ -981,7 +981,7 @@ describe('buildImage', () => { lifecycleMethods: undefined, status: 'started', }; - await expect(containerRegistry.buildImage('context', 'file', 'name', connection, () => {})).rejects.toThrow( + await expect(containerRegistry.buildImage('context', 'file', 'name', '', connection, () => {})).rejects.toThrow( 'no running provider for the matching container', ); }); @@ -1009,7 +1009,7 @@ describe('buildImage', () => { }, status: () => 'started', }; - await expect(containerRegistry.buildImage('context', 'file', 'name', connection, () => {})).rejects.toThrow( + await expect(containerRegistry.buildImage('context', 'file', 'name', '', connection, () => {})).rejects.toThrow( 'no running provider for the matching container', ); }); @@ -1046,7 +1046,7 @@ describe('buildImage', () => { vi.spyOn(tar, 'pack').mockReturnValue({} as NodeJS.ReadableStream); vi.spyOn(dockerAPI, 'buildImage').mockRejectedValue('human error message'); - await expect(containerRegistry.buildImage('context', 'file', 'name', connection, () => {})).rejects.toThrow( + await expect(containerRegistry.buildImage('context', 'file', 'name', '', connection, () => {})).rejects.toThrow( 'human error message', ); }); @@ -1082,7 +1082,7 @@ describe('buildImage', () => { vi.spyOn(tar, 'pack').mockReturnValue({} as NodeJS.ReadableStream); vi.spyOn(dockerAPI, 'buildImage').mockRejectedValue('human error message'); - await expect(containerRegistry.buildImage('context', 'file', 'name', connection, () => {})).rejects.toThrow( + await expect(containerRegistry.buildImage('context', 'file', 'name', '', connection, () => {})).rejects.toThrow( 'human error message', ); }); @@ -1122,12 +1122,13 @@ describe('buildImage', () => { return f(null, []); }); - await containerRegistry.buildImage('context', '\\path\\file', 'name', connection, () => {}); + await containerRegistry.buildImage('context', '\\path\\file', 'name', '', connection, () => {}); expect(dockerAPI.buildImage).toBeCalledWith({} as NodeJS.ReadableStream, { registryconfig: {}, dockerfile: '/path/file', t: 'name', + platform: '', }); }); @@ -1165,12 +1166,13 @@ describe('buildImage', () => { return f(null, []); }); - await containerRegistry.buildImage('context', '\\path\\file', 'name', connection, () => {}); + await containerRegistry.buildImage('context', '\\path\\file', 'name', '', connection, () => {}); expect(dockerAPI.buildImage).toBeCalledWith({} as NodeJS.ReadableStream, { registryconfig: {}, dockerfile: '/path/file', t: 'name', + platform: '', }); }); @@ -1209,10 +1211,11 @@ describe('buildImage', () => { return f(null, []); }); - await containerRegistry.buildImage('context', '/dir/dockerfile', 'name', connection, () => {}); + await containerRegistry.buildImage('context', '/dir/dockerfile', 'name', '', connection, () => {}); expect(dockerAPI.buildImage).toBeCalledWith({} as NodeJS.ReadableStream, { registryconfig: {}, + platform: '', dockerfile: '/dir/dockerfile', t: 'name', }); diff --git a/packages/main/src/plugin/container-registry.ts b/packages/main/src/plugin/container-registry.ts index 9dab30ce2f52..d90df0221e9c 100644 --- a/packages/main/src/plugin/container-registry.ts +++ b/packages/main/src/plugin/container-registry.ts @@ -1948,6 +1948,7 @@ export class ContainerProviderRegistry { containerBuildContextDirectory: string, relativeContainerfilePath: string, imageName: string, + platform: string, selectedProvider: ProviderContainerConnectionInfo | containerDesktopAPI.ContainerProviderConnection, eventCollect: (eventName: 'stream' | 'error' | 'finish', data: string) => void, abortController?: AbortController, @@ -1974,6 +1975,7 @@ export class ContainerProviderRegistry { registryconfig, dockerfile: relativeContainerfilePath, t: imageName, + platform: platform, abortSignal: abortController?.signal, })) as unknown as Stream; } catch (error: unknown) { diff --git a/packages/main/src/plugin/extension-loader.ts b/packages/main/src/plugin/extension-loader.ts index e5e4d3186180..695357ad48e8 100644 --- a/packages/main/src/plugin/extension-loader.ts +++ b/packages/main/src/plugin/extension-loader.ts @@ -910,6 +910,7 @@ export class ExtensionLoader { containerBuildContextDirectory: string, relativeContainerfilePath: string, imageName: string, + platform: string, selectedProvider: ProviderContainerConnectionInfo | containerDesktopAPI.ContainerProviderConnection, eventCollect: (eventName: 'stream' | 'error' | 'finish', data: string) => void, abortController?: AbortController, @@ -918,6 +919,7 @@ export class ExtensionLoader { containerBuildContextDirectory, relativeContainerfilePath, imageName, + platform, selectedProvider, eventCollect, abortController, diff --git a/packages/main/src/plugin/index.ts b/packages/main/src/plugin/index.ts index 3496a01b385e..8a04f0a74c9d 100644 --- a/packages/main/src/plugin/index.ts +++ b/packages/main/src/plugin/index.ts @@ -1195,6 +1195,7 @@ export class PluginSystem { containerBuildContextDirectory: string, relativeContainerfilePath: string, imageName: string, + platform: string, selectedProvider: ProviderContainerConnectionInfo, onDataCallbacksBuildImageId: number, cancellableTokenId?: number, @@ -1208,6 +1209,7 @@ export class PluginSystem { containerBuildContextDirectory, relativeContainerfilePath, imageName, + platform, selectedProvider, (eventName: string, data: string) => { this.getWebContentsSender().send( diff --git a/packages/preload/src/index.ts b/packages/preload/src/index.ts index b03d7da98fe9..0a0ba0861f05 100644 --- a/packages/preload/src/index.ts +++ b/packages/preload/src/index.ts @@ -1004,6 +1004,7 @@ function initExposure(): void { containerBuildContextDirectory: string, relativeContainerfilePath: string, imageName: string, + platform: string, selectedProvider: ProviderContainerConnectionInfo, key: symbol, eventCollect: (key: symbol, eventName: 'finish' | 'stream' | 'error', data: string) => void, @@ -1017,6 +1018,7 @@ function initExposure(): void { containerBuildContextDirectory, relativeContainerfilePath, imageName, + platform, selectedProvider, onDataCallbacksBuildImageId, cancellableTokenId, diff --git a/packages/renderer/src/lib/image/BuildImageFromContainerfile.svelte b/packages/renderer/src/lib/image/BuildImageFromContainerfile.svelte index 018d34885415..a6c459ecce6f 100644 --- a/packages/renderer/src/lib/image/BuildImageFromContainerfile.svelte +++ b/packages/renderer/src/lib/image/BuildImageFromContainerfile.svelte @@ -27,6 +27,7 @@ let buildFinished = false; let containerImageName = 'my-custom-image'; let containerFilePath: string; let containerBuildContextDirectory: string; +let containerBuildPlatform: string; let buildImageInfo: BuildImageInfo | undefined = undefined; let cancellableTokenId: number | undefined = undefined; @@ -69,6 +70,7 @@ async function buildContainerImage(): Promise { containerBuildContextDirectory, relativeContainerfilePath, containerImageName, + containerBuildPlatform, selectedProvider, buildImageInfo.buildImageKey, eventCollect,