Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
151 commits
Select commit Hold shift + click to select a range
b2fe0db
export_datatable_schema
diegoimbert Mar 12, 2026
521ffc1
Propose to fork the datatable on ws fork
diegoimbert Mar 12, 2026
57c88f0
dump datatable
diegoimbert Mar 12, 2026
63aac55
Merge remote-tracking branch 'origin/main' into fork-datatable-schema…
diegoimbert Mar 12, 2026
cc57f82
Dockerfile
diegoimbert Mar 12, 2026
57c2cac
Fix import_datatable_dump
diegoimbert Mar 12, 2026
6a6e769
datatable schema fork works!
diegoimbert Mar 12, 2026
45a83cf
Option to copy both schema and data
diegoimbert Mar 12, 2026
d7150d0
Datatable fork behavior
diegoimbert Mar 12, 2026
3bb7fcc
nit ui
diegoimbert Mar 12, 2026
6dcf100
use psql instead
diegoimbert Mar 12, 2026
10ab90b
remove fork_datatable route
diegoimbert Mar 12, 2026
fe8e080
feat: add fork_pg_database and export_pg_schema routes with DB Manage…
diegoimbert Mar 12, 2026
0c13dd2
style: pluralize "schema" to "schemas" in DB Manager export/import UI
diegoimbert Mar 12, 2026
c8ceaab
feat: add import mode select (schema only vs schema + data) to DB Man…
diegoimbert Mar 12, 2026
3099492
Select schema or schema+data when important database
diegoimbert Mar 12, 2026
adea399
fix: prepend $res: prefix to resource paths in DB Manager import/export
diegoimbert Mar 12, 2026
14aef74
style: dynamic import button label based on selected mode
diegoimbert Mar 12, 2026
1375007
nits
diegoimbert Mar 12, 2026
1d3bafb
feat: add warning alert when schema+data import mode is selected
diegoimbert Mar 12, 2026
4f53cfa
nit hide on cloud hosted
diegoimbert Mar 12, 2026
c9539f8
refactor: remove fork_behavior from datatable settings
diegoimbert Mar 12, 2026
078ecc7
refactor: split CreateWorkspace into layout wrapper and CreateWorkspa…
diegoimbert Mar 12, 2026
5b17c09
feat: instantiate CreateWorkspaceInner in globalForkModal
diegoimbert Mar 12, 2026
b8dc913
nit icons
diegoimbert Mar 12, 2026
9510153
Data table fork UI
diegoimbert Mar 12, 2026
e9c8f6f
feat: pass per-datatable fork behaviors from UI to backend during wor…
diegoimbert Mar 12, 2026
151f634
Fix fork overwriting all datatables
diegoimbert Mar 13, 2026
4561a21
UI nits
diegoimbert Mar 13, 2026
bda175a
custom instance db refactor
diegoimbert Mar 13, 2026
99a7dac
custom instance db wizard btn for all in dropdown
diegoimbert Mar 13, 2026
4b5559b
nit
diegoimbert Mar 13, 2026
ff6041e
Delete custom instance database button
diegoimbert Mar 13, 2026
5009372
Merge remote-tracking branch 'origin/main' into fork-datatable-schema…
diegoimbert Mar 13, 2026
9561cc8
Disable forking for resource datatables
diegoimbert Mar 13, 2026
7387ac3
Big import buttons when db empty
diegoimbert Mar 13, 2026
643eeb4
Revert "Disable forking for resource datatables"
diegoimbert Mar 13, 2026
cba4db9
feat: add non_diffable flag to resource table
diegoimbert Mar 13, 2026
baec80d
feat: add resource-type datatable fork with CREATE DATABASE
diegoimbert Mar 13, 2026
507e6f1
feat: tag forked datatables with nonDiffable and forkedFrom
diegoimbert Mar 18, 2026
a94390c
feat: diff datatable and ducklake settings individually on workspace …
diegoimbert Mar 18, 2026
9629365
feat: skip non_diffable resources and datatables in workspace diff
diegoimbert Mar 18, 2026
e8709c3
feat: default datatable fork behavior to keep_original
diegoimbert Mar 18, 2026
996e33b
fix: make grant permissions non-fatal in instance datatable fork
diegoimbert Mar 18, 2026
50587fc
fix: make datatable and ducklake diffs visible in workspace comparison
diegoimbert Mar 18, 2026
ffbf3e1
refactor: remove datatable fork logic from workspace fork route
diegoimbert Mar 23, 2026
6b50884
fix: correct ahead/behind logic for datatable and ducklake diffs
diegoimbert Mar 23, 2026
e67d733
Revert "fix: correct ahead/behind logic for datatable and ducklake di…
diegoimbert Mar 23, 2026
7605524
revert: remove datatable and ducklake settings diffing logic
diegoimbert Mar 23, 2026
6cc7a9f
feat: add datatable clone UI with step-by-step confirmation modal
diegoimbert Mar 23, 2026
30b03dc
refactor: extract datatable fork UI into ForkDatatableSection component
diegoimbert Mar 23, 2026
6834c13
nit
diegoimbert Mar 23, 2026
712c44d
fix: run datatable cloning before workspace fork creation
diegoimbert Mar 23, 2026
bc8eb0e
nit disable fork admins
diegoimbert Mar 24, 2026
6221868
nit fix switching workspace prematurely
diegoimbert Mar 24, 2026
f9af035
fix: use source workspace for forkPgDatabase calls during fork
diegoimbert Mar 24, 2026
38f6e6e
feat: update forked workspace datatable settings after fork creation
diegoimbert Mar 24, 2026
54007cb
feat: add forked_from field to DataTable and set it for instance forks
diegoimbert Mar 24, 2026
a3ea32e
nit onFinish
diegoimbert Mar 24, 2026
5a541c1
fix: add forked_from to DataTableSettings OpenAPI schema
diegoimbert Mar 24, 2026
01c3cfe
Merge remote-tracking branch 'origin/main' into fork-datatable-schema…
diegoimbert Mar 24, 2026
7526dd6
feat: track datatable table DDL changes in workspace_diff
diegoimbert Mar 24, 2026
5bb6795
Revert "feat: track datatable table DDL changes in workspace_diff"
diegoimbert Mar 25, 2026
4a91e30
feat: add get_datatable_full_schema endpoint and snapshot schema on fork
diegoimbert Mar 25, 2026
38d7d28
fix duplicate migration key
diegoimbert Mar 25, 2026
e252fc3
fix: set forked_from on datatable config for both instance and resour…
diegoimbert Mar 25, 2026
70cbb64
nits
diegoimbert Mar 25, 2026
0433b0d
feat: drop forked databases on workspace deletion with confirmation UI
diegoimbert Mar 25, 2026
5027642
refactor: extract drop_forked_datatable_databases from delete_workspace
diegoimbert Mar 25, 2026
fec09b6
fix: cast pg char columns to text in FK schema query
diegoimbert Mar 25, 2026
61cb23f
fix: show dbname instead of resource type in fork deletion modal
diegoimbert Mar 25, 2026
815e47c
ui nit
diegoimbert Mar 25, 2026
d7a79d9
refactor: extract drop_custom_instance_database into windmill-common
diegoimbert Mar 25, 2026
48cffa1
feat: add datatable schema diff section to merge UI
diegoimbert Mar 25, 2026
849da08
UI
diegoimbert Mar 26, 2026
0a0deb5
feat: add review drawer with YAML diff and SQL migration runner
diegoimbert Mar 26, 2026
a86008b
refactor: use Monaco DiffEditor for YAML diff in review drawer
diegoimbert Mar 26, 2026
11934e8
nit
diegoimbert Mar 26, 2026
4a0f1e8
Revert "refactor: use Monaco DiffEditor for YAML diff in review drawer"
diegoimbert Mar 26, 2026
6781f63
Revert "feat: add review drawer with YAML diff and SQL migration runner"
diegoimbert Mar 26, 2026
e4a5e86
feat: add review drawer with DiffEditor and SQL migration runner
diegoimbert Mar 26, 2026
4a0b19f
ui nits
diegoimbert Mar 26, 2026
1c476e6
fix: show diff between forked_from schema and changed side
diegoimbert Mar 26, 2026
048aad6
fix: re-fetch target live schema after migration for correct baseline
diegoimbert Mar 26, 2026
f4fe530
revert
diegoimbert Mar 26, 2026
8c4adae
nit auto next
diegoimbert Mar 26, 2026
9afbc1f
feat: add confirmation modal before deploying migration to parent
diegoimbert Mar 26, 2026
3f40599
fix: handle missing columns/foreignKeys in schema conversion
diegoimbert Mar 26, 2026
0ae726e
nits
diegoimbert Mar 26, 2026
28795ac
refactor: use temp file on disk for pg_dump instead of in-memory string
diegoimbert Mar 27, 2026
fd60dd1
Don't replace postgres dbname
diegoimbert Mar 27, 2026
bef700b
fix: add validation to drop_custom_instance_database and use source d…
diegoimbert Mar 27, 2026
8321ccc
refactor: type DataTable.forked_from as DataTableForkedFrom struct
diegoimbert Mar 27, 2026
85d388b
refactor: simplify fork_pg_database to take source + target_dbname
diegoimbert Mar 27, 2026
a3db90f
dead code
diegoimbert Mar 27, 2026
6374ce8
feat: enforce schema_and_data admin-only and extract create_custom_in…
diegoimbert Mar 27, 2026
b090f87
refactor: rename fork_pg_database to import_pg_database with source/t…
diegoimbert Mar 27, 2026
e0654e3
nit
diegoimbert Mar 27, 2026
f6978bb
refactor: remove original_dbname/original_resource from forked_from, …
diegoimbert Mar 27, 2026
7c0af24
nit
diegoimbert Mar 27, 2026
3a17149
fix: resolve forked dbname from fork workspace when dropping resource…
diegoimbert Mar 27, 2026
68df399
nits
diegoimbert Mar 27, 2026
fbc0760
fix: always clean up global_settings even if database doesn't exist
diegoimbert Mar 27, 2026
af56dec
fix: check datatable resource_type from config instead of URL prefix
diegoimbert Mar 27, 2026
77f5a2c
fix: wrap PG default value expressions in braces to prevent CAST quoting
diegoimbert Mar 27, 2026
e4b7e2b
Revert "fix: wrap PG default value expressions in braces to prevent C…
diegoimbert Mar 27, 2026
bd8f071
refactor: reuse columnDefToTableEditorValuesColumn for default value …
diegoimbert Mar 27, 2026
e326197
fix: store raw API schema in forked_from to avoid double transformation
diegoimbert Mar 27, 2026
2a67b96
Revert "fix: store raw API schema in forked_from to avoid double tran…
diegoimbert Mar 27, 2026
3abb400
Revert "refactor: reuse columnDefToTableEditorValuesColumn for defaul…
diegoimbert Mar 27, 2026
ad0db6c
fix: validate dbname with strict regex to prevent SQL injection
diegoimbert Mar 27, 2026
63013f4
fix default value
diegoimbert Mar 27, 2026
d6d7f52
Merge remote-tracking branch 'origin/main' into fork-datatable-schema…
diegoimbert Mar 31, 2026
52894e5
always validate dbname
diegoimbert Mar 31, 2026
a026913
refactor: move get_datatable_full_schema structs and logic to query_b…
diegoimbert Mar 31, 2026
a674654
refactor: split import_pg_database into create_pg_database + import_p…
diegoimbert Mar 31, 2026
5a1f8da
refactor: extract drop_forked_datatable_databases into its own route
diegoimbert Mar 31, 2026
0521fea
fix: require admin when using $res: resource paths in import_pg_database
diegoimbert Mar 31, 2026
a6b247b
fix: use UserDB for $res: resource access and restrict dbname creation
diegoimbert Apr 1, 2026
8a37d6a
fix: refuse to drop forked databases unless name starts with wm_fork_
diegoimbert Apr 1, 2026
202632c
refactor: remove resolve_pg_source, use resolve_pg_source_checked eve…
diegoimbert Apr 1, 2026
be1d1c3
Fix permissions
diegoimbert Apr 1, 2026
f0a5d6c
Merge remote-tracking branch 'origin/main' into fork-datatable-schema…
diegoimbert Apr 1, 2026
729cde1
sqlx prepare
diegoimbert Apr 1, 2026
0bb398a
compilation nits
diegoimbert Apr 1, 2026
c6eb952
sqlx prepare
diegoimbert Apr 1, 2026
99544e9
sqlx prepare
diegoimbert Apr 1, 2026
838e982
wrong route syntax
diegoimbert Apr 1, 2026
ab683e6
fix: allow workspace owner to edit datatable config for fork setup
diegoimbert Apr 1, 2026
1b89544
Revert "fix: allow workspace owner to edit datatable config for fork …
diegoimbert Apr 1, 2026
61f6aba
refactor: move datatable fork setup into create_workspace_fork backend
diegoimbert Apr 1, 2026
0b119d1
fix: snapshot schema in backend during fork instead of frontend
diegoimbert Apr 1, 2026
4acea44
fix: use get_resource_value_interpolated_internal for $res: to resolv…
diegoimbert Apr 1, 2026
2ca9744
nit
diegoimbert Apr 1, 2026
61beecb
sqlx prepare
diegoimbert Apr 1, 2026
a7e5cbf
Merge remote-tracking branch 'origin/main' into fork-datatable-schema…
diegoimbert Apr 1, 2026
f288321
fix: add permission check to drop_forked_datatable_databases, validat…
diegoimbert Apr 1, 2026
df44834
nit CLI
diegoimbert Apr 1, 2026
f02ae8d
Rename to ws_specific
diegoimbert Apr 1, 2026
8a6db48
sqlx prepare
diegoimbert Apr 1, 2026
956dd60
nit always validate dbname
diegoimbert Apr 1, 2026
9ef1ad3
fix: include foreign keys in CREATE TABLE migration for added tables
diegoimbert Apr 1, 2026
c0cb3f3
fix: detect nextval defaults and use SERIAL/BIGSERIAL types in CREATE…
diegoimbert Apr 1, 2026
99f6a22
Merge branch 'main' into fork-datatable-schema-export
diegoimbert Apr 1, 2026
1fd27ef
Update frontend/src/lib/components/DBManagerDrawer.svelte
diegoimbert Apr 2, 2026
5da6e79
Update backend/windmill-common/src/lib.rs
diegoimbert Apr 2, 2026
70cd258
Update backend/windmill-common/src/lib.rs
diegoimbert Apr 2, 2026
67c45af
fix: sort foreign keys by constraint name for deterministic schema ou…
diegoimbert Apr 2, 2026
814bc1f
Merge remote-tracking branch 'origin/main' into fork-datatable-schema…
diegoimbert Apr 7, 2026
07d5ea1
sqlx prepare
diegoimbert Apr 7, 2026
04e16a0
rename migration to update timestamp
diegoimbert Apr 7, 2026
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
10 changes: 9 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -162,11 +162,19 @@ ENV PATH /usr/local/bin:/root/.local/bin:/tmp/.local/bin:$PATH


RUN apt-get update \
&& apt-get install -y --no-install-recommends netbase tzdata ca-certificates wget curl jq unzip build-essential unixodbc xmlsec1 software-properties-common tini \
&& apt-get install -y --no-install-recommends netbase tzdata ca-certificates wget curl jq unzip build-essential unixodbc xmlsec1 software-properties-common tini gnupg lsb-release \
&& if echo "$features" | grep -q "ee"; then apt-get install -y --no-install-recommends libsasl2-modules-gssapi-mit krb5-user; fi \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

# Install latest PostgreSQL client (pg_dump) from official PostgreSQL apt repository
RUN curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-archive-keyring.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends postgresql-client \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

RUN if [ "$WITH_GIT" = "true" ]; then \
apt-get update -y \
&& apt-get install -y git \
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions backend/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE resource DROP COLUMN IF EXISTS ws_specific;
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-- Add ws_specific flag to resource table.
-- When true, the resource is excluded from workspace diff comparisons (e.g. auto-created resources during fork).
ALTER TABLE resource ADD COLUMN IF NOT EXISTS ws_specific BOOLEAN NOT NULL DEFAULT false;
16 changes: 16 additions & 0 deletions backend/windmill-api-settings/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@ pub fn global_service() -> Router {
"/setup_custom_instance_pg_database/{name}",
post(setup_custom_instance_pg_database),
)
.route(
"/drop_custom_instance_pg_database/{name}",
post(drop_custom_instance_pg_database),
)
.route(
"/critical_alerts/acknowledge_all",
post(acknowledge_all_critical_alerts),
Expand Down Expand Up @@ -1179,6 +1183,18 @@ async fn setup_custom_instance_pg_database_inner(
Ok(())
}

async fn drop_custom_instance_pg_database(
authed: ApiAuthed,
Extension(db): Extension<DB>,
Path(dbname): Path<String>,
) -> Result<String> {
require_super_admin(&db, &authed.email).await?;

windmill_common::drop_custom_instance_database(&db, &dbname).await?;

Ok(format!("Database '{}' dropped successfully", dbname))
}

// ============================================================================
// Secret Backend Settings (HashiCorp Vault Integration) - Enterprise Edition
// ============================================================================
Expand Down
1 change: 1 addition & 0 deletions backend/windmill-api-workspaces/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ windmill-git-sync.workspace = true
windmill-queue.workspace = true
windmill-api-jobs.workspace = true
windmill-dep-map.workspace = true
windmill-store.workspace = true

axum.workspace = true
chrono.workspace = true
Expand Down
Loading
Loading