mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-18 16:02:10 +00:00
bab67fe3ae
* feat: wmill sync workspace settings * fix: build * fix: nit
202 lines
6.4 KiB
TypeScript
202 lines
6.4 KiB
TypeScript
import { WorkspaceService, log } from "./deps.ts";
|
|
import { isSuperset } from "./types.ts";
|
|
import { deepEqual } from "./utils.ts";
|
|
|
|
interface SimplifiedSettings {
|
|
// slack_team_id?: string;
|
|
// slack_name?: string;
|
|
// slack_command_script?: string;
|
|
// slack_email?: string;
|
|
auto_invite_enabled: boolean;
|
|
auto_invite_as: string;
|
|
auto_invite_mode: string;
|
|
webhook?: string;
|
|
deploy_to?: string;
|
|
error_handler?: string;
|
|
error_handler_extra_args?: any;
|
|
error_handler_muted_on_cancel?: boolean;
|
|
openai_resource_path?: string;
|
|
code_completion_enabled: boolean;
|
|
large_file_storage?: any;
|
|
git_sync?: any;
|
|
default_app?: string;
|
|
default_scripts?: any;
|
|
}
|
|
|
|
export async function pushWorkspaceSettings(
|
|
workspace: string,
|
|
_path: string,
|
|
settings: SimplifiedSettings | undefined,
|
|
localSettings: SimplifiedSettings
|
|
) {
|
|
try {
|
|
const remoteSettings = await WorkspaceService.getSettings({
|
|
workspace,
|
|
});
|
|
settings = {
|
|
// slack_team_id: remoteSettings.slack_team_id,
|
|
// slack_name: remoteSettings.slack_name,
|
|
// slack_command_script: remoteSettings.slack_command_script,
|
|
// slack_email: remoteSettings.slack_email,
|
|
auto_invite_enabled: remoteSettings.auto_invite_domain !== null,
|
|
auto_invite_as: remoteSettings.auto_invite_operator
|
|
? "operator"
|
|
: "developer",
|
|
auto_invite_mode: remoteSettings.auto_add ? "add" : "invite",
|
|
webhook: remoteSettings.webhook,
|
|
deploy_to: remoteSettings.deploy_to,
|
|
error_handler: remoteSettings.error_handler,
|
|
error_handler_extra_args: remoteSettings.error_handler_extra_args,
|
|
error_handler_muted_on_cancel:
|
|
remoteSettings.error_handler_muted_on_cancel,
|
|
openai_resource_path: remoteSettings.openai_resource_path,
|
|
code_completion_enabled: remoteSettings.code_completion_enabled,
|
|
large_file_storage: remoteSettings.large_file_storage,
|
|
git_sync: remoteSettings.git_sync,
|
|
default_app: remoteSettings.default_app,
|
|
default_scripts: remoteSettings.default_scripts,
|
|
};
|
|
} catch (err) {
|
|
throw new Error(`Failed to get workspace settings: ${err}`);
|
|
}
|
|
|
|
if (isSuperset(localSettings, settings)) {
|
|
log.debug(`Workspace settings are up to date`);
|
|
return;
|
|
}
|
|
log.debug(`Workspace settings are not up-to-date, updating...`);
|
|
if (localSettings.webhook !== settings.webhook) {
|
|
log.debug(`Updateing webhook...`);
|
|
await WorkspaceService.editWebhook({
|
|
workspace,
|
|
requestBody: {
|
|
webhook: localSettings.webhook,
|
|
},
|
|
});
|
|
}
|
|
if (
|
|
localSettings.auto_invite_as !== settings.auto_invite_as ||
|
|
localSettings.auto_invite_enabled !== settings.auto_invite_enabled ||
|
|
localSettings.auto_invite_mode !== settings.auto_invite_mode
|
|
) {
|
|
log.debug(`Updating auto invite...`);
|
|
|
|
if (!["operator", "developer"].includes(settings.auto_invite_as)) {
|
|
throw new Error(
|
|
`Invalid value for auto_invite_as. Valid values are "operator" and "developer"`
|
|
);
|
|
}
|
|
|
|
if (!["add", "invite"].includes(settings.auto_invite_mode)) {
|
|
throw new Error(
|
|
`Invalid value for auto_invite_mode. Valid values are "invite" and "add"`
|
|
);
|
|
}
|
|
try {
|
|
await WorkspaceService.editAutoInvite({
|
|
workspace,
|
|
requestBody: localSettings.auto_invite_enabled
|
|
? {
|
|
operator: localSettings.auto_invite_as === "operator",
|
|
invite_all: true,
|
|
auto_add: localSettings.auto_invite_mode === "add",
|
|
}
|
|
: {},
|
|
});
|
|
} catch (_) {
|
|
// on cloud
|
|
log.debug(
|
|
`Auto invite is not possible on cloud, only auto-inviting same domain...`
|
|
);
|
|
await WorkspaceService.editAutoInvite({
|
|
workspace,
|
|
requestBody: localSettings.auto_invite_enabled
|
|
? {
|
|
operator: localSettings.auto_invite_as === "operator",
|
|
invite_all: false,
|
|
auto_add: localSettings.auto_invite_mode === "add",
|
|
}
|
|
: {},
|
|
});
|
|
}
|
|
}
|
|
if (
|
|
localSettings.openai_resource_path !== settings.openai_resource_path ||
|
|
localSettings.code_completion_enabled !== settings.code_completion_enabled
|
|
) {
|
|
log.debug(`Updating openai settings...`);
|
|
await WorkspaceService.editCopilotConfig({
|
|
workspace,
|
|
requestBody: {
|
|
openai_resource_path: localSettings.openai_resource_path,
|
|
code_completion_enabled: localSettings.code_completion_enabled,
|
|
},
|
|
});
|
|
}
|
|
if (
|
|
localSettings.error_handler !== settings.error_handler ||
|
|
!deepEqual(
|
|
localSettings.error_handler_extra_args,
|
|
settings.error_handler_extra_args
|
|
) ||
|
|
localSettings.error_handler_muted_on_cancel !==
|
|
settings.error_handler_muted_on_cancel
|
|
) {
|
|
log.debug(`Updating error handler...`);
|
|
await WorkspaceService.editErrorHandler({
|
|
workspace,
|
|
requestBody: {
|
|
error_handler: localSettings.error_handler,
|
|
error_handler_extra_args: localSettings.error_handler_extra_args,
|
|
error_handler_muted_on_cancel:
|
|
localSettings.error_handler_muted_on_cancel,
|
|
},
|
|
});
|
|
}
|
|
if (localSettings.deploy_to !== settings.deploy_to) {
|
|
log.debug(`Updating deploy to...`);
|
|
await WorkspaceService.editDeployTo({
|
|
workspace,
|
|
requestBody: {
|
|
deploy_to: localSettings.deploy_to,
|
|
},
|
|
});
|
|
}
|
|
if (
|
|
!deepEqual(localSettings.large_file_storage, settings.large_file_storage)
|
|
) {
|
|
log.debug(`Updating large file storage...`);
|
|
await WorkspaceService.editLargeFileStorageConfig({
|
|
workspace,
|
|
requestBody: {
|
|
large_file_storage: localSettings.large_file_storage,
|
|
},
|
|
});
|
|
}
|
|
if (!deepEqual(localSettings.git_sync, settings.git_sync)) {
|
|
log.debug(`Updating git sync...`);
|
|
await WorkspaceService.editWorkspaceGitSyncConfig({
|
|
workspace,
|
|
requestBody: {
|
|
git_sync_settings: localSettings.git_sync,
|
|
},
|
|
});
|
|
}
|
|
if (!deepEqual(localSettings.default_scripts, settings.default_scripts)) {
|
|
log.debug(`Updating default scripts...`);
|
|
await WorkspaceService.editDefaultScripts({
|
|
workspace,
|
|
requestBody: localSettings.default_scripts,
|
|
});
|
|
}
|
|
if (localSettings.default_app !== settings.default_app) {
|
|
log.debug(`Updating default app...`);
|
|
await WorkspaceService.editWorkspaceDefaultApp({
|
|
workspace,
|
|
requestBody: {
|
|
default_app_path: localSettings.default_app,
|
|
},
|
|
});
|
|
}
|
|
}
|