windmill-components 1.504.6 → 1.511.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/ata/index.js +1 -1
- package/package/components/AppConnectInner.svelte +184 -29
- package/package/components/ArgInput.svelte +33 -103
- package/package/components/AuthSettings.svelte +45 -1
- package/package/components/Dev.svelte +31 -24
- package/package/components/DisplayResult.svelte +53 -26
- package/package/components/DisplayResult.svelte.d.ts +1 -1
- package/package/components/DynSelect.svelte +3 -3
- package/package/components/Editor.svelte +115 -88
- package/package/components/Editor.svelte.d.ts +30 -55
- package/package/components/EditorBar.svelte +2 -2
- package/package/components/ErrorOrRecoveryHandler.svelte +73 -67
- package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +8 -24
- package/package/components/FlowBuilder.svelte +11 -2
- package/package/components/FlowJobResult.svelte +12 -17
- package/package/components/FlowJobResult.svelte.d.ts +5 -18
- package/package/components/FlowPreviewContent.svelte +13 -10
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowPreviewResult.svelte +14 -6
- package/package/components/FlowStatusViewer.svelte +11 -24
- package/package/components/FlowStatusViewer.svelte.d.ts +19 -18
- package/package/components/FlowStatusViewerInner.svelte +110 -131
- package/package/components/FlowStatusViewerInner.svelte.d.ts +20 -18
- package/package/components/GitDiffPreview.svelte +55 -0
- package/package/components/GitDiffPreview.svelte.d.ts +13 -0
- package/package/components/HistoricInputs.svelte +2 -2
- package/package/components/HttpAgentWorkerDrawer.svelte +1 -1
- package/package/components/InitGitRepoPopover.svelte +410 -0
- package/package/components/InitGitRepoPopover.svelte.d.ts +13 -0
- package/package/components/InstanceSetting.svelte +21 -9
- package/package/components/InstanceSettings.svelte +16 -3
- package/package/components/JobLoader.svelte +567 -0
- package/package/components/JobLoader.svelte.d.ts +53 -0
- package/package/components/JobLogs.svelte +6 -4
- package/package/components/JobLogs.svelte.d.ts +5 -18
- package/package/components/JsonEditor.svelte +11 -11
- package/package/components/JsonEditor.svelte.d.ts +14 -56
- package/package/components/Label.svelte +6 -11
- package/package/components/Label.svelte.d.ts +14 -39
- package/package/components/LightweightResourcePicker.svelte +18 -39
- package/package/components/LightweightResourcePicker.svelte.d.ts +6 -22
- package/package/components/LogViewer.svelte +35 -41
- package/package/components/LogViewer.svelte.d.ts +6 -20
- package/package/components/ModulePreviewResultViewer.svelte +3 -1
- package/package/components/ModulePreviewResultViewer.svelte.d.ts +1 -0
- package/package/components/ModuleTest.svelte +16 -11
- package/package/components/NumberTypeNarrowing.svelte +13 -16
- package/package/components/NumberTypeNarrowing.svelte.d.ts +4 -18
- package/package/components/PullGitRepoPopover.svelte +355 -0
- package/package/components/PullGitRepoPopover.svelte.d.ts +18 -0
- package/package/components/ResourceTypePicker.svelte +20 -17
- package/package/components/ResourceTypePicker.svelte.d.ts +7 -6
- package/package/components/S3FilePicker.svelte +5 -3
- package/package/components/SavedInputs.svelte +2 -2
- package/package/components/ScriptBuilder.svelte +4 -3
- package/package/components/ScriptEditor.svelte +34 -31
- package/package/components/ScriptEditor.svelte.d.ts +3 -3
- package/package/components/Section.svelte +7 -20
- package/package/components/Section.svelte.d.ts +20 -47
- package/package/components/ServiceLogsInner.svelte +2 -1
- package/package/components/ServiceLogsInner.svelte.d.ts +1 -0
- package/package/components/SimpleEditor.svelte +4 -4
- package/package/components/SimpleEditor.svelte.d.ts +1 -0
- package/package/components/SqlRepl.svelte +0 -1
- package/package/components/Subsection.svelte +10 -12
- package/package/components/Subsection.svelte.d.ts +15 -39
- package/package/components/UserSettings.svelte +1 -1
- package/package/components/WorkerGroup.svelte +260 -165
- package/package/components/WorkerGroup.svelte.d.ts +2 -0
- package/package/components/WorkerTagPicker.svelte +3 -3
- package/package/components/WorkerTagSelect.svelte +33 -4
- package/package/components/apps/components/buttons/AppButton.svelte +7 -1
- package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
- package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
- package/package/components/apps/components/display/AppDisplayComponentByJobId.svelte +16 -11
- package/package/components/apps/components/display/AppJobIdLogComponent.svelte +13 -10
- package/package/components/apps/components/display/AppMenu.svelte +5 -0
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +3 -3
- package/package/components/apps/components/display/dbtable/DeleteRow.svelte +3 -3
- package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +3 -3
- package/package/components/apps/components/display/dbtable/UpdateCell.svelte +3 -3
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +3 -3
- package/package/components/apps/components/helpers/RunnableComponent.svelte +65 -54
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -5
- package/package/components/apps/components/inputs/AppUserResource.svelte +26 -8
- package/package/components/apps/editor/AppEditorHeader.svelte +11 -5
- package/package/components/apps/editor/AppJobsDrawer.svelte +5 -5
- package/package/components/apps/editor/RunnableJobPanel.svelte +4 -4
- package/package/components/apps/editor/component/components.d.ts +12 -0
- package/package/components/apps/editor/component/components.js +19 -7
- package/package/components/assets/AssetButtons.svelte +38 -0
- package/package/components/assets/AssetButtons.svelte.d.ts +15 -0
- package/package/components/assets/AssetsDropdownButton.svelte +60 -72
- package/package/components/assets/AssetsDropdownButton.svelte.d.ts +3 -4
- package/package/components/assets/AssetsUsageDrawer.svelte +10 -10
- package/package/components/assets/JobAssetsViewer.svelte +79 -0
- package/package/components/assets/JobAssetsViewer.svelte.d.ts +7 -0
- package/package/components/assets/README_DEV.md +0 -0
- package/package/components/assets/lib.d.ts +9 -1
- package/package/components/assets/lib.js +48 -7
- package/package/components/common/fileUpload/FileUpload.svelte +126 -84
- package/package/components/common/fileUpload/FileUpload.svelte.d.ts +13 -3
- package/package/components/common/fileUpload/S3ArgInput.svelte +111 -0
- package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +21 -0
- package/package/components/common/table/ScriptRow.svelte +3 -1
- package/package/components/copilot/AIFormSettings.svelte +3 -4
- package/package/components/copilot/AIFormSettings.svelte.d.ts +5 -19
- package/package/components/copilot/autocomplete/Autocompletor.d.ts +3 -1
- package/package/components/copilot/autocomplete/Autocompletor.js +269 -35
- package/package/components/copilot/autocomplete/request.d.ts +3 -0
- package/package/components/copilot/autocomplete/request.js +15 -7
- package/package/components/copilot/chat/AIChatDisplay.svelte +8 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +13 -8
- package/package/components/copilot/chat/flow/ModuleAcceptReject.svelte +5 -5
- package/package/components/copilot/chat/flow/core.d.ts +1 -1
- package/package/components/copilot/chat/flow/core.js +2 -38
- package/package/components/copilot/chat/navigator/apiTools.d.ts +8 -0
- package/package/components/copilot/chat/navigator/apiTools.js +95 -15
- package/package/components/copilot/chat/navigator/core.d.ts +1 -1
- package/package/components/copilot/chat/navigator/core.js +2 -1
- package/package/components/copilot/chat/script/core.d.ts +11 -2
- package/package/components/copilot/chat/script/core.js +165 -23
- package/package/components/copilot/chat/shared.d.ts +10 -0
- package/package/components/copilot/chat/shared.js +56 -0
- package/package/components/copilot/lib.d.ts +1 -0
- package/package/components/copilot/lib.js +30 -9
- package/package/components/custom_ui.d.ts +1 -0
- package/package/components/flows/FlowAssetsHandler.svelte +133 -0
- package/package/components/flows/FlowAssetsHandler.svelte.d.ts +14 -0
- package/package/components/flows/content/FlowModuleCache.svelte +4 -4
- package/package/components/flows/content/FlowModuleCache.svelte.d.ts +4 -18
- package/package/components/flows/content/FlowModuleComponent.svelte +16 -19
- package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte +3 -4
- package/package/components/flows/content/FlowModuleDeleteAfterUse.svelte.d.ts +4 -18
- package/package/components/flows/content/FlowModuleSleep.svelte +6 -7
- package/package/components/flows/content/FlowModuleSleep.svelte.d.ts +4 -18
- package/package/components/flows/content/FlowModuleSuspend.svelte +19 -17
- package/package/components/flows/content/FlowModuleSuspend.svelte.d.ts +4 -18
- package/package/components/flows/content/FlowModuleTimeout.svelte +4 -4
- package/package/components/flows/content/FlowModuleTimeout.svelte.d.ts +4 -18
- package/package/components/flows/flowStore.d.ts +1 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -0
- package/package/components/flows/propPicker/OutputPicker.svelte +9 -4
- package/package/components/flows/scheduleUtils.js +1 -1
- package/package/components/flows/types.d.ts +2 -1
- package/package/components/graph/FlowGraphV2.svelte +8 -104
- package/package/components/graph/FlowGraphV2.svelte.d.ts +0 -2
- package/package/components/graph/graphBuilder.svelte.d.ts +6 -3
- package/package/components/graph/graphBuilder.svelte.js +35 -9
- package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -5
- package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/AssetNode.svelte +23 -20
- package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +5 -10
- package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +1 -1
- package/package/components/graph/util.js +1 -1
- package/package/components/home/ItemsList.svelte +2 -0
- package/package/components/icons/AssetGenericIcon.svelte +0 -3
- package/package/components/jobs/JobPreview.svelte +10 -6
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +13 -12
- package/package/components/runs/BatchReRunOptionsPane.svelte +5 -1
- package/package/components/runs/JobPreview.svelte +26 -16
- package/package/components/runs/{JobLoader.svelte.d.ts → JobsLoader.svelte.d.ts} +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte +2 -2
- package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -0
- package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
- package/package/components/scriptEditor/LogPanel.svelte +3 -2
- package/package/components/script_builder.d.ts +2 -2
- package/package/components/settings/CreateToken.svelte +76 -41
- package/package/components/settings/CreateToken.svelte.d.ts +1 -1
- package/package/components/settings/ScopeSelector.svelte +613 -0
- package/package/components/settings/ScopeSelector.svelte.d.ts +8 -0
- package/package/components/settings/TokenDisplay.svelte +103 -0
- package/package/components/settings/TokenDisplay.svelte.d.ts +10 -0
- package/package/components/settings/TokensTable.svelte +70 -349
- package/package/components/sidebar/CriticalAlertModal.svelte +3 -0
- package/package/components/triggers/DeleteTriggerButton.svelte +1 -1
- package/package/components/triggers/TriggerEditorToolbar.svelte +3 -3
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte +55 -0
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +13 -0
- package/package/components/triggers/TriggersEditor.svelte +45 -3
- package/package/components/triggers/TriggersWrapper.svelte +2 -2
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +47 -6
- package/package/components/triggers/gcp/utils.js +9 -1
- package/package/components/triggers/http/OpenAPISpecGenerator.svelte +3 -2
- package/package/components/triggers/http/RouteEditorConfigSection.svelte +26 -23
- package/package/components/triggers/http/RouteEditorConfigSection.svelte.d.ts +5 -19
- package/package/components/triggers/http/RouteEditorInner.svelte +219 -175
- package/package/components/triggers/http/RouteEditorInner.svelte.d.ts +6 -2
- package/package/components/triggers/http/utils.js +9 -3
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +47 -6
- package/package/components/triggers/kafka/utils.js +9 -1
- package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte +4 -132
- package/package/components/triggers/mqtt/MqttEditorConfigSection.svelte.d.ts +2 -5
- package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +182 -13
- package/package/components/triggers/mqtt/utils.js +9 -1
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +47 -6
- package/package/components/triggers/nats/utils.js +9 -1
- package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +41 -2
- package/package/components/triggers/postgres/utils.js +9 -1
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +38 -92
- package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +47 -6
- package/package/components/triggers/sqs/utils.js +9 -1
- package/package/components/triggers/utils.js +12 -0
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +47 -6
- package/package/components/triggers/websocket/utils.js +11 -1
- package/package/components/workspaceSettings/AISettings.svelte +0 -2
- package/package/components/workspaceSettings/FilterList.svelte +56 -0
- package/package/components/workspaceSettings/FilterList.svelte.d.ts +8 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +785 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +18 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +305 -23
- package/package/gen/schemas.gen.js +305 -23
- package/package/gen/services.gen.d.ts +33 -1
- package/package/gen/services.gen.js +66 -2
- package/package/gen/types.gen.d.ts +216 -11
- package/package/history.svelte.js +0 -2
- package/package/hub.d.ts +1 -0
- package/package/hubPaths.json +5 -2
- package/package/infer.js +16 -10
- package/package/svelte5Utils.svelte.d.ts +1 -0
- package/package/svelte5Utils.svelte.js +25 -18
- package/package/toast.js +10 -0
- package/package/utils.d.ts +3 -2
- package/package/utils.js +20 -5
- package/package.json +11 -11
- package/package/components/ResultJobLoader.svelte +0 -219
- package/package/components/ResultJobLoader.svelte.d.ts +0 -52
- package/package/components/TestJobLoader.svelte +0 -274
- package/package/components/TestJobLoader.svelte.d.ts +0 -43
- package/package/components/icons/AssetVarIcon.svelte +0 -31
- package/package/components/icons/AssetVarIcon.svelte.d.ts +0 -9
- /package/package/components/runs/{JobLoader.svelte → JobsLoader.svelte} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type DiffResult = {
|
|
2
|
+
added: string[];
|
|
3
|
+
deleted: string[];
|
|
4
|
+
modified: string[];
|
|
5
|
+
repoWmillYaml?: string;
|
|
6
|
+
yamlModified?: boolean;
|
|
7
|
+
};
|
|
8
|
+
type $$ComponentProps = {
|
|
9
|
+
previewResult: DiffResult | undefined;
|
|
10
|
+
};
|
|
11
|
+
declare const GitDiffPreview: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
12
|
+
type GitDiffPreview = ReturnType<typeof GitDiffPreview>;
|
|
13
|
+
export default GitDiffPreview;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { sendUserToast } from '../utils.js';
|
|
3
3
|
import RunningJobSchemaPicker from './schema/RunningJobSchemaPicker.svelte';
|
|
4
4
|
import { createEventDispatcher, onDestroy } from 'svelte';
|
|
5
|
-
import
|
|
5
|
+
import JobsLoader from './runs/JobsLoader.svelte';
|
|
6
6
|
import { DataTable } from './table';
|
|
7
7
|
import HistoricList from './HistoricList.svelte';
|
|
8
8
|
import { Loader2 } from 'lucide-svelte';
|
|
@@ -71,7 +71,7 @@ function getJobKinds(runnableType) {
|
|
|
71
71
|
<svelte:window onkeydown={handleKeydown} />
|
|
72
72
|
|
|
73
73
|
{#if runnableId}
|
|
74
|
-
<
|
|
74
|
+
<JobsLoader
|
|
75
75
|
bind:jobs
|
|
76
76
|
path={runnableId}
|
|
77
77
|
isSkipped={false}
|
|
@@ -129,7 +129,7 @@ $effect(() => {
|
|
|
129
129
|
/>
|
|
130
130
|
</Section>
|
|
131
131
|
|
|
132
|
-
<Section label="Generated JWT token"
|
|
132
|
+
<Section label="Generated JWT token">
|
|
133
133
|
{#if !$enterpriseLicense}
|
|
134
134
|
<div class="text-sm text-secondary mb-2 max-w-md">
|
|
135
135
|
Agent workers are only available in the enterprise edition. For evaluation purposes,
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
<script lang="ts">import { Button } from './common';
|
|
2
|
+
import Popover from './meltComponents/Popover.svelte';
|
|
3
|
+
import { Alert } from './common';
|
|
4
|
+
import { Loader2, Eye, Save, CheckCircle2, XCircle, UploadCloud, AlertTriangle, Terminal, ChevronDown, ChevronUp } from 'lucide-svelte';
|
|
5
|
+
import { workspaceStore } from '../stores';
|
|
6
|
+
import hubPaths from '../hubPaths.json';
|
|
7
|
+
import { JobService } from '../gen';
|
|
8
|
+
import { tryEvery } from '../utils';
|
|
9
|
+
import GitDiffPreview from './GitDiffPreview.svelte';
|
|
10
|
+
import { page } from '$app/stores';
|
|
11
|
+
let { gitRepoResourcePath, branchName, uiState } = $props();
|
|
12
|
+
let _branchName = $state(branchName ?? '');
|
|
13
|
+
let previewResult = $state(undefined);
|
|
14
|
+
let isPreviewLoading = $state(false);
|
|
15
|
+
let isInitializing = $state(false);
|
|
16
|
+
let initResult = $state(null);
|
|
17
|
+
let initGitRepoPopover = $state(null);
|
|
18
|
+
let previewJobId = $state(null);
|
|
19
|
+
let previewJobStatus = $state(undefined);
|
|
20
|
+
let pushJobId = $state(null);
|
|
21
|
+
let pushJobStatus = $state(undefined);
|
|
22
|
+
let isCliInfoExpanded = $state(false);
|
|
23
|
+
async function previewChanges() {
|
|
24
|
+
console.log('Previewing changes for repo:', gitRepoResourcePath);
|
|
25
|
+
isPreviewLoading = true;
|
|
26
|
+
previewJobId = null;
|
|
27
|
+
previewJobStatus = undefined;
|
|
28
|
+
try {
|
|
29
|
+
const workspace = $workspaceStore;
|
|
30
|
+
if (!workspace) {
|
|
31
|
+
previewResult = undefined;
|
|
32
|
+
isPreviewLoading = false;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Pass UI state directly as JSON to CLI
|
|
36
|
+
const payloadObj = {
|
|
37
|
+
workspace_id: workspace,
|
|
38
|
+
repo_url_resource_path: gitRepoResourcePath,
|
|
39
|
+
branch_to_push: _branchName,
|
|
40
|
+
dry_run: true,
|
|
41
|
+
settings_json: JSON.stringify(uiState)
|
|
42
|
+
};
|
|
43
|
+
const jobId = await JobService.runScriptByPath({
|
|
44
|
+
workspace,
|
|
45
|
+
path: hubPaths.gitInitRepo,
|
|
46
|
+
requestBody: payloadObj,
|
|
47
|
+
skipPreprocessor: true
|
|
48
|
+
});
|
|
49
|
+
previewJobId = jobId;
|
|
50
|
+
previewJobStatus = 'running';
|
|
51
|
+
// Wait for job completion (polling)
|
|
52
|
+
let jobSuccess = false;
|
|
53
|
+
await tryEvery({
|
|
54
|
+
tryCode: async () => {
|
|
55
|
+
const testResult = await JobService.getCompletedJob({
|
|
56
|
+
workspace,
|
|
57
|
+
id: jobId
|
|
58
|
+
});
|
|
59
|
+
jobSuccess = !!testResult.success;
|
|
60
|
+
},
|
|
61
|
+
timeoutCode: async () => {
|
|
62
|
+
try {
|
|
63
|
+
await JobService.cancelQueuedJob({
|
|
64
|
+
workspace,
|
|
65
|
+
id: jobId,
|
|
66
|
+
requestBody: {
|
|
67
|
+
reason: 'Preview job timed out after 15s'
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
console.error(err);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
interval: 500,
|
|
76
|
+
timeout: 15000
|
|
77
|
+
});
|
|
78
|
+
if (jobSuccess) {
|
|
79
|
+
const result = await JobService.getCompletedJobResult({
|
|
80
|
+
workspace,
|
|
81
|
+
id: jobId
|
|
82
|
+
});
|
|
83
|
+
console.log('Preview result:', result);
|
|
84
|
+
// Convert new CLI format to expected format
|
|
85
|
+
const added = [];
|
|
86
|
+
const deleted = [];
|
|
87
|
+
const modified = [];
|
|
88
|
+
if (result &&
|
|
89
|
+
result.changes &&
|
|
90
|
+
Array.isArray(result.changes)) {
|
|
91
|
+
for (const change of result.changes) {
|
|
92
|
+
if (change.type === 'added') {
|
|
93
|
+
added.push(change.path);
|
|
94
|
+
}
|
|
95
|
+
else if (change.type === 'deleted') {
|
|
96
|
+
deleted.push(change.path);
|
|
97
|
+
}
|
|
98
|
+
else if (change.type === 'modified') {
|
|
99
|
+
modified.push(change.path);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
previewResult = { added, deleted, modified };
|
|
104
|
+
previewJobStatus = 'success';
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
previewResult = undefined;
|
|
108
|
+
previewJobStatus = 'failure';
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.error('Failed to preview changes:', error);
|
|
113
|
+
previewResult = undefined;
|
|
114
|
+
previewJobStatus = 'failure';
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
isPreviewLoading = false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function initializeRepo() {
|
|
121
|
+
const workspace = $workspaceStore;
|
|
122
|
+
if (!workspace)
|
|
123
|
+
return;
|
|
124
|
+
console.log('Initializing repo:', gitRepoResourcePath, 'in workspace:', workspace);
|
|
125
|
+
isInitializing = true;
|
|
126
|
+
initResult = null;
|
|
127
|
+
pushJobId = null;
|
|
128
|
+
pushJobStatus = undefined;
|
|
129
|
+
try {
|
|
130
|
+
// Pass UI state directly as JSON to CLI
|
|
131
|
+
const jobId = await JobService.runScriptByPath({
|
|
132
|
+
workspace,
|
|
133
|
+
path: hubPaths.gitInitRepo,
|
|
134
|
+
requestBody: {
|
|
135
|
+
workspace_id: workspace,
|
|
136
|
+
repo_url_resource_path: gitRepoResourcePath,
|
|
137
|
+
branch_to_push: _branchName,
|
|
138
|
+
settings_json: JSON.stringify(uiState)
|
|
139
|
+
},
|
|
140
|
+
skipPreprocessor: true
|
|
141
|
+
});
|
|
142
|
+
pushJobId = jobId;
|
|
143
|
+
pushJobStatus = 'running';
|
|
144
|
+
let jobSuccess = false;
|
|
145
|
+
await tryEvery({
|
|
146
|
+
tryCode: async () => {
|
|
147
|
+
const testResult = await JobService.getCompletedJob({
|
|
148
|
+
workspace,
|
|
149
|
+
id: jobId
|
|
150
|
+
});
|
|
151
|
+
jobSuccess = !!testResult.success;
|
|
152
|
+
},
|
|
153
|
+
timeoutCode: async () => {
|
|
154
|
+
try {
|
|
155
|
+
await JobService.cancelQueuedJob({
|
|
156
|
+
workspace,
|
|
157
|
+
id: jobId,
|
|
158
|
+
requestBody: {
|
|
159
|
+
reason: 'Push job timed out after 5s'
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
console.error(err);
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
interval: 500,
|
|
168
|
+
timeout: 10000
|
|
169
|
+
});
|
|
170
|
+
pushJobStatus = jobSuccess ? 'success' : 'failure';
|
|
171
|
+
initResult = {
|
|
172
|
+
success: jobSuccess,
|
|
173
|
+
message: jobSuccess ? undefined : 'Failed to initialize repository.'
|
|
174
|
+
};
|
|
175
|
+
// Reset popover state after successful push
|
|
176
|
+
if (jobSuccess) {
|
|
177
|
+
setTimeout(() => {
|
|
178
|
+
previewResult = undefined;
|
|
179
|
+
pushJobId = null;
|
|
180
|
+
pushJobStatus = undefined;
|
|
181
|
+
initResult = null;
|
|
182
|
+
initGitRepoPopover?.close();
|
|
183
|
+
}, 1500); // Small delay to show success state
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
console.error('Failed to initialize repo:', error);
|
|
188
|
+
pushJobStatus = 'failure';
|
|
189
|
+
initResult = { success: false, message: 'Failed to initialize repository.' };
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
isInitializing = false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
</script>
|
|
196
|
+
|
|
197
|
+
<Popover
|
|
198
|
+
bind:this={initGitRepoPopover}
|
|
199
|
+
floatingConfig={{
|
|
200
|
+
placement: 'top-start',
|
|
201
|
+
strategy: 'fixed',
|
|
202
|
+
flip: false,
|
|
203
|
+
shift: true
|
|
204
|
+
}}
|
|
205
|
+
contentClasses="p-4 w-1/3"
|
|
206
|
+
>
|
|
207
|
+
<svelte:fragment slot="trigger">
|
|
208
|
+
<Button
|
|
209
|
+
color="dark"
|
|
210
|
+
size="sm"
|
|
211
|
+
nonCaptureEvent
|
|
212
|
+
onclick={initGitRepoPopover?.open}
|
|
213
|
+
startIcon={{ icon: UploadCloud }}
|
|
214
|
+
>
|
|
215
|
+
Push workspace to Git repo
|
|
216
|
+
</Button>
|
|
217
|
+
</svelte:fragment>
|
|
218
|
+
<svelte:fragment slot="content" let:close>
|
|
219
|
+
<div class="flex flex-col gap-4">
|
|
220
|
+
<div class="flex flex-col gap-2">
|
|
221
|
+
<h3 class="text-lg font-semibold">Push workspace to Git repository</h3>
|
|
222
|
+
<div class="prose max-w-none text-2xs text-tertiary">
|
|
223
|
+
This action will push all workspace objects that match your current filter settings to the
|
|
224
|
+
selected branch in your Git repository. <span
|
|
225
|
+
class="text-orange-600 flex items-center gap-1"
|
|
226
|
+
><AlertTriangle size={14} /> Any existing content in the branch will be replaced with the
|
|
227
|
+
filtered workspace content.</span
|
|
228
|
+
>
|
|
229
|
+
|
|
230
|
+
<!-- Collapsible CLI Info Section -->
|
|
231
|
+
<div class="mt-2 border rounded-md">
|
|
232
|
+
<button
|
|
233
|
+
class="w-full flex items-center justify-between p-1.5 bg-surface-secondary hover:bg-surface-hover"
|
|
234
|
+
onclick={() => (isCliInfoExpanded = !isCliInfoExpanded)}
|
|
235
|
+
>
|
|
236
|
+
<span class="font-medium flex items-center gap-2">
|
|
237
|
+
<Terminal size={14} />
|
|
238
|
+
Windmill CLI to pull from Windmill and push to git
|
|
239
|
+
</span>
|
|
240
|
+
{#if isCliInfoExpanded}
|
|
241
|
+
<ChevronUp size={16} />
|
|
242
|
+
{:else}
|
|
243
|
+
<ChevronDown size={16} />
|
|
244
|
+
{/if}
|
|
245
|
+
</button>
|
|
246
|
+
|
|
247
|
+
{#if isCliInfoExpanded}
|
|
248
|
+
<div class="p-1 bg-surface-tertiary">
|
|
249
|
+
<div class="text-2xs mb-2">
|
|
250
|
+
Not familiar with Windmill CLI? <a
|
|
251
|
+
href="https://www.windmill.dev/docs/advanced/cli/sync"
|
|
252
|
+
class="text-blue-500 hover:text-blue-600 underline"
|
|
253
|
+
target="_blank"
|
|
254
|
+
rel="noopener noreferrer">Check out the docs</a
|
|
255
|
+
>
|
|
256
|
+
</div>
|
|
257
|
+
<div class="font-mono text-2xs">
|
|
258
|
+
<pre class="overflow-auto max-h-60"
|
|
259
|
+
><code
|
|
260
|
+
>npm install -g windmill-cli
|
|
261
|
+
wmill workspace add {$workspaceStore} {$workspaceStore} {`${$page.url.protocol}//${$page.url.hostname}/`}
|
|
262
|
+
wmill init
|
|
263
|
+
# adjust wmill.yaml file configuraton as needed
|
|
264
|
+
wmill sync pull
|
|
265
|
+
git add -A
|
|
266
|
+
git commit -m 'Initial commit'
|
|
267
|
+
git push</code
|
|
268
|
+
></pre
|
|
269
|
+
>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
{/if}
|
|
273
|
+
</div>
|
|
274
|
+
</div>
|
|
275
|
+
</div>
|
|
276
|
+
|
|
277
|
+
<div class="flex flex-col gap-2">
|
|
278
|
+
<label for="branch-name" class="text-sm font-medium">Push to new branch (optional)</label>
|
|
279
|
+
<div class="prose max-w-none text-2xs text-tertiary">
|
|
280
|
+
Enter a new branch name to push to (e.g so you can merge back into main with a pull
|
|
281
|
+
request). If left blank, the default branch from the git repository resource will be used.
|
|
282
|
+
</div>
|
|
283
|
+
<div class="flex flex-col w-1/4">
|
|
284
|
+
<input
|
|
285
|
+
id="branch-name"
|
|
286
|
+
type="text"
|
|
287
|
+
bind:value={_branchName}
|
|
288
|
+
class="border rounded px-2 py-1"
|
|
289
|
+
/>
|
|
290
|
+
</div>
|
|
291
|
+
</div>
|
|
292
|
+
|
|
293
|
+
{#if previewResult}
|
|
294
|
+
<GitDiffPreview {previewResult} />
|
|
295
|
+
{/if}
|
|
296
|
+
|
|
297
|
+
{#if previewJobId}
|
|
298
|
+
<div class="flex items-center gap-2 text-xs text-tertiary">
|
|
299
|
+
{#if previewJobStatus === 'running'}
|
|
300
|
+
<Loader2 class="animate-spin" size={14} />
|
|
301
|
+
{:else if previewJobStatus === 'success'}
|
|
302
|
+
<CheckCircle2 size={14} class="text-green-600" />
|
|
303
|
+
{:else if previewJobStatus === 'failure'}
|
|
304
|
+
<XCircle size={14} class="text-red-700" />
|
|
305
|
+
{/if}
|
|
306
|
+
Preview job:
|
|
307
|
+
<a
|
|
308
|
+
target="_blank"
|
|
309
|
+
class="underline"
|
|
310
|
+
href={`/run/${previewJobId}?workspace=${$workspaceStore}`}
|
|
311
|
+
>
|
|
312
|
+
{previewJobId}
|
|
313
|
+
</a>
|
|
314
|
+
</div>
|
|
315
|
+
{/if}
|
|
316
|
+
|
|
317
|
+
{#if pushJobId}
|
|
318
|
+
<div class="flex items-center gap-2 text-xs text-tertiary">
|
|
319
|
+
{#if pushJobStatus === 'running'}
|
|
320
|
+
<Loader2 class="animate-spin" size={14} />
|
|
321
|
+
{:else if pushJobStatus === 'success'}
|
|
322
|
+
<CheckCircle2 size={14} class="text-green-600" />
|
|
323
|
+
{:else if pushJobStatus === 'failure'}
|
|
324
|
+
<XCircle size={14} class="text-red-700" />
|
|
325
|
+
{/if}
|
|
326
|
+
Push job:
|
|
327
|
+
<a
|
|
328
|
+
target="_blank"
|
|
329
|
+
class="underline"
|
|
330
|
+
href={`/run/${pushJobId}?workspace=${$workspaceStore}`}
|
|
331
|
+
>
|
|
332
|
+
{pushJobId}
|
|
333
|
+
</a>
|
|
334
|
+
</div>
|
|
335
|
+
{/if}
|
|
336
|
+
|
|
337
|
+
<!-- Action row: Cancel on left, Preview/Confirm on right -->
|
|
338
|
+
<div class="flex justify-between items-center mt-4">
|
|
339
|
+
<Button
|
|
340
|
+
color="light"
|
|
341
|
+
size="xs"
|
|
342
|
+
on:click={() => {
|
|
343
|
+
previewResult = undefined
|
|
344
|
+
previewJobId = null
|
|
345
|
+
previewJobStatus = undefined
|
|
346
|
+
pushJobId = null
|
|
347
|
+
pushJobStatus = undefined
|
|
348
|
+
initResult = null
|
|
349
|
+
close()
|
|
350
|
+
}}
|
|
351
|
+
disabled={isPreviewLoading || isInitializing}
|
|
352
|
+
>
|
|
353
|
+
Cancel
|
|
354
|
+
</Button>
|
|
355
|
+
<div class="flex gap-2">
|
|
356
|
+
{#if !previewResult}
|
|
357
|
+
<Button
|
|
358
|
+
size="xs"
|
|
359
|
+
on:click={previewChanges}
|
|
360
|
+
disabled={isPreviewLoading || isInitializing}
|
|
361
|
+
startIcon={{
|
|
362
|
+
icon: isPreviewLoading ? Loader2 : Eye,
|
|
363
|
+
classes: isPreviewLoading ? 'animate-spin' : ''
|
|
364
|
+
}}
|
|
365
|
+
>
|
|
366
|
+
Preview
|
|
367
|
+
</Button>
|
|
368
|
+
{:else}
|
|
369
|
+
<Button
|
|
370
|
+
size="xs"
|
|
371
|
+
on:click={previewChanges}
|
|
372
|
+
disabled={isPreviewLoading || isInitializing}
|
|
373
|
+
startIcon={{
|
|
374
|
+
icon: isPreviewLoading ? Loader2 : Eye,
|
|
375
|
+
classes: isPreviewLoading ? 'animate-spin' : ''
|
|
376
|
+
}}
|
|
377
|
+
title="Preview changes again"
|
|
378
|
+
>
|
|
379
|
+
Preview
|
|
380
|
+
</Button>
|
|
381
|
+
{#if previewResult.added?.length || previewResult.deleted?.length || previewResult.modified?.length}
|
|
382
|
+
<Button
|
|
383
|
+
color="red"
|
|
384
|
+
size="xs"
|
|
385
|
+
on:click={initializeRepo}
|
|
386
|
+
disabled={isPreviewLoading || isInitializing}
|
|
387
|
+
startIcon={{ icon: Save }}
|
|
388
|
+
title="Initialize Git Repo"
|
|
389
|
+
>
|
|
390
|
+
Push
|
|
391
|
+
</Button>
|
|
392
|
+
{/if}
|
|
393
|
+
{/if}
|
|
394
|
+
</div>
|
|
395
|
+
</div>
|
|
396
|
+
|
|
397
|
+
{#if initResult?.message}
|
|
398
|
+
<div class="mt-2">
|
|
399
|
+
<Alert
|
|
400
|
+
type={initResult.success ? 'success' : 'error'}
|
|
401
|
+
title={initResult.success ? 'Success' : 'Error'}
|
|
402
|
+
size="xs"
|
|
403
|
+
>
|
|
404
|
+
{initResult.message}
|
|
405
|
+
</Alert>
|
|
406
|
+
</div>
|
|
407
|
+
{/if}
|
|
408
|
+
</div>
|
|
409
|
+
</svelte:fragment>
|
|
410
|
+
</Popover>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type $$ComponentProps = {
|
|
2
|
+
gitRepoResourcePath: string;
|
|
3
|
+
branchName?: string;
|
|
4
|
+
uiState: {
|
|
5
|
+
include_path: string[];
|
|
6
|
+
exclude_path: string[];
|
|
7
|
+
extra_include_path: string[];
|
|
8
|
+
include_type: string[];
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
declare const InitGitRepoPopover: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
12
|
+
type InitGitRepoPopover = ReturnType<typeof InitGitRepoPopover>;
|
|
13
|
+
export default InitGitRepoPopover;
|
|
@@ -358,9 +358,16 @@ function handleChannelChange(channel, i) {
|
|
|
358
358
|
{:else if expiration}
|
|
359
359
|
<div class="flex flex-row gap-1 items-center">
|
|
360
360
|
<AlertCircle size={12} class="text-red-600" />
|
|
361
|
-
<span class="text-red-600 dark:text-red-400 text-xs"
|
|
362
|
-
|
|
363
|
-
|
|
361
|
+
<span class="text-red-600 dark:text-red-400 text-xs">
|
|
362
|
+
{#if $values[setting.key]?.endsWith('__dev')}
|
|
363
|
+
Dev license key expired on {expiration}.<br />If even after successful
|
|
364
|
+
renewal, your dev license key is still expired, it means that your production
|
|
365
|
+
key has expired due to unpaid invoices or excessive use of your production
|
|
366
|
+
instance.
|
|
367
|
+
{:else}
|
|
368
|
+
License key expired on {expiration}.
|
|
369
|
+
{/if}
|
|
370
|
+
</span>
|
|
364
371
|
</div>
|
|
365
372
|
{:else}
|
|
366
373
|
<div class="flex flex-row gap-1 items-center">
|
|
@@ -392,12 +399,17 @@ function handleChannelChange(channel, i) {
|
|
|
392
399
|
: 'text-red-600'
|
|
393
400
|
)}
|
|
394
401
|
>
|
|
395
|
-
{latestKeyRenewalAttempt.result === 'success'
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
402
|
+
{#if latestKeyRenewalAttempt.result === 'success' && $values[setting.key]?.endsWith('__dev')}
|
|
403
|
+
Latest dev key renewal succeeded on {attemptedAt}. The dev key expiry was
|
|
404
|
+
updated to align with your current production key's expiration date.
|
|
405
|
+
{:else}
|
|
406
|
+
{latestKeyRenewalAttempt.result === 'success'
|
|
407
|
+
? 'Latest key renewal succeeded'
|
|
408
|
+
: isTrial
|
|
409
|
+
? 'Latest key renewal ignored because in trial'
|
|
410
|
+
: 'Latest key renewal failed'}
|
|
411
|
+
on {attemptedAt}
|
|
412
|
+
{/if}
|
|
401
413
|
</span>
|
|
402
414
|
</div>
|
|
403
415
|
{#snippet text()}
|
|
@@ -171,9 +171,19 @@ function setupSnowflakeUrls() {
|
|
|
171
171
|
};
|
|
172
172
|
oauths['snowflake_oauth'].connect_config = connect_config;
|
|
173
173
|
}
|
|
174
|
+
let sendingStats = $state(false);
|
|
174
175
|
async function sendStats() {
|
|
175
|
-
|
|
176
|
-
|
|
176
|
+
try {
|
|
177
|
+
sendingStats = true;
|
|
178
|
+
await SettingService.sendStats();
|
|
179
|
+
sendUserToast('Usage sent');
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
throw err;
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
sendingStats = false;
|
|
186
|
+
}
|
|
177
187
|
}
|
|
178
188
|
function isValidTeamsChannel(value) {
|
|
179
189
|
return (typeof value === 'object' &&
|
|
@@ -273,8 +283,11 @@ function isValidTeamsChannel(value) {
|
|
|
273
283
|
color="light"
|
|
274
284
|
btnClasses="w-auto"
|
|
275
285
|
wrapperClasses="mb-4"
|
|
276
|
-
|
|
286
|
+
loading={sendingStats}
|
|
287
|
+
size="xs"
|
|
277
288
|
>
|
|
289
|
+
Send usage
|
|
290
|
+
</Button>
|
|
278
291
|
{/if}
|
|
279
292
|
{:else if category == 'Auth/OAuth/SAML'}
|
|
280
293
|
<AuthSettings
|