Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

feat: SQS triggers #5182

Merged
merged 61 commits into from
Feb 18, 2025
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
76a66e8
feat: first commit
dieriba Jan 31, 2025
53666e2
Merge branch 'dieri/sqs-trigger' of github.com:windmill-labs/windmill…
dieriba Jan 31, 2025
21c22ae
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 1, 2025
633f9a6
fix: npm check
dieriba Feb 1, 2025
b59ae70
fix: openapi file
dieriba Feb 1, 2025
669b7d8
feat: update openapi and migration
dieriba Feb 1, 2025
a600fd9
feat: basic implementation done
dieriba Feb 2, 2025
9ff4f03
fix: fix: no used function when no feature
dieriba Feb 2, 2025
b0871e4
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 3, 2025
17507fe
feat: capture done
dieriba Feb 3, 2025
4fc1004
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 3, 2025
9f780c9
Update capture.rs
dieriba Feb 3, 2025
dff364b
nits: change sqs trigger
dieriba Feb 4, 2025
717b64c
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 4, 2025
bedf56e
fix: make migration great again
dieriba Feb 5, 2025
7a94af0
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 5, 2025
45ec52b
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 5, 2025
82df632
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 6, 2025
e78885b
feat: add message attributes
dieriba Feb 7, 2025
73f51a2
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 7, 2025
2a6dee3
feat: nits: fix error messages, remove console.log and add try catch
dieriba Feb 7, 2025
4a43132
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 7, 2025
97ed47f
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 7, 2025
6b9ee58
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 9, 2025
c0e07f4
update sqs icon and ee feature for sqs_trigger
dieriba Feb 9, 2025
c999d3b
Merge branch 'main' into dieri/sqs-trigger
HugoCasa Feb 10, 2025
9e54717
update: change sqs name casing and added test connection button
dieriba Feb 10, 2025
87ab24b
nits: update Icon and add create from template button
dieriba Feb 10, 2025
6996278
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 10, 2025
8244777
fix: ci build and error compilation
dieriba Feb 10, 2025
2679e57
update migration type sqs
dieriba Feb 10, 2025
439f06c
update link on create from template button for sqs, add archive in wo…
dieriba Feb 11, 2025
760d58a
fix: ci
dieriba Feb 11, 2025
5f910e2
Update SqsTriggerEditorInner.svelte
dieriba Feb 11, 2025
7c9d80f
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 11, 2025
206e8a8
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 11, 2025
fcb9faf
add link to docs, use generic function for resource and fix import error
dieriba Feb 11, 2025
a4c3035
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 11, 2025
c7fd525
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 11, 2025
cf56440
chore: update .github ci
dieriba Feb 11, 2025
f1fa83b
nits: remove empty
dieriba Feb 11, 2025
2b12d84
update to match ee repo changement
dieriba Feb 12, 2025
0e64a70
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 12, 2025
8d8475e
Update backend/windmill-api/src/resources.rs
dieriba Feb 12, 2025
85e221c
add sqs handling for the cli and refacoring sqsEditorInner
dieriba Feb 12, 2025
f8e8d7f
Update cli/sync.ts
dieriba Feb 12, 2025
bdd8f2c
fix: add break to switch statement for sqs case
dieriba Feb 12, 2025
5d0b1a0
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 12, 2025
2c35bdb
fix: display aws_resource_path when retrieve or create a new trigger
dieriba Feb 12, 2025
c4d56f1
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 12, 2025
d36188a
rework sqs ui, fix postgres optional port
dieriba Feb 13, 2025
a4dc39c
fix: ci
dieriba Feb 13, 2025
217b0fe
update ui for trigger
dieriba Feb 14, 2025
42a1732
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 14, 2025
91bd134
update repo ref and specific
dieriba Feb 14, 2025
0d0ada6
feat: add ready endpoints for workers to enterprise
rubenfiszel Feb 18, 2025
d9d59e8
update ref
dieriba Feb 18, 2025
c3f2b25
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 18, 2025
41901c4
Merge branch 'main' into dieri/sqs-trigger
rubenfiszel Feb 18, 2025
7a02f44
Update frontend/src/lib/script_helpers.ts
dieriba Feb 18, 2025
2d4a292
Merge branch 'main' into dieri/sqs-trigger
dieriba Feb 18, 2025
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
24 changes: 24 additions & 0 deletions backend/Cargo.lock

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

2 changes: 2 additions & 0 deletions backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ mssql = ["windmill-worker/mssql"]
bigquery = ["windmill-worker/bigquery"]
websocket = ["windmill-api/websocket"]
postgres_trigger = ["windmill-api/postgres_trigger"]
sqs_trigger = ["windmill-api/sqs_trigger"]
python = ["windmill-worker/python"]
smtp = ["windmill-api/smtp", "windmill-common/smtp"]
csharp = ["windmill-worker/csharp"]
Expand Down Expand Up @@ -306,6 +307,7 @@ datafusion = "39.0.0"
object_store = { version = "0.10.0", features = ["aws", "azure"] }
openidconnect = { version = "4.0.0-rc.1" }
aws-config = "^1"
aws-sdk-sqs = "1.57.0"
aws-sdk-sts = "^1"

