Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support configuring unit path #223

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion packages/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,18 @@
"command": "podlet.compose",
"title": "Podlet: compose"
}
]
],
"configuration": {
"title": "Quadlet",
"properties": {
"quadlet.unit-path": {
"type": "string",
"default": "~/.config/containers/systemd/",
"enum": ["~/.config/containers/systemd/", "/etc/containers/systemd/users/"],
"markdownDescription": "Podman unit search path"
}
}
}
},
"devDependencies": {
"@podman-desktop/api": "^1.15.0",
Expand Down
2 changes: 2 additions & 0 deletions packages/backend/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
window,
cli as cliApi,
commands as commandsApi,
configuration as configurationApi,
} from '@podman-desktop/api';
import { MainService } from './services/main-service';

Expand All @@ -28,6 +29,7 @@ export async function activate(extensionContext: ExtensionContext): Promise<void
cliApi: cliApi,
commandsApi: commandsApi,
containers: containerEngine,
configurationApi: configurationApi,
});
return main.init();
}
Expand Down
23 changes: 23 additions & 0 deletions packages/backend/src/services/configuration-service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import type { configuration, Disposable } from '@podman-desktop/api';
import { contributes } from '../../package.json';

interface Dependencies {
configurationApi: typeof configuration;
}

export class ConfigurationService implements Disposable {
constructor(protected dependencies: Dependencies) {}

dispose(): void {}

protected getDefaultQuadletUnitPath(): string {
return contributes.configuration.properties['quadlet.unit-path'].default;
}

getUnitPath(): string {
return (
this.dependencies.configurationApi.getConfiguration('quadlet').get<string>('unit-path') ??
this.getDefaultQuadletUnitPath()
);
}
}
9 changes: 9 additions & 0 deletions packages/backend/src/services/main-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import type {
cli as cliApi,
containerEngine,
TelemetryLogger,
configuration,
} from '@podman-desktop/api';
import { WebviewService } from './webview-service';
import { RpcExtension } from '/@shared/src/messages/message-proxy';
Expand Down Expand Up @@ -42,6 +43,7 @@ import { ImageApi } from '/@shared/src/apis/image-api';
import { LoggerService } from './logger-service';
import { LoggerApiImpl } from '../apis/logger-api-impl';
import { LoggerApi } from '/@shared/src/apis/logger-api';
import { ConfigurationService } from './configuration-service';

interface Dependencies {
extensionContext: ExtensionContext;
Expand All @@ -53,6 +55,7 @@ interface Dependencies {
cliApi: typeof cliApi;
commandsApi: typeof commandsApi;
containers: typeof containerEngine;
configurationApi: typeof configuration;
}

export class MainService implements Disposable, AsyncInit {
Expand Down Expand Up @@ -86,6 +89,11 @@ export class MainService implements Disposable, AsyncInit {
});
this.#disposables.push(loggerService);

const configuration = new ConfigurationService({
configurationApi: this.dependencies.configurationApi,
});
this.#disposables.push(configuration);

// init IPC system
const rpcExtension = new RpcExtension(webview.getPanel().webview);
rpcExtension.init();
Expand Down Expand Up @@ -156,6 +164,7 @@ export class MainService implements Disposable, AsyncInit {
providers: providers,
window: this.dependencies.window,
telemetry: this.#telemetry,
configuration,
});
await quadletService.init();
this.#disposables.push(quadletService);
Expand Down
2 changes: 2 additions & 0 deletions packages/backend/src/services/quadlet-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import type { PodmanService } from './podman-service';
import type { SystemdService } from './systemd-service';
import type { ProviderService } from './provider-service';
import type { ProviderContainerConnectionIdentifierInfo } from '/@shared/src/models/provider-container-connection-identifier-info';
import type { ConfigurationService } from './configuration-service';

export interface QuadletServiceDependencies {
providers: ProviderService;
Expand All @@ -18,6 +19,7 @@ export interface QuadletServiceDependencies {
systemd: SystemdService;
window: typeof window;
telemetry: TelemetryLogger;
configuration: ConfigurationService;
}

type ProviderIdentifier = `${string}:${string}`;
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/services/quadlet-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@
if (options.admin) {
destination = joinposix('/etc/containers/systemd/', resource.filename);
} else {
destination = joinposix('~/.config/containers/systemd/', resource.filename);
destination = joinposix(this.dependencies.configuration.getUnitPath(), resource.filename);

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > should write single resource

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:180:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Container should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Image should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Pod should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Volume should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Network should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Kube should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > should parse multiple resources

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:219:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > should try parsing YAML if QuadletTypeParser raise an error

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:238:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > should write single resource

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:180:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Container should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Image should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Pod should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Volume should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Network should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Kube should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > should parse multiple resources

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:219:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > should try parsing YAML if QuadletTypeParser raise an error

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:238:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > should write single resource

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:180:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Container should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Image should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Pod should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Volume should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Network should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > QuadletType Kube should have corresponding extension

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:200:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > should parse multiple resources

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:219:19

Check failure on line 321 in packages/backend/src/services/quadlet-service.ts

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

src/services/quadlet-service.spec.ts > QuadletService#saveIntoMachine > should try parsing YAML if QuadletTypeParser raise an error

TypeError: Cannot read properties of undefined (reading 'getUnitPath') ❯ src/services/quadlet-service.ts:321:71 ❯ Object.<anonymous> src/services/quadlet-service.spec.ts:116:12 ❯ QuadletService.saveIntoMachine src/services/quadlet-service.ts:297:8 ❯ src/services/quadlet-service.spec.ts:238:19
}

// 2. write the file
Expand Down
Loading