windmill-components 1.511.0 → 1.522.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/components/AppConnectInner.svelte.d.ts +1 -1
- package/package/components/ArgInput.svelte +56 -18
- package/package/components/ArgInput.svelte.d.ts +2 -10
- package/package/components/AssignableTagsInner.svelte +5 -0
- package/package/components/AuthSettings.svelte +4 -2
- package/package/components/AuthSettings.svelte.d.ts +1 -0
- package/package/components/DBManagerDrawer.svelte +154 -151
- package/package/components/DBManagerDrawer.svelte.d.ts +2 -2
- package/package/components/DBTable.svelte +3 -3
- package/package/components/DBTable.svelte.d.ts +1 -0
- package/package/components/DBTableEditor.svelte +7 -7
- package/package/components/DBTableEditor.svelte.d.ts +1 -1
- package/package/components/DeployWorkspace.svelte +1 -1
- package/package/components/DisplayResult.svelte +34 -8
- package/package/components/DisplayResult.svelte.d.ts +4 -1
- package/package/components/DynSelect.svelte +58 -34
- package/package/components/DynSelect.svelte.d.ts +3 -11
- package/package/components/EditableSchemaForm.svelte +126 -6
- package/package/components/EditableSchemaForm.svelte.d.ts +5 -1
- package/package/components/Editor.svelte +1 -1
- package/package/components/EditorBar.svelte +82 -4
- package/package/components/ErrorOrRecoveryHandler.svelte +76 -8
- package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -1
- package/package/components/ExploreAssetButton.svelte +14 -4
- package/package/components/ExploreAssetButton.svelte.d.ts +1 -0
- package/package/components/FlowJobResult.svelte +3 -3
- package/package/components/FlowJobResult.svelte.d.ts +1 -0
- package/package/components/FlowPreviewContent.svelte +9 -0
- package/package/components/FlowPreviewContent.svelte.d.ts +3 -0
- package/package/components/FlowPreviewResult.svelte +4 -1
- package/package/components/FlowPreviewResult.svelte.d.ts +1 -0
- package/package/components/FlowStatusViewer.svelte +2 -1
- package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
- package/package/components/FlowStatusViewerInner.svelte +23 -3
- package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -1
- package/package/components/FolderEditor.svelte +1 -1
- package/package/components/GitDiffPreview.svelte +14 -18
- package/package/components/GitDiffPreview.svelte.d.ts +2 -8
- package/package/components/GitHubAppIntegration.svelte +3 -1
- package/package/components/IdEditorInput.svelte +25 -22
- package/package/components/IdEditorInput.svelte.d.ts +11 -23
- package/package/components/InstanceSetting.svelte +7 -2
- package/package/components/InstanceSettings.svelte +1 -0
- package/package/components/JobLoader.svelte +48 -5
- package/package/components/JobLoader.svelte.d.ts +7 -2
- package/package/components/Login.svelte +8 -2
- package/package/components/MemoryFootprintViewer.svelte +1 -1
- package/package/components/ModulePreviewResultViewer.svelte +2 -2
- package/package/components/MoveDrawer.svelte.d.ts +2 -2
- package/package/components/NextcloudSetting.svelte +84 -0
- package/package/components/NextcloudSetting.svelte.d.ts +7 -0
- package/package/components/ObjectResourceInput.svelte +3 -2
- package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/ParqetCsvTableRenderer.svelte +1 -1
- package/package/components/ResourceEditor.svelte +1 -1
- package/package/components/ResourcePicker.svelte +8 -1
- package/package/components/ResourcePicker.svelte.d.ts +1 -0
- package/package/components/ResultStreamDisplay.svelte +5 -0
- package/package/components/ResultStreamDisplay.svelte.d.ts +5 -0
- package/package/components/RunForm.svelte +9 -1
- package/package/components/SchemaForm.svelte +2 -2
- package/package/components/SchemaForm.svelte.d.ts +2 -10
- package/package/components/ScriptBuilder.svelte +13 -8
- package/package/components/ScriptBuilder.svelte.d.ts +1 -1
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ScriptWrapper.svelte +1 -1
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/SimpleAgTable.svelte +2 -0
- package/package/components/SimpleAgTable.svelte.d.ts +2 -0
- package/package/components/SqlRepl.svelte +21 -7
- package/package/components/SqlRepl.svelte.d.ts +2 -2
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/WorkerTagSelect.svelte +70 -1
- package/package/components/apps/components/display/AppDisplayComponent.svelte +13 -1
- package/package/components/apps/components/display/AppText.svelte +2 -2
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +8 -1
- package/package/components/apps/components/display/dbtable/InsertRow.svelte +5 -4
- package/package/components/apps/components/display/dbtable/queries/count.js +11 -1
- package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
- package/package/components/apps/components/display/dbtable/queries/createTable.js +3 -3
- package/package/components/apps/components/display/dbtable/queries/delete.js +7 -0
- package/package/components/apps/components/display/dbtable/queries/insert.js +2 -0
- package/package/components/apps/components/display/dbtable/queries/select.js +14 -0
- package/package/components/apps/components/display/dbtable/queries/update.js +7 -0
- package/package/components/apps/components/display/dbtable/utils.d.ts +6 -5
- package/package/components/apps/components/display/dbtable/utils.js +52 -28
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +1 -1
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/AppAggridTable.svelte +5 -4
- package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/utils.js +7 -4
- package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -2
- package/package/components/apps/components/helpers/RunnableComponent.svelte +4 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
- package/package/components/apps/components/inputs/AppS3FileInput.svelte +2 -2
- package/package/components/apps/components/layout/AppDecisionTree.svelte +1 -1
- package/package/components/apps/components/layout/AppStepper.svelte +1 -1
- package/package/components/apps/components/layout/AppTabs.svelte +1 -1
- package/package/components/apps/editor/AppEditorHeader.svelte +13 -2
- package/package/components/apps/editor/GridViewer.svelte +1 -0
- package/package/components/apps/editor/RunnableJobPanelInner.svelte +2 -1
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +7 -7
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +7 -19
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +8 -12
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +3 -3
- package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +1 -3
- package/package/components/assets/AssetsDropdownButton.svelte +1 -1
- package/package/components/assets/JobAssetsViewer.svelte +2 -2
- package/package/components/assets/lib.js +4 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte +7 -9
- package/package/components/common/button/Button.svelte +4 -3
- package/package/components/common/button/Button.svelte.d.ts +1 -0
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +6 -5
- package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +6 -11
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +26 -0
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.js +50 -0
- package/package/components/common/modal/Modal.svelte +2 -5
- package/package/components/common/tabs/TabsV2.svelte +2 -1
- package/package/components/common/tabs/TabsV2.svelte.d.ts +1 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +61 -7
- package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
- package/package/components/copilot/chat/script/core.js +28 -29
- package/package/components/copilot/chat/shared.d.ts +1 -1
- package/package/components/copilot/chat/shared.js +8 -2
- package/package/components/custom_ui.d.ts +3 -0
- package/package/components/dbOps.d.ts +20 -8
- package/package/components/dbOps.js +85 -40
- package/package/components/details/DetailPageHeader.svelte +0 -2
- package/package/components/flows/content/FlowInput.svelte +5 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +1 -0
- package/package/components/flows/content/FlowModuleScript.svelte +0 -1
- package/package/components/flows/idUtils.js +2 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +3 -3
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -0
- package/package/components/flows/map/InsertModuleButton.svelte +4 -1
- package/package/components/flows/propPicker/OutputBadge.svelte +5 -1
- package/package/components/flows/propPicker/OutputPickerInner.svelte +9 -5
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +6 -2
- package/package/components/flows/propPicker/StepHistory.svelte +4 -1
- package/package/components/git_sync/DetectionFlow.svelte +202 -0
- package/package/components/git_sync/DetectionFlow.svelte.d.ts +6 -0
- package/package/components/git_sync/GitSyncContext.svelte.d.ts +82 -0
- package/package/components/git_sync/GitSyncContext.svelte.js +461 -0
- package/package/components/git_sync/GitSyncModalManager.svelte +99 -0
- package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +18 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +339 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +6 -0
- package/package/components/git_sync/GitSyncRepositoryList.svelte +17 -0
- package/package/components/git_sync/GitSyncRepositoryList.svelte.d.ts +18 -0
- package/package/components/git_sync/GitSyncSection.svelte +89 -0
- package/package/components/git_sync/GitSyncSection.svelte.d.ts +3 -0
- package/package/components/git_sync/GitSyncSuccessModal.svelte +58 -0
- package/package/components/git_sync/GitSyncSuccessModal.svelte.d.ts +7 -0
- package/package/components/git_sync/PullWorkspaceModal.svelte +575 -0
- package/package/components/git_sync/PullWorkspaceModal.svelte.d.ts +15 -0
- package/package/components/git_sync/PushWorkspaceModal.svelte +320 -0
- package/package/components/git_sync/PushWorkspaceModal.svelte.d.ts +12 -0
- package/package/components/graph/FlowGraphV2.svelte +5 -1
- package/package/components/graph/graphBuilder.svelte.js +1 -1
- package/package/components/graph/renderers/nodes/AssetNode.svelte +4 -4
- package/package/components/icons/AssetDucklakeIcon.svelte +28 -0
- package/package/components/icons/AssetDucklakeIcon.svelte.d.ts +9 -0
- package/package/components/icons/AssetGenericIcon.svelte +3 -0
- package/package/components/icons/DucklakeIcon.svelte +18 -0
- package/package/components/icons/DucklakeIcon.svelte.d.ts +6 -0
- package/package/components/instanceSettings.js +11 -3
- package/package/components/runs/JobPreview.svelte +2 -2
- package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
- package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
- package/package/components/schema/FlowPropertyEditor.svelte +3 -2
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte +0 -2
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/SchemaFormDND.svelte +2 -1
- package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -0
- package/package/components/scriptEditor/LogPanel.svelte +5 -3
- package/package/components/scriptEditor/LogPanel.svelte.d.ts +5 -1
- package/package/components/select/Select.svelte +7 -4
- package/package/components/select/Select.svelte.d.ts +5 -0
- package/package/components/select/SelectDropdown.svelte +2 -1
- package/package/components/select/SelectDropdown.svelte.d.ts +3 -0
- package/package/components/sidebar/changelogs.js +5 -0
- package/package/components/table/AutoDataTable.svelte +6 -4
- package/package/components/table/AutoDataTable.svelte.d.ts +1 -0
- package/package/components/table/DataTable.svelte +12 -10
- package/package/components/table/DataTable.svelte.d.ts +1 -0
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +2 -2
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +50 -11
- package/package/components/triggers/gcp/utils.js +1 -0
- package/package/components/triggers/http/utils.js +1 -1
- package/package/components/triggers/kafka/utils.js +1 -1
- package/package/components/triggers/mqtt/utils.js +1 -1
- package/package/components/triggers/nats/utils.js +1 -1
- package/package/components/triggers/postgres/utils.js +1 -1
- package/package/components/triggers/sqs/utils.js +1 -1
- package/package/components/triggers/utils.js +2 -1
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte +24 -26
- package/package/components/triggers/webhook/WebhooksPanel.svelte +1 -15
- package/package/components/triggers/websocket/utils.js +1 -1
- package/package/components/workspaceSettings/AISettings.svelte +52 -36
- package/package/components/workspaceSettings/DucklakeSettings.svelte +321 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +23 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +122 -499
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +8 -10
- package/package/consts.js +2 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +33 -24
- package/package/gen/schemas.gen.js +36 -27
- package/package/gen/services.gen.d.ts +19 -1
- package/package/gen/services.gen.js +38 -0
- package/package/gen/types.gen.d.ts +103 -9
- package/package/git-sync.d.ts +36 -0
- package/package/git-sync.js +1 -0
- package/package/hub.d.ts +1 -0
- package/package/hubPaths.json +5 -2
- package/package/infer.js +3 -2
- package/package/script_helpers.d.ts +2 -2
- package/package/script_helpers.js +29 -11
- package/package/services/JobManager.d.ts +28 -0
- package/package/services/JobManager.js +114 -0
- package/package/stores.d.ts +1 -1
- package/package/utils.d.ts +18 -1
- package/package/utils.js +55 -2
- package/package.json +13 -12
- package/package/components/InitGitRepoPopover.svelte +0 -410
- package/package/components/InitGitRepoPopover.svelte.d.ts +0 -13
- package/package/components/PullGitRepoPopover.svelte +0 -355
- package/package/components/PullGitRepoPopover.svelte.d.ts +0 -18
- package/package/inferArgSig.d.ts +0 -35
- package/package/inferArgSig.js +0 -191
|
@@ -1,30 +1,15 @@
|
|
|
1
1
|
<script lang="ts">import Toggle from '../Toggle.svelte';
|
|
2
|
-
import { Filter,
|
|
2
|
+
import { Filter, Terminal, ChevronDown, ChevronUp, Edit3 } from 'lucide-svelte';
|
|
3
3
|
import Tooltip from '../Tooltip.svelte';
|
|
4
|
-
import yaml from 'js-yaml';
|
|
5
|
-
import hubPaths from '../../hubPaths.json';
|
|
6
|
-
import { JobService } from '../../gen';
|
|
7
|
-
import { workspaceStore } from '../../stores';
|
|
8
|
-
import { Button } from '../common';
|
|
9
|
-
import { sendUserToast } from '../../toast';
|
|
10
4
|
import FilterList from './FilterList.svelte';
|
|
11
5
|
import { Tabs, Tab } from '../common';
|
|
12
|
-
|
|
6
|
+
import { workspaceStore } from '../../stores';
|
|
7
|
+
let { git_repo_resource_path = $bindable(''), include_path = $bindable(['f/**']), include_type = $bindable(['script', 'flow', 'app', 'folder']), exclude_types_override = $bindable([]), isLegacyRepo = false, excludes = $bindable([]), extraIncludes = $bindable([]), isInitialSetup = false, requiresMigration = false, actions = undefined, useIndividualBranch = false } = $props();
|
|
13
8
|
// Component state
|
|
14
9
|
let collapsed = $state(false);
|
|
15
|
-
let
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
// Preview/Push state
|
|
19
|
-
let previewResult = $state(null);
|
|
20
|
-
let previewJobId = $state(null);
|
|
21
|
-
let previewJobStatus = $state(undefined);
|
|
22
|
-
let pushJobId = $state(null);
|
|
23
|
-
let pushJobStatus = $state(undefined);
|
|
24
|
-
let isPreviewLoading = $state(false);
|
|
25
|
-
let isPushing = $state(false);
|
|
26
|
-
let previewError = $state('');
|
|
27
|
-
let previewSettingsSnapshot = $state(null);
|
|
10
|
+
let showCliInstructions = $state(false);
|
|
11
|
+
// Determine if component should be editable or read-only
|
|
12
|
+
const isEditable = $derived(isInitialSetup || requiresMigration);
|
|
28
13
|
// Compute effective include types (include_type minus exclude_types_override for legacy repos only)
|
|
29
14
|
const effectiveIncludeTypes = $derived(isLegacyRepo
|
|
30
15
|
? include_type.filter((type) => !exclude_types_override.includes(type))
|
|
@@ -80,352 +65,6 @@ function updateIncludeType(key, value) {
|
|
|
80
65
|
function capitalize(str) {
|
|
81
66
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
82
67
|
}
|
|
83
|
-
// Simple JSON-based UI state helper
|
|
84
|
-
function getUIState() {
|
|
85
|
-
return {
|
|
86
|
-
include_path,
|
|
87
|
-
exclude_path: excludes,
|
|
88
|
-
extra_include_path: extraIncludes,
|
|
89
|
-
include_type
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
// Apply settings from backend format (used by both local git repo and backend settings)
|
|
93
|
-
function fromBackendFormat(settings) {
|
|
94
|
-
include_path = settings.include_path || [];
|
|
95
|
-
excludes = settings.exclude_path || [];
|
|
96
|
-
extraIncludes = settings.extra_include_path || [];
|
|
97
|
-
include_type = settings.include_type || [];
|
|
98
|
-
}
|
|
99
|
-
// Simplified YAML parsing for manual editing
|
|
100
|
-
function fromYaml(yamlStr) {
|
|
101
|
-
yamlError = '';
|
|
102
|
-
try {
|
|
103
|
-
const parsed = yaml.load(yamlStr);
|
|
104
|
-
if (!parsed || typeof parsed !== 'object') {
|
|
105
|
-
throw new Error('Invalid YAML structure');
|
|
106
|
-
}
|
|
107
|
-
const obj = parsed;
|
|
108
|
-
yamlText = yamlStr;
|
|
109
|
-
// Extract includes - reset to default if not present
|
|
110
|
-
if (obj.includes && Array.isArray(obj.includes)) {
|
|
111
|
-
include_path = obj.includes.map((p) => {
|
|
112
|
-
if (typeof p !== 'string') {
|
|
113
|
-
throw new Error('includes must contain only strings');
|
|
114
|
-
}
|
|
115
|
-
// Handle quoted strings
|
|
116
|
-
if (/^['"].*['"]$/.test(p)) {
|
|
117
|
-
return p.slice(1, -1).replace(/''/g, "'");
|
|
118
|
-
}
|
|
119
|
-
return p;
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
// Reset to default if includes is not present
|
|
124
|
-
include_path = ['f/**'];
|
|
125
|
-
}
|
|
126
|
-
// Build the type set based on the YAML flags
|
|
127
|
-
const newTypes = new Set();
|
|
128
|
-
// Always include core types (these are fundamental and not controlled by flags)
|
|
129
|
-
newTypes.add('script');
|
|
130
|
-
newTypes.add('flow');
|
|
131
|
-
newTypes.add('app');
|
|
132
|
-
newTypes.add('folder');
|
|
133
|
-
// Handle skip flags (if skipX is false or undefined, include the type)
|
|
134
|
-
if (obj.skipResourceTypes !== true)
|
|
135
|
-
newTypes.add('resourcetype');
|
|
136
|
-
if (obj.skipResources !== true)
|
|
137
|
-
newTypes.add('resource');
|
|
138
|
-
if (obj.skipVariables !== true)
|
|
139
|
-
newTypes.add('variable');
|
|
140
|
-
if (obj.skipSecrets !== true)
|
|
141
|
-
newTypes.add('secret');
|
|
142
|
-
// Handle include flags (if includeX is true, include the type)
|
|
143
|
-
if (obj.includeSchedules === true)
|
|
144
|
-
newTypes.add('schedule');
|
|
145
|
-
if (obj.includeTriggers === true)
|
|
146
|
-
newTypes.add('trigger');
|
|
147
|
-
if (obj.includeUsers === true)
|
|
148
|
-
newTypes.add('user');
|
|
149
|
-
if (obj.includeGroups === true)
|
|
150
|
-
newTypes.add('group');
|
|
151
|
-
if (obj.includeSettings === true)
|
|
152
|
-
newTypes.add('settings');
|
|
153
|
-
if (obj.includeKey === true)
|
|
154
|
-
newTypes.add('key');
|
|
155
|
-
// Apply business rule: secrets can only be included if variables are included
|
|
156
|
-
// This matches the UI behavior where turning off variables also turns off secrets
|
|
157
|
-
if (!newTypes.has('variable')) {
|
|
158
|
-
newTypes.delete('secret');
|
|
159
|
-
}
|
|
160
|
-
include_type = Array.from(newTypes);
|
|
161
|
-
}
|
|
162
|
-
catch (e) {
|
|
163
|
-
yamlError = e.message || 'Invalid YAML';
|
|
164
|
-
console.error('Error parsing YAML:', e);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
// Simple YAML generation for manual editing mode
|
|
168
|
-
function generateYamlFromUI() {
|
|
169
|
-
try {
|
|
170
|
-
const validIncludePath = include_path;
|
|
171
|
-
const validExcludePath = excludes;
|
|
172
|
-
const validExtraInclude = extraIncludes;
|
|
173
|
-
// Basic YAML structure - let the CLI handle the proper normalization
|
|
174
|
-
let config = {
|
|
175
|
-
includes: validIncludePath,
|
|
176
|
-
excludes: validExcludePath,
|
|
177
|
-
extraIncludes: validExtraInclude,
|
|
178
|
-
codebases: []
|
|
179
|
-
};
|
|
180
|
-
// Let the CLI handle the optimization of skip/include flags
|
|
181
|
-
// Just convert the UI state directly
|
|
182
|
-
if (!include_type.includes('variable'))
|
|
183
|
-
config.skipVariables = true;
|
|
184
|
-
if (!include_type.includes('resource'))
|
|
185
|
-
config.skipResources = true;
|
|
186
|
-
if (!include_type.includes('secret'))
|
|
187
|
-
config.skipSecrets = true;
|
|
188
|
-
if (!include_type.includes('resourcetype'))
|
|
189
|
-
config.skipResourceTypes = true;
|
|
190
|
-
if (include_type.includes('schedule'))
|
|
191
|
-
config.includeSchedules = true;
|
|
192
|
-
if (include_type.includes('trigger'))
|
|
193
|
-
config.includeTriggers = true;
|
|
194
|
-
if (include_type.includes('user'))
|
|
195
|
-
config.includeUsers = true;
|
|
196
|
-
if (include_type.includes('group'))
|
|
197
|
-
config.includeGroups = true;
|
|
198
|
-
if (include_type.includes('settings'))
|
|
199
|
-
config.includeSettings = true;
|
|
200
|
-
if (include_type.includes('key'))
|
|
201
|
-
config.includeKey = true;
|
|
202
|
-
return yaml.dump(config, {
|
|
203
|
-
indent: 2,
|
|
204
|
-
lineWidth: -1,
|
|
205
|
-
quotingType: '"',
|
|
206
|
-
forceQuotes: false,
|
|
207
|
-
noRefs: true
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
catch (e) {
|
|
211
|
-
console.warn('Failed to generate YAML:', e);
|
|
212
|
-
yamlError = e.message || 'Failed to generate YAML';
|
|
213
|
-
return `includes:
|
|
214
|
-
- f/**
|
|
215
|
-
excludes: []
|
|
216
|
-
extraIncludes: []
|
|
217
|
-
codebases: []`;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
function switchToYaml() {
|
|
221
|
-
yamlText = generateYamlFromUI();
|
|
222
|
-
yamlError = '';
|
|
223
|
-
editAsYaml = true;
|
|
224
|
-
}
|
|
225
|
-
function switchToUI() {
|
|
226
|
-
fromYaml(yamlText);
|
|
227
|
-
if (!yamlError) {
|
|
228
|
-
editAsYaml = false;
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
// Simplified preview function - always uses JSON approach
|
|
232
|
-
async function previewFiltersToGitRepo() {
|
|
233
|
-
isPreviewLoading = true;
|
|
234
|
-
previewError = '';
|
|
235
|
-
previewResult = null;
|
|
236
|
-
previewJobId = null;
|
|
237
|
-
previewJobStatus = undefined;
|
|
238
|
-
// Take a snapshot of current settings
|
|
239
|
-
previewSettingsSnapshot = JSON.stringify({
|
|
240
|
-
include_path,
|
|
241
|
-
excludes,
|
|
242
|
-
extraIncludes,
|
|
243
|
-
include_type
|
|
244
|
-
});
|
|
245
|
-
try {
|
|
246
|
-
const workspace = $workspaceStore;
|
|
247
|
-
if (!workspace)
|
|
248
|
-
return;
|
|
249
|
-
// Always pass UI state as JSON - the backend now handles this uniformly
|
|
250
|
-
const payloadObj = {
|
|
251
|
-
workspace_id: workspace,
|
|
252
|
-
repo_url_resource_path: git_repo_resource_path,
|
|
253
|
-
only_wmill_yaml: true,
|
|
254
|
-
dry_run: true,
|
|
255
|
-
pull: isPullMode,
|
|
256
|
-
settings_json: JSON.stringify(getUIState())
|
|
257
|
-
};
|
|
258
|
-
const jobId = await JobService.runScriptByPath({
|
|
259
|
-
workspace,
|
|
260
|
-
path: hubPaths.gitInitRepo,
|
|
261
|
-
requestBody: payloadObj,
|
|
262
|
-
skipPreprocessor: true
|
|
263
|
-
});
|
|
264
|
-
previewJobId = jobId;
|
|
265
|
-
previewJobStatus = 'running';
|
|
266
|
-
let jobSuccess = false;
|
|
267
|
-
let result = {};
|
|
268
|
-
await (await import('../../utils')).tryEvery({
|
|
269
|
-
tryCode: async () => {
|
|
270
|
-
const testResult = await JobService.getCompletedJob({ workspace, id: jobId });
|
|
271
|
-
jobSuccess = !!testResult.success;
|
|
272
|
-
if (jobSuccess) {
|
|
273
|
-
const jobResult = await JobService.getCompletedJobResult({ workspace, id: jobId });
|
|
274
|
-
result = jobResult;
|
|
275
|
-
}
|
|
276
|
-
},
|
|
277
|
-
timeoutCode: async () => {
|
|
278
|
-
try {
|
|
279
|
-
await JobService.cancelQueuedJob({
|
|
280
|
-
workspace,
|
|
281
|
-
id: jobId,
|
|
282
|
-
requestBody: { reason: 'Preview job timed out after 5s' }
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
catch (err) { }
|
|
286
|
-
},
|
|
287
|
-
interval: 500,
|
|
288
|
-
timeout: 10000
|
|
289
|
-
});
|
|
290
|
-
previewJobStatus = jobSuccess ? 'success' : 'failure';
|
|
291
|
-
if (jobSuccess) {
|
|
292
|
-
previewResult = result;
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
previewError = 'Preview failed';
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
catch (e) {
|
|
299
|
-
previewJobStatus = 'failure';
|
|
300
|
-
previewError = e?.message || 'Preview failed';
|
|
301
|
-
previewResult = null;
|
|
302
|
-
}
|
|
303
|
-
finally {
|
|
304
|
-
isPreviewLoading = false;
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
// Simplified push function - always uses JSON approach
|
|
308
|
-
async function pushFiltersToGitRepo() {
|
|
309
|
-
if (isPullMode) {
|
|
310
|
-
// In pull mode, apply the local settings (from git repo) to UI
|
|
311
|
-
if (previewResult?.local) {
|
|
312
|
-
try {
|
|
313
|
-
fromBackendFormat(previewResult.local);
|
|
314
|
-
yamlText = generateYamlFromUI();
|
|
315
|
-
onSettingsChange({ yaml: yamlText });
|
|
316
|
-
sendUserToast('Changes applied - remember to save repository settings to persist changes');
|
|
317
|
-
// Clear the preview state after applying settings
|
|
318
|
-
previewResult = null;
|
|
319
|
-
previewJobId = null;
|
|
320
|
-
previewJobStatus = undefined;
|
|
321
|
-
previewError = '';
|
|
322
|
-
}
|
|
323
|
-
catch (e) {
|
|
324
|
-
previewError = 'Failed to apply pulled settings: ' + e.message;
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
// Push mode - send current UI state as JSON
|
|
330
|
-
isPushing = true;
|
|
331
|
-
pushJobId = null;
|
|
332
|
-
pushJobStatus = undefined;
|
|
333
|
-
try {
|
|
334
|
-
const workspace = $workspaceStore;
|
|
335
|
-
if (!workspace)
|
|
336
|
-
return;
|
|
337
|
-
const payloadObj = {
|
|
338
|
-
workspace_id: workspace,
|
|
339
|
-
repo_url_resource_path: git_repo_resource_path,
|
|
340
|
-
dry_run: false,
|
|
341
|
-
pull: isPullMode,
|
|
342
|
-
only_wmill_yaml: true,
|
|
343
|
-
settings_json: JSON.stringify(getUIState())
|
|
344
|
-
};
|
|
345
|
-
const jobId = await JobService.runScriptByPath({
|
|
346
|
-
workspace,
|
|
347
|
-
path: hubPaths.gitInitRepo,
|
|
348
|
-
requestBody: payloadObj,
|
|
349
|
-
skipPreprocessor: true
|
|
350
|
-
});
|
|
351
|
-
pushJobId = jobId;
|
|
352
|
-
pushJobStatus = 'running';
|
|
353
|
-
let jobSuccess = false;
|
|
354
|
-
await (await import('../../utils')).tryEvery({
|
|
355
|
-
tryCode: async () => {
|
|
356
|
-
const testResult = await JobService.getCompletedJob({ workspace, id: jobId });
|
|
357
|
-
jobSuccess = !!testResult.success;
|
|
358
|
-
},
|
|
359
|
-
timeoutCode: async () => {
|
|
360
|
-
try {
|
|
361
|
-
await JobService.cancelQueuedJob({
|
|
362
|
-
workspace,
|
|
363
|
-
id: jobId,
|
|
364
|
-
requestBody: { reason: 'Push job timed out after 5s' }
|
|
365
|
-
});
|
|
366
|
-
}
|
|
367
|
-
catch (err) { }
|
|
368
|
-
},
|
|
369
|
-
interval: 500,
|
|
370
|
-
timeout: 10000
|
|
371
|
-
});
|
|
372
|
-
pushJobStatus = jobSuccess ? 'success' : 'failure';
|
|
373
|
-
if (jobSuccess) {
|
|
374
|
-
// Reset preview state after successful push
|
|
375
|
-
previewResult = null;
|
|
376
|
-
previewJobId = null;
|
|
377
|
-
previewJobStatus = undefined;
|
|
378
|
-
previewError = '';
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
catch (e) {
|
|
382
|
-
pushJobStatus = 'failure';
|
|
383
|
-
}
|
|
384
|
-
finally {
|
|
385
|
-
isPushing = false;
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
// Simplified export function for backward compatibility
|
|
389
|
-
export function toYaml() {
|
|
390
|
-
return generateYamlFromUI();
|
|
391
|
-
}
|
|
392
|
-
export function setSettings(settings) {
|
|
393
|
-
yamlText = settings.yaml;
|
|
394
|
-
fromYaml(settings.yaml);
|
|
395
|
-
}
|
|
396
|
-
$effect(() => {
|
|
397
|
-
// Reset preview state when switching modes
|
|
398
|
-
if (isPullMode !== undefined) {
|
|
399
|
-
previewResult = null;
|
|
400
|
-
previewJobId = null;
|
|
401
|
-
previewJobStatus = undefined;
|
|
402
|
-
pushJobId = null;
|
|
403
|
-
pushJobStatus = undefined;
|
|
404
|
-
isPreviewLoading = false;
|
|
405
|
-
isPushing = false;
|
|
406
|
-
previewError = '';
|
|
407
|
-
}
|
|
408
|
-
});
|
|
409
|
-
// Reset preview state when settings change (making preview stale)
|
|
410
|
-
$effect(() => {
|
|
411
|
-
// Track all the settings that affect the preview
|
|
412
|
-
const currentSettings = JSON.stringify({
|
|
413
|
-
include_path,
|
|
414
|
-
excludes,
|
|
415
|
-
extraIncludes,
|
|
416
|
-
include_type
|
|
417
|
-
});
|
|
418
|
-
// If we have an existing preview result and settings have changed from snapshot, clear it
|
|
419
|
-
if (previewResult !== null &&
|
|
420
|
-
previewSettingsSnapshot !== null &&
|
|
421
|
-
currentSettings !== previewSettingsSnapshot) {
|
|
422
|
-
previewResult = null;
|
|
423
|
-
previewJobId = null;
|
|
424
|
-
previewJobStatus = undefined;
|
|
425
|
-
previewError = '';
|
|
426
|
-
previewSettingsSnapshot = null;
|
|
427
|
-
}
|
|
428
|
-
});
|
|
429
68
|
</script>
|
|
430
69
|
|
|
431
70
|
<div class="rounded-lg shadow-sm border p-0 w-full">
|
|
@@ -434,18 +73,19 @@ $effect(() => {
|
|
|
434
73
|
<div class="flex items-center gap-2">
|
|
435
74
|
<Filter size={18} class="text-primary" />
|
|
436
75
|
<span class="font-semibold text-sm">Git Sync filter settings</span>
|
|
76
|
+
{#if isLegacyRepo}
|
|
77
|
+
<Tooltip>
|
|
78
|
+
This repository uses legacy configuration format and inherits settings from workspace-level defaults. Excluded types are filtered out from inherited types. Save to migrate to the new format.
|
|
79
|
+
</Tooltip>
|
|
80
|
+
{:else if !isEditable}
|
|
81
|
+
<Tooltip documentationLink="https://www.windmill.dev/docs/advanced/cli/sync#wmillyaml">
|
|
82
|
+
These settings are controlled by the wmill.yaml file in your git repository. Click "Pull from repo" to check for settings drift and pull settings from repo.
|
|
83
|
+
</Tooltip>
|
|
84
|
+
{/if}
|
|
437
85
|
</div>
|
|
438
86
|
<div class="flex items-center gap-2">
|
|
439
|
-
{#if !collapsed}
|
|
440
|
-
<button
|
|
441
|
-
class="text-xs px-2 py-1 rounded border border-gray-300 bg-surface-primary hover:bg-surface-secondary"
|
|
442
|
-
onclick={editAsYaml ? switchToUI : switchToYaml}
|
|
443
|
-
>
|
|
444
|
-
{editAsYaml ? 'Edit in UI' : 'Edit as YAML'}
|
|
445
|
-
</button>
|
|
446
|
-
{/if}
|
|
447
87
|
<button
|
|
448
|
-
class="text-
|
|
88
|
+
class="text-secondary hover:text-primary focus:outline-none"
|
|
449
89
|
onclick={() => (collapsed = !collapsed)}
|
|
450
90
|
aria-label="Toggle collapse"
|
|
451
91
|
>
|
|
@@ -484,18 +124,8 @@ $effect(() => {
|
|
|
484
124
|
</div>
|
|
485
125
|
</div>
|
|
486
126
|
{#if !collapsed}
|
|
487
|
-
{#if
|
|
488
|
-
|
|
489
|
-
<textarea
|
|
490
|
-
class="w-full h-64 font-mono text-xs border rounded p-2 bg-gray-50 focus:outline-none focus:ring-2 focus:ring-primary"
|
|
491
|
-
spellcheck="false"
|
|
492
|
-
bind:value={yamlText}
|
|
493
|
-
></textarea>
|
|
494
|
-
{#if yamlError}
|
|
495
|
-
<div class="text-xs text-red-600 mt-2">{yamlError}</div>
|
|
496
|
-
{/if}
|
|
497
|
-
</div>
|
|
498
|
-
{:else}
|
|
127
|
+
{#if isEditable}
|
|
128
|
+
<!-- Editable mode -->
|
|
499
129
|
<div class="px-4 py-2">
|
|
500
130
|
<div class="grid grid-cols-1 md:grid-cols-2 md:gap-32">
|
|
501
131
|
<div class="flex flex-col gap-2">
|
|
@@ -661,124 +291,117 @@ $effect(() => {
|
|
|
661
291
|
</div>
|
|
662
292
|
</div>
|
|
663
293
|
</div>
|
|
664
|
-
<div class="mt-6
|
|
665
|
-
<div class="
|
|
666
|
-
|
|
667
|
-
size="sm"
|
|
668
|
-
bind:checked={isPullMode}
|
|
669
|
-
options={{
|
|
670
|
-
left: 'Push',
|
|
671
|
-
right: 'Pull'
|
|
672
|
-
}}
|
|
673
|
-
/>
|
|
674
|
-
<span class="text-xs text-tertiary">
|
|
675
|
-
{isPullMode ? 'Pull settings from Git repository' : 'Push settings to Git repository'}
|
|
676
|
-
</span>
|
|
294
|
+
<div class="mt-6 p-2 border-t">
|
|
295
|
+
<div class="text-xs text-tertiary mb-2">
|
|
296
|
+
{isInitialSetup ? 'Configure initial sync settings' : 'Review migration settings'}
|
|
677
297
|
</div>
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
</
|
|
709
|
-
|
|
298
|
+
</div>
|
|
299
|
+
{:else}
|
|
300
|
+
<!-- Read-only view -->
|
|
301
|
+
<div class="px-4 py-2">
|
|
302
|
+
<div class="grid grid-cols-1 md:grid-cols-2 md:gap-8">
|
|
303
|
+
<div class="flex flex-col gap-3">
|
|
304
|
+
<div>
|
|
305
|
+
<h4 class="font-semibold text-sm mb-1">Include Paths</h4>
|
|
306
|
+
{#if include_path.length > 0}
|
|
307
|
+
<div class="flex flex-wrap gap-1 text-xs">
|
|
308
|
+
{#each include_path as path}
|
|
309
|
+
<span class="bg-surface-secondary text-primary rounded-full px-2 py-1">{path}</span>
|
|
310
|
+
{/each}
|
|
311
|
+
</div>
|
|
312
|
+
{:else}
|
|
313
|
+
<div class="text-tertiary text-xs">No include paths configured</div>
|
|
314
|
+
{/if}
|
|
315
|
+
</div>
|
|
316
|
+
|
|
317
|
+
<div>
|
|
318
|
+
<h4 class="font-semibold text-sm mb-1">Exclude Paths</h4>
|
|
319
|
+
{#if excludes.length > 0}
|
|
320
|
+
<div class="flex flex-wrap gap-1 text-xs">
|
|
321
|
+
{#each excludes as path}
|
|
322
|
+
<span class="bg-red-100 text-red-800 rounded-full px-2 py-1">{path}</span>
|
|
323
|
+
{/each}
|
|
324
|
+
</div>
|
|
325
|
+
{:else}
|
|
326
|
+
<div class="text-tertiary text-xs">No exclude paths configured</div>
|
|
327
|
+
{/if}
|
|
328
|
+
</div>
|
|
329
|
+
</div>
|
|
330
|
+
|
|
331
|
+
<div class="flex flex-col gap-2">
|
|
332
|
+
<h4 class="font-semibold text-sm">Included Types</h4>
|
|
333
|
+
<div class="grid grid-cols-2 gap-x-4 gap-y-1 text-xs">
|
|
334
|
+
{#each Object.entries(typeToggles) as [key, enabled]}
|
|
335
|
+
<div class="flex items-center gap-1">
|
|
336
|
+
<div class={enabled ? 'text-green-600' : 'text-gray-400'}>
|
|
337
|
+
{enabled ? '✓' : '✗'}
|
|
338
|
+
</div>
|
|
339
|
+
<span class={enabled ? 'text-primary' : 'text-tertiary'}>
|
|
340
|
+
{capitalize(key)}
|
|
341
|
+
</span>
|
|
342
|
+
</div>
|
|
343
|
+
{/each}
|
|
344
|
+
</div>
|
|
345
|
+
</div>
|
|
710
346
|
</div>
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
{
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
{#if previewJobStatus === 'running'}
|
|
717
|
-
<Loader2 class="animate-spin" size={14} />
|
|
718
|
-
{:else if previewJobStatus === 'success'}
|
|
719
|
-
<CheckCircle2 size={14} class="text-green-600" />
|
|
720
|
-
{:else if previewJobStatus === 'failure'}
|
|
721
|
-
<XCircle size={14} class="text-red-700" />
|
|
722
|
-
{/if}
|
|
723
|
-
Preview job:
|
|
724
|
-
<a
|
|
725
|
-
target="_blank"
|
|
726
|
-
class="underline"
|
|
727
|
-
href={`/run/${previewJobId}?workspace=${$workspaceStore}`}>{previewJobId}</a
|
|
728
|
-
>
|
|
347
|
+
|
|
348
|
+
<!-- Actions slot for custom buttons -->
|
|
349
|
+
{#if actions}
|
|
350
|
+
<div class="flex justify-start mt-4">
|
|
351
|
+
{@render actions()}
|
|
729
352
|
</div>
|
|
730
353
|
{/if}
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
354
|
+
|
|
355
|
+
<!-- CLI Instructions (collapsible) -->
|
|
356
|
+
<div class="border-t pt-2 mt-4">
|
|
357
|
+
<button
|
|
358
|
+
class="flex items-center gap-2 text-sm text-secondary hover:text-primary transition-colors"
|
|
359
|
+
onclick={() => showCliInstructions = !showCliInstructions}
|
|
734
360
|
>
|
|
735
|
-
<
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
{:else if previewResult.hasChanges && previewResult.diff && Object.keys(previewResult.diff).length > 0}
|
|
741
|
-
<div class="mt-2 space-y-1">
|
|
742
|
-
{#each Object.entries(previewResult.diff) as [field, change]}
|
|
743
|
-
<div class="flex items-start gap-2 text-2xs">
|
|
744
|
-
<span class="font-mono text-tertiary min-w-0 flex-shrink-0">{field}:</span>
|
|
745
|
-
<div class="min-w-0 flex-1">
|
|
746
|
-
{#if Array.isArray(change.from) || Array.isArray(change.to)}
|
|
747
|
-
<div class="space-y-0.5">
|
|
748
|
-
<div class="text-red-600">- {JSON.stringify(change.from)}</div>
|
|
749
|
-
<div class="text-green-600">+ {JSON.stringify(change.to)}</div>
|
|
750
|
-
</div>
|
|
751
|
-
{:else}
|
|
752
|
-
<span class="text-red-600">{JSON.stringify(change.from)}</span>
|
|
753
|
-
<span class="text-tertiary"> → </span>
|
|
754
|
-
<span class="text-green-600">{JSON.stringify(change.to)}</span>
|
|
755
|
-
{/if}
|
|
756
|
-
</div>
|
|
757
|
-
</div>
|
|
758
|
-
{/each}
|
|
759
|
-
</div>
|
|
361
|
+
<Terminal size={16} />
|
|
362
|
+
<span>Update settings with CLI</span>
|
|
363
|
+
<Edit3 size={14} class="text-tertiary" />
|
|
364
|
+
{#if showCliInstructions}
|
|
365
|
+
<ChevronUp size={16} />
|
|
760
366
|
{:else}
|
|
761
|
-
<
|
|
367
|
+
<ChevronDown size={16} />
|
|
762
368
|
{/if}
|
|
763
|
-
</
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
369
|
+
</button>
|
|
370
|
+
|
|
371
|
+
{#if showCliInstructions}
|
|
372
|
+
<div class="mt-3 bg-surface-secondary rounded-lg p-3">
|
|
373
|
+
<div class="text-xs text-tertiary mb-2">
|
|
374
|
+
These filter settings are sourced from the <code class="bg-surface px-1 py-0.5 rounded">wmill.yaml</code> file in your git repository.
|
|
375
|
+
To modify them, edit the file in your repository, commit the changes, and sync using the commands below. Learn more about <a href="https://www.windmill.dev/docs/advanced/cli/sync#wmillyaml" target="_blank" rel="noopener noreferrer">the wmill.yaml format</a>
|
|
376
|
+
</div>
|
|
377
|
+
<pre class="text-xs bg-surface p-3 rounded overflow-x-auto whitespace-pre-wrap break-all">
|
|
378
|
+
# Make sure your repo is up to date
|
|
379
|
+
git pull
|
|
380
|
+
|
|
381
|
+
# Edit wmill.yaml file
|
|
382
|
+
vim wmill.yaml
|
|
383
|
+
|
|
384
|
+
# Commit changes
|
|
385
|
+
git add wmill.yaml
|
|
386
|
+
git commit
|
|
387
|
+
git push
|
|
388
|
+
|
|
389
|
+
# Push changes to workspace or click the pull settings button above{#if useIndividualBranch}
|
|
390
|
+
wmill gitsync-settings push --workspace {$workspaceStore} --repository {git_repo_resource_path} --promotion main{:else}
|
|
391
|
+
wmill gitsync-settings push --workspace {$workspaceStore} --repository {git_repo_resource_path}{/if}</pre>
|
|
392
|
+
{#if useIndividualBranch}
|
|
393
|
+
<div class="text-xs text-tertiary mt-3">
|
|
394
|
+
<div class="font-medium mb-1">Promotion Mode Configuration:</div>
|
|
395
|
+
<div>You can add promotion-specific overrides in your <code class="bg-surface px-1 py-0.5 rounded">wmill.yaml</code> file:</div>
|
|
396
|
+
<pre class="text-xs bg-surface p-2 rounded mt-2 overflow-x-auto">git_branches:
|
|
397
|
+
main:
|
|
398
|
+
promotionOverrides:
|
|
399
|
+
# Add your promotion-specific settings here</pre>
|
|
400
|
+
</div>
|
|
401
|
+
{/if}
|
|
402
|
+
</div>
|
|
403
|
+
{/if}
|
|
404
|
+
</div>
|
|
782
405
|
</div>
|
|
783
406
|
{/if}
|
|
784
407
|
{/if}
|