crc = "^3"
Expand Down
2 changes: 2 additions & 0 deletions backend/migrations/20250130184358_sqs_trigger.down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- Add down migration script here
DROP TABLE IF EXISTS sqs_trigger;
69 changes: 69 additions & 0 deletions backend/migrations/20250130184358_sqs_trigger.up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
-- Add up migration script here
CREATE TABLE sqs_trigger(
path VARCHAR(255) NOT NULL,
queue_url VARCHAR(255) NOT NULL,
aws_resource_path VARCHAR(255) NOT NULL,
message_attributes TEXT[],
script_path VARCHAR(255) NOT NULL,
is_flow BOOLEAN NOT NULL,
workspace_id VARCHAR(50) NOT NULL,
edited_by VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL,
edited_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
extra_perms JSONB NULL,
error TEXT NULL,
server_id VARCHAR(50) NULL,
last_server_ping TIMESTAMPTZ NULL,
enabled BOOLEAN NOT NULL,
CONSTRAINT PK_sqs_trigger PRIMARY KEY (path,workspace_id),
CONSTRAINT fk_sqs_trigger_workspace FOREIGN KEY (workspace_id)
REFERENCES workspace(id) ON DELETE CASCADE
);

GRANT ALL ON sqs_trigger TO windmill_user;
GRANT ALL ON sqs_trigger TO windmill_admin;

ALTER TABLE sqs_trigger ENABLE ROW LEVEL SECURITY;

CREATE POLICY admin_policy ON sqs_trigger FOR ALL TO windmill_admin USING (true);

CREATE POLICY see_folder_extra_perms_user_select ON sqs_trigger FOR SELECT TO windmill_user
USING (SPLIT_PART(sqs_trigger.path, '/', 1) = 'f' AND SPLIT_PART(sqs_trigger.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[]));
CREATE POLICY see_folder_extra_perms_user_insert ON sqs_trigger FOR INSERT TO windmill_user
WITH CHECK (SPLIT_PART(sqs_trigger.path, '/', 1) = 'f' AND SPLIT_PART(sqs_trigger.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[]));
CREATE POLICY see_folder_extra_perms_user_update ON sqs_trigger FOR UPDATE TO windmill_user
USING (SPLIT_PART(sqs_trigger.path, '/', 1) = 'f' AND SPLIT_PART(sqs_trigger.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[]));
CREATE POLICY see_folder_extra_perms_user_delete ON sqs_trigger FOR DELETE TO windmill_user
USING (SPLIT_PART(sqs_trigger.path, '/', 1) = 'f' AND SPLIT_PART(sqs_trigger.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[]));

CREATE POLICY see_own ON sqs_trigger FOR ALL TO windmill_user
USING (SPLIT_PART(sqs_trigger.path, '/', 1) = 'u' AND SPLIT_PART(sqs_trigger.path, '/', 2) = current_setting('session.user'));
CREATE POLICY see_member ON sqs_trigger FOR ALL TO windmill_user
USING (SPLIT_PART(sqs_trigger.path, '/', 1) = 'g' AND SPLIT_PART(sqs_trigger.path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[]));

CREATE POLICY see_extra_perms_user_select ON sqs_trigger FOR SELECT TO windmill_user
USING (extra_perms ? CONCAT('u/', current_setting('session.user')));
CREATE POLICY see_extra_perms_user_insert ON sqs_trigger FOR INSERT TO windmill_user
WITH CHECK ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean);
CREATE POLICY see_extra_perms_user_update ON sqs_trigger FOR UPDATE TO windmill_user
USING ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean);
CREATE POLICY see_extra_perms_user_delete ON sqs_trigger FOR DELETE TO windmill_user
USING ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean);

CREATE POLICY see_extra_perms_groups_select ON sqs_trigger FOR SELECT TO windmill_user
USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]);
CREATE POLICY see_extra_perms_groups_insert ON sqs_trigger FOR INSERT TO windmill_user
WITH CHECK (exists(
SELECT key, value FROM jsonb_each_text(extra_perms)
WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[])
AND value::boolean));
CREATE POLICY see_extra_perms_groups_update ON sqs_trigger FOR UPDATE TO windmill_user
USING (exists(
SELECT key, value FROM jsonb_each_text(extra_perms)
WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[])
AND value::boolean));
CREATE POLICY see_extra_perms_groups_delete ON sqs_trigger FOR DELETE TO windmill_user
USING (exists(
SELECT key, value FROM jsonb_each_text(extra_perms)
WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[])
AND value::boolean));
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-- Add down migration script here
DROP TYPE TRIGGER_KIND;
CREATE TYPE TRIGGER_KIND AS ENUM ('webhook', 'http', 'websocket', 'kafka', 'email');
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- Add up migration script here
ALTER TYPE TRIGGER_KIND ADD VALUE 'sqs';
5 changes: 4 additions & 1 deletion backend/windmill-api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ oauth2 = ["dep:async-oauth2"]
http_trigger = ["dep:matchit"]
static_frontend = ["dep:rust-embed"]
postgres_trigger = ["dep:rust-postgres", "dep:pg_escape", "dep:byteorder", "dep:thiserror", "dep:rust_decimal", "dep:rust-postgres-native-tls"]
sqs_trigger = ["dep:aws-sdk-sqs", "dep:thiserror", "dep:aws-config"]

[dependencies]
windmill-queue.workspace = true
Expand Down Expand Up @@ -117,4 +118,6 @@ pg_escape = { workspace = true, optional = true }
byteorder = { workspace = true, optional = true }
thiserror = { workspace = true, optional = true }
rust_decimal = { workspace = true, optional = true }
rust-postgres-native-tls = { workspace = true, optional = true}
rust-postgres-native-tls = { workspace = true, optional = true}
aws-sdk-sqs = { workspace = true, optional = true }
aws-config = { workspace = true, optional = true}
Loading