Skip to content

Commit

Permalink
Merge branch 'main' into feature/improve-proxy-typing
Browse files Browse the repository at this point in the history
  • Loading branch information
axel7083 authored Jan 19, 2024
2 parents 91601e2 + 06df71f commit 242554b
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 323 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"typecheck": "npm run typecheck:shared && npm run typecheck:frontend && npm run typecheck:backend"
},
"devDependencies": {
"@podman-desktop/api": "1.6.4",
"@podman-desktop/api": "0.0.202401191125-9c1aea6",
"@typescript-eslint/eslint-plugin": "^6.16.0",
"@typescript-eslint/parser": "^6.16.0",
"@vitest/coverage-v8": "^1.1.0",
Expand Down
17 changes: 8 additions & 9 deletions packages/backend/src/managers/applicationManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import os from 'os';
import fs from 'fs';
import * as https from 'node:https';
import * as path from 'node:path';
import { containerEngine, type ExtensionContext, provider } from '@podman-desktop/api';
import { containerEngine, type ExtensionContext } from '@podman-desktop/api';
import type { RecipeStatusRegistry } from '../registries/RecipeStatusRegistry';
import type { AIConfig } from '../models/AIConfig';
import { parseYaml } from '../models/AIConfig';
Expand Down Expand Up @@ -136,10 +136,6 @@ export class ApplicationManager {
loadingConfiguration.state = 'success';
taskUtil.setTask(loadingConfiguration);

// Getting the provider to use for building
const connections = provider.getContainerConnections();
const connection = connections[0];

// Filter the containers based on architecture
const filteredContainers = aiConfig.application.containers.filter(
container => container.arch === undefined || container.arch === arch(),
Expand Down Expand Up @@ -180,13 +176,15 @@ export class ApplicationManager {
}

let isErrored = false;

const buildOptions = {
containerFile: container.containerfile,
tag: `${container.name}:latest`,
};

return containerEngine
.buildImage(
context,
container.containerfile,
`${container.name}:latest`,
'', // keep empty chain so it use default
connection.connection,
(event, data) => {
// todo: do something with the event
if (event === 'error' || (event === 'finish' && data !== '')) {
Expand All @@ -198,6 +196,7 @@ export class ApplicationManager {
taskUtil.setTaskState(container.name, 'success');
}
},
buildOptions,
)
.catch((err: unknown) => {
console.error('Something went wrong while building the image: ', err);
Expand Down
309 changes: 0 additions & 309 deletions types/podman-desktop-api.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,312 +13,3 @@ declare global {
}

export { PodmanDesktopApi };

// TODO: remove when podman desktop API exposes this interface
declare module '@podman-desktop/api' {

/**
* Resource identifier for a resource
*/
export class Uri {
/**
* Create an URI from a string, e.g. `http://www.example.com/some/path`,
* `file:///usr/home`, or `scheme:with/path`.
*
* *Note* that for a while uris without a `scheme` were accepted. That is not correct
* as all uris should have a scheme. To avoid breakage of existing code the optional
* `strict`-argument has been added. We *strongly* advise to use it, e.g. `Uri.parse('my:uri', true)`
*
* @see {@link Uri.toString}
* @param value The string value of an Uri.
* @param strict Throw an error when `value` is empty or when no `scheme` can be parsed.
* @return A new Uri instance.
*/
static parse(value: string, strict?: boolean): Uri;

/**
* Create an URI from a file system path. The {@link Uri.scheme scheme}
* will be `file`.
*/
static file(path: string): Uri;

/**
* Create a new uri which path is the result of joining
* the path of the base uri with the provided path segments.
*
* @param base An uri. Must have a path.
* @param pathSegments One more more path fragments
* @returns A new uri which path is joined with the given fragments
*/
static joinPath(base: Uri, ...pathSegments: string[]): Uri;

/**
* Use the `file` and `parse` factory functions to create new `Uri` objects.
*/
private constructor(scheme: string, authority: string, path: string, query: string, fragment: string);

/**
* Scheme is the `http` part of `http://www.example.com/some/path?query#fragment`.
* The part before the first colon.
*/
readonly scheme: string;

/**
* Authority is the `www.example.com` part of `http://www.example.com/some/path?query#fragment`.
* The part between the first double slashes and the next slash.
*/
readonly authority: string;

/**
* Path is the `/some/path` part of `http://www.example.com/some/path?query#fragment`.
*/
readonly path: string;

/**
* The string representing the corresponding file system path of this Uri.
*/
readonly fsPath: string;

/**
* Query is the `query` part of `http://www.example.com/some/path?query#fragment`.
*/
readonly query: string;

/**
* Fragment is the `fragment` part of `http://www.example.com/some/path?query#fragment`.
*/
readonly fragment: string;

/**
* Derive a new Uri from this Uri.
*
* ```ts
* const foo = Uri.parse('http://foo');
* const httpsFoo = foo.with({ scheme: 'https' });
* // httpsFoo is now 'https://foo'
* ```
*
* @param change An object that describes a change to this Uri. To unset components use `undefined` or
* the empty string.
* @returns A new Uri that reflects the given change. Will return `this` Uri if the change
* is not changing anything.
*/
with(change: {
/**
* The new scheme, defaults to this Uri's scheme.
*/
scheme?: string;
/**
* The new authority, defaults to this Uri's authority.
*/
authority?: string;
/**
* The new path, defaults to this Uri's path.
*/
path?: string;
/**
* The new query, defaults to this Uri's query.
*/
query?: string;
/**
* The new fragment, defaults to this Uri's fragment.
*/
fragment?: string;
}): Uri;

toString(): string;
}

export namespace window {
export function createWebviewPanel(viewType: string, title: string, options?: WebviewOptions): WebviewPanel;
}
export interface Webview {
/**
* Content settings for the webview.
*/
options: WebviewOptions;

/**
* HTML contents of the webview.
*
* This should be a complete, valid html document. Changing this property causes the webview to be reloaded.
*
*/
html: string;

/**
* Fired when the webview content posts a message.
*
* Webview content can post strings or json serializable objects back to an extension.
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
readonly onDidReceiveMessage: Event<any>;

/**
* Post a message to the webview content.
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
postMessage(message: any): Promise<boolean>;

/**
* Convert a uri for the local file system to one that can be used inside webviews.
*/
asWebviewUri(localResource: Uri): Uri;

/**
* Content security policy source for webview resources.
*
*/
readonly cspSource: string;
}

export interface WebviewOptions {
readonly localResourceRoots?: readonly Uri[];
}

interface WebviewPanel {
/**
* Identifies the type of the webview panel.
*/
readonly viewType: string;

/**
* Title of the panel shown in UI.
*/
title: string;

/**
* Icon for the panel shown in UI.
*/
iconPath?:
| Uri
| {
/**
* The icon path for the light theme.
*/
readonly light: Uri;
/**
* The icon path for the dark theme.
*/
readonly dark: Uri;
};

/**
* {@linkcode Webview} belonging to the panel.
*/
readonly webview: Webview;

/**
* Whether the panel is active (focused by the user).
*/
readonly active: boolean;

/**
* Whether the panel is visible.
*/
readonly visible: boolean;

/**
* Fired when the panel's view state changes.
*/
readonly onDidChangeViewState: Event<WebviewPanelOnDidChangeViewStateEvent>;

/**
* Fired when the panel is disposed.
*
* This may be because the user closed the panel or because `.dispose()` was
* called on it.
*
* Trying to use the panel after it has been disposed throws an exception.
*/
readonly onDidDispose: Event<void>;

/**
* Show the webview panel.
* @param preserveFocus When `true`, the webview will not take focus.
*/
reveal(preserveFocus?: boolean): void;

/**
* Dispose of the webview panel.
*
* This closes the panel if it showing and disposes of the resources owned by the webview.
* Webview panels are also disposed when the user closes the webview panel. Both cases
* fire the `onDispose` event.
*/
dispose(): void;
}

export namespace containerEngine {
export function listContainers(): Promise<ContainerInfo[]>;
export function inspectContainer(engineId: string, id: string): Promise<ContainerInspectInfo>;

export function createContainer(
engineId: string,
containerCreateOptions: ContainerCreateOptions,
): Promise<ContainerCreateResult>;
export function startContainer(engineId: string, id: string): Promise<void>;
export function logsContainer(
engineId: string,
id: string,
callback: (name: string, data: string) => void,
): Promise<void>;
export function stopContainer(engineId: string, id: string): Promise<void>;
export function deleteContainer(engineId: string, id: string): Promise<void>;
export function buildImage(
containerBuildContextDirectory: string,
relativeContainerfilePath: string,
imageName: string,
platform: string,
selectedProvider: ProviderContainerConnectionInfo | containerDesktopAPI.ContainerProviderConnection,
eventCollect: (eventName: 'stream' | 'error' | 'finish', data: string) => void,
abortController?: AbortController,
);
export function saveImage(engineId: string, id: string, filename: string): Promise<void>;
export function listImages(): Promise<ImageInfo[]>;
export function tagImage(engineId: string, imageId: string, repo: string, tag?: string): Promise<void>;
export function pushImage(
engineId: string,
imageId: string,
callback: (name: string, data: string) => void,
authInfo?: ContainerAuthInfo,
): Promise<void>;

export function pullImage(
containerProviderConnection: ContainerProviderConnection,
imageName: string,
callback: (event: PullEvent) => void,
): Promise<void>;
export function deleteImage(engineId: string, id: string): Promise<void>;

export function info(engineId: string): Promise<ContainerEngineInfo>;
export const onEvent: Event<ContainerJSONEvent>;

export function listNetworks(): Promise<NetworkInspectInfo[]>;
export function createNetwork(
containerProviderConnection: ContainerProviderConnection,
networkCreateOptions: NetworkCreateOptions,
): Promise<NetworkCreateResult>;
}

export interface ExtensionContext {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
readonly subscriptions: { dispose(): any }[];

/**
* An absolute file path in which the extension can store state.
* The directory might not exist on disk and creation is
* up to the extension.
*/
readonly storagePath: string;

/**
* The uri of the directory containing the extension.
*/
readonly extensionUri: Uri;
}



}

8 changes: 4 additions & 4 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -410,10 +410,10 @@
resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz"
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==

"@podman-desktop/api@1.6.4":
version "1.6.4"
resolved "https://registry.yarnpkg.com/@podman-desktop/api/-/api-1.6.4.tgz#f6da8228523e787f408d366f1d99d12a7b9e6924"
integrity sha512-8sxPcFvepxVM0iANq9h+QbnxAPAEE03KhrDTUp8AEzMPHZhascBSi11xhaLaDUujXVaKHUysEt0hh+0ccL479w==
"@podman-desktop/api@0.0.202401191125-9c1aea6":
version "0.0.202401191125-9c1aea6"
resolved "https://registry.yarnpkg.com/@podman-desktop/api/-/api-0.0.202401191125-9c1aea6.tgz#a6dd84efaa1769cc3eedde320c9d5524e2f920f1"
integrity sha512-4oMQmfCXpnQrnEihe1yn3mGZULle4a0MlXdyOZ4vlKx04e2rZK7jFI45EjU6L64pwN0bGHWLFRI12Ut2sAirHQ==

"@rollup/[email protected]":
version "4.9.1"
Expand Down

0 comments on commit 242554b

Please sign in to comment.