Skip to content

Commit 7488883

Browse files
authored
image promotion migration (#4992)
1 parent d0f6c3c commit 7488883

4 files changed

+147
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DELETE FROM "public"."casbin_rule" WHERE ("p_type" = 'p' AND "v0" = 'role:super-admin___' AND "v1" = 'artifact' AND "v2" = '*' AND "v3" = '*' AND "v4" = 'allow' AND "v5" = '');
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
INSERT INTO "public"."casbin_rule" ("p_type", "v0", "v1", "v2", "v3", "v4", "v5") VALUES ('p', 'role:super-admin___', 'artifact', '*', '*', 'allow', '');
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
ALTER TABLE request_approval_user_data DROP COLUMN "request_type";
2+
3+
ALTER TABLE request_approval_user_data RENAME TO deployment_approval_user_data;
4+
5+
ALTER TABLE deployment_approval_user_data
6+
ADD CONSTRAINT deployment_approval_user_data_approval_request_id_fkey
7+
FOREIGN KEY ("approval_request_id")
8+
REFERENCES "public"."deployment_approval_request" ("id");
9+
10+
DROP INDEX unique_user_request_action;
11+
12+
ALTER TABLE "resource_filter_evaluation_audit" DROP COLUMN "filter_type";
13+
14+
DROP INDEX IF EXISTS unique_user_request_action;
15+
16+
ALTER TABLE "resource_filter_evaluation_audit" DROP COLUMN "filter_type";
17+
18+
DROP SEQUENCE IF EXISTS id_artifact_promotion_approval_request;
19+
20+
DROP TABLE "public"."artifact_promotion_approval_request";
21+
22+
DROP INDEX idx_unique_artifact_promoted_to_destination;
23+
24+
DELETE from rbac_policy_resource_detail where resource = 'artifact';
25+
26+
DELETE from default_rbac_role_data where role='artifactPromoter';
27+
28+
DELETE from event where id=7;
29+
30+
DELETE from notification_templates where event_type_id=7;
31+
32+
33+
34+
35+
36+
37+
38+
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
-- 1 for deployment approval request, 2 for artifact promotion approval request
2+
ALTER TABLE deployment_approval_user_data ADD COLUMN "request_type" integer NOT NULL DEFAULT 1;
3+
4+
-- drop the constraint as this is no longer valid
5+
ALTER TABLE deployment_approval_user_data DROP CONSTRAINT deployment_approval_user_data_approval_request_id_fkey;
6+
DROP INDEX deployment_approval_user_data_approval_request_id_user_id_key;
7+
8+
-- rename deployment_approval_user_data table to request_approval_user_data
9+
ALTER TABLE deployment_approval_user_data RENAME TO request_approval_user_data;
10+
11+
-- user can take action only once on any approval_request
12+
CREATE UNIQUE INDEX "unique_user_request_action"
13+
ON request_approval_user_data(user_id,approval_request_id,request_type);
14+
-- 1 for resource_filter, 2 for artifact promotion policy filter evaluation
15+
ALTER TABLE resource_filter_evaluation_audit ADD COLUMN "filter_type" integer DEFAULT 1;
16+
17+
18+
19+
-- create artifact promotion approval request table
20+
CREATE SEQUENCE IF NOT EXISTS id_artifact_promotion_approval_request;
21+
CREATE TABLE IF NOT EXISTS public.artifact_promotion_approval_request
22+
(
23+
"created_by" int4 NOT NULL,
24+
"updated_by" int4 NOT NULL,
25+
"id" int NOT NULL DEFAULT nextval('id_artifact_promotion_approval_request'::regclass),
26+
-- foreign key to artifact_promotion_policy
27+
"policy_id" int NOT NULL,
28+
-- foreign key to filter_evaluation_audit
29+
"policy_evaluation_audit_id" int NOT NULL,
30+
-- foreign key to ci_artifact
31+
"artifact_id" int NOT NULL,
32+
"source_pipeline_id" int NOT NULL,
33+
-- CI_PIPELINE(0) or WEBHOOK(1) or CD_PIPELINE(2)
34+
"source_type" int NOT NULL,
35+
"destination_pipeline_id" int NOT NULL,
36+
-- CD_PIPELINE(2) , currently not defining this column as destination is always CD_PIPELINE
37+
-- "destination_type" int NOT NULL,
38+
"status" int NOT NULL,
39+
"created_on" timestamptz NOT NULL,
40+
"updated_on" timestamptz NOT NULL,
41+
PRIMARY KEY ("id"),
42+
CONSTRAINT "artifact_promotion_approval_request_policy_id_fkey" FOREIGN KEY ("policy_id") REFERENCES "public"."global_policy" ("id"),
43+
CONSTRAINT "artifact_promotion_approval_request_artifact_id_fkey" FOREIGN KEY ("artifact_id") REFERENCES "public"."ci_artifact" ("id"),
44+
CONSTRAINT "artifact_promotion_approval_request_policy_evaluation_audit_id_fkey" FOREIGN KEY ("policy_evaluation_audit_id") REFERENCES "public"."resource_filter_evaluation_audit" ("id")
45+
);
46+
47+
48+
CREATE UNIQUE INDEX "idx_unique_artifact_promoted_to_destination"
49+
ON artifact_promotion_approval_request(artifact_id,destination_pipeline_id)
50+
WHERE (status = 3 and status = 1);
51+
52+
-- custom role queries
53+
insert into rbac_policy_resource_detail
54+
(resource,
55+
policy_resource_value,
56+
allowed_actions,
57+
resource_object,
58+
eligible_entity_access_types,
59+
deleted,created_on,
60+
created_by,
61+
updated_on,
62+
updated_by)
63+
values ('artifact',
64+
'{"value": "artifact", "indexKeyMap": {}}','{promote}','{"value": "%/%/%", "indexKeyMap": {"0": "TeamObj", "2": "EnvObj", "4": "AppObj"}}','{apps/devtron-app}',
65+
false,
66+
now(),
67+
1,
68+
now(),
69+
1);
70+
71+
72+
73+
insert into default_rbac_role_data (role,
74+
default_role_data,
75+
created_on,
76+
created_by,
77+
updated_on,
78+
updated_by,
79+
enabled)
80+
VALUES ('artifactPromoter',
81+
'{"entity": "apps", "roleName": "artifactPromoter", "accessType": "devtron-app", "roleDescription": "can promote artifact for a particular CD Pipeline", "roleDisplayName": "Artifact Promoter", "policyResourceList": [{"actions": ["promote"],
82+
"resource": "artifact"}], "updatePoliciesForExistingProvidedRoles": false}',
83+
now(),
84+
1,
85+
now(),
86+
1,
87+
true);
88+
89+
90+
INSERT INTO public.event (id, event_type, description) VALUES (7, 'PROMOTION APPROVAL', '');
91+
92+
93+
INSERT INTO "public"."notification_templates" (channel_type, node_type, event_type_id, template_name, template_payload)
94+
VALUES ('smtp', 'CD', 7, 'image promotion smtp template', '{
95+
"from": "{{fromEmail}}",
96+
"to": "{{toEmail}}",
97+
"subject": "🛎️ Image Promotion Approval Requested | Application: {{appName}} | Target environment: {{envName}}",
98+
"html": "<table cellpadding=\"0\" style=\"font-family:Arial,Verdana,Helvetica;width:600px;height:485px;border-collapse:inherit;border-spacing:0;border:1px solid #d0d4d9;border-radius:8px;padding:16px 20px;margin:20px auto;box-shadow:0 0 8px 0 rgba(0,0,0,.1)\"><tr><td colspan=\"3\"><div style=\"padding-bottom:16px;margin-bottom:20px;border-bottom:1px solid #edf1f5;max-width:600px\"><img style=\"max-width:122px\" src=\"https://devtron-public-asset.s3.us-east-2.amazonaws.com/images/devtron/devtron-logo.png\" alt=\"ci-triggered\"></div></td></tr><tr><td colspan=\"3\"><div style=\"background-color:#e5f2ff;border-top-left-radius:8px;border-top-right-radius:8px;padding:20px 20px 16px 20px;display:flex;justify-content:space-between\"><div style=\"width:90%\"><div style=\"font-size:16px;line-height:24px;font-weight:600;margin-bottom:6px;color:#000a14\">Image promotion approval request</div><span style=\"font-size:14px;line-height:20px;color:#000a14\">{{eventTime}}</span><br><div><span style=\"font-size:14px;line-height:20px;color:#000a14\">by</span><span style=\"font-size:14px;line-height:20px;color:#06c;margin-left:4px\">{{triggeredBy}}</span></div></div><div><img src=\"https://cdn.devtron.ai/images/img_build_notification.png\" style=\"height:72px;width:72px\"></div></div></td></tr><tr><td colspan=\"3\"><div style=\"display:flex\"><div style=\"background-color:#e5f2ff;border-bottom-left-radius:8px;padding:0 0 20px 20px\"><a href=\"{{&artifactPromotionApprovalLink}}\" style=\"height:32px;padding:7px 12px;line-height:32px;font-size:12px;font-weight:600;border-radius:4px;text-decoration:none;outline:0;min-width:64px;text-transform:capitalize;text-align:center;background:#06c;color:#fff;border:1px solid transparent;cursor:pointer\">Approve</a></div><div style=\"width:90%;background-color:#e5f2ff;border-bottom-right-radius:8px;padding:0 0 20px 8px\"><a href=\"{{&artifactPromotionRequestViewLink}}\" style=\"height:32px;padding:7px 12px;line-height:32px;font-size:12px;font-weight:600;border-radius:4px;text-decoration:none;outline:0;min-width:64px;text-transform:capitalize;text-align:center;border:1px solid #d0d4d9;color:#06c;cursor:pointer;background-color:#fff\">View Request</a></div></div></td></tr><tr></tr><tr><td><br></td></tr><tr><td><div style=\"color:#3b444c;font-size:13px\">Application</div></td></tr><tr><td><div style=\"color:#000a14;font-size:14px\">{{appName}}</div></td></tr><tr><td><br></td></tr><tr><td><div style=\"color:#3b444c;font-size:13px\">Source</div></td><td colspan=\"2\"><div style=\"color:#3b444c;font-size:13px\">Target environment</div></td></tr><tr><td><div style=\"color:#000a14;font-size:14px\">{{promotionArtifactSource}}</div></td><td><div style=\"color:#000a14;font-size:14px\">{{envName}}</div></td></tr><tr><td colspan=\"3\"><div style=\"font-weight:600;margin-top:20px;width:100%;border-top:1px solid #edf1f5;padding:16px 0 12px;font-size:14px\">Image Details</div></td></tr><tr><td><div style=\"color:#3b444c;font-size:13px\">Image tag</div></td></tr><tr><td><div style=\"color:#000a14;font-size:14px\">{{imageTag}}</div></td></tr><tr><td><br></td></tr><tr><td colspan=\"3\"><div style=\"color:#3b444c;font-size:13px;display:{{commentDisplayStyle}};\">Comment</div></td></tr><tr><td colspan=\"3\"><div style=\"color:#000a14;font-size:14px;display:{{commentDisplayStyle}};\">{{comment}}</div></td></tr><tr><td><br></td></tr><tr><td colspan=\"3\"><div style=\"color:#3b444c;font-size:13px;display:{{tagDisplayStyle}};\">Tags</div></td></tr><tr><td colspan=\"3\"><div style=\"color:#000a14;font-size:14px;display:{};\">{{tags}}</div></td></tr><tr><td colspan=\"3\"><div style=\"border-top:1px solid #edf1f5;margin:20px 0 16px 0;height:1px\"></div></td></tr><tr><td colspan=\"2\" style=\"display:flex\"><span><a href=\"https://twitter.com/DevtronL\" target=\"_blank\" style=\"cursor:pointer;text-decoration:none;padding-right:12px;display:flex\"><div><img style=\"width:20px\" src=\"https://cdn.devtron.ai/images/twitter_social_dark.png\"></div></a></span><span><a href=\"https://www.linkedin.com/company/devtron-labs/mycompany/\" target=\"_blank\" style=\"cursor:pointer;text-decoration:none;padding-right:12px;display:flex\"><div><img style=\"width:20px\" src=\"https://cdn.devtron.ai/images/linkedin_social_dark.png\"></div></a></span><span><a href=\"https://devtron.ai/blog/\" target=\"_blank\" style=\"color:#000a14;font-size:13px;line-height:20px;cursor:pointer;text-decoration:underline;padding-right:12px\">Blog</a></span><span><a href=\"https://devtron.ai/\" target=\"_blank\" style=\"color:#000a14;font-size:13px;line-height:20px;cursor:pointer;text-decoration:underline\">Website</a></span></td><td colspan=\"2\" style=\"text-align:right\"><div style=\"color:#767d84;font-size:13px;line-height:20px\">&copy; Devtron Labs 2024</div></td></tr></table>"
99+
}');
100+
101+
INSERT INTO "public"."notification_templates" (channel_type, node_type, event_type_id, template_name, template_payload)
102+
VALUES ('ses', 'CD', 7, 'image promotion ses template', '{
103+
"from": "{{fromEmail}}",
104+
"to": "{{toEmail}}",
105+
"subject": "🛎️ Image Promotion Approval Requested | Application: {{appName}} | Target environment: {{envName}}",
106+
"html": "<table cellpadding=\"0\" style=\"font-family:Arial,Verdana,Helvetica;width:600px;height:485px;border-collapse:inherit;border-spacing:0;border:1px solid #d0d4d9;border-radius:8px;padding:16px 20px;margin:20px auto;box-shadow:0 0 8px 0 rgba(0,0,0,.1)\"><tr><td colspan=\"3\"><div style=\"padding-bottom:16px;margin-bottom:20px;border-bottom:1px solid #edf1f5;max-width:600px\"><img style=\"max-width:122px\" src=\"https://devtron-public-asset.s3.us-east-2.amazonaws.com/images/devtron/devtron-logo.png\" alt=\"ci-triggered\"></div></td></tr><tr><td colspan=\"3\"><div style=\"background-color:#e5f2ff;border-top-left-radius:8px;border-top-right-radius:8px;padding:20px 20px 16px 20px;display:flex;justify-content:space-between\"><div style=\"width:90%\"><div style=\"font-size:16px;line-height:24px;font-weight:600;margin-bottom:6px;color:#000a14\">Image promotion approval request</div><span style=\"font-size:14px;line-height:20px;color:#000a14\">{{eventTime}}</span><br><div><span style=\"font-size:14px;line-height:20px;color:#000a14\">by</span><span style=\"font-size:14px;line-height:20px;color:#06c;margin-left:4px\">{{triggeredBy}}</span></div></div><div><img src=\"https://cdn.devtron.ai/images/img_build_notification.png\" style=\"height:72px;width:72px\"></div></div></td></tr><tr><td colspan=\"3\"><div style=\"display:flex\"><div style=\"background-color:#e5f2ff;border-bottom-left-radius:8px;padding:0 0 20px 20px\"><a href=\"{{&artifactPromotionApprovalLink}}\" style=\"height:32px;padding:7px 12px;line-height:32px;font-size:12px;font-weight:600;border-radius:4px;text-decoration:none;outline:0;min-width:64px;text-transform:capitalize;text-align:center;background:#06c;color:#fff;border:1px solid transparent;cursor:pointer\">Approve</a></div><div style=\"width:90%;background-color:#e5f2ff;border-bottom-right-radius:8px;padding:0 0 20px 8px\"><a href=\"{{&artifactPromotionRequestViewLink}}\" style=\"height:32px;padding:7px 12px;line-height:32px;font-size:12px;font-weight:600;border-radius:4px;text-decoration:none;outline:0;min-width:64px;text-transform:capitalize;text-align:center;border:1px solid #d0d4d9;color:#06c;cursor:pointer;background-color:#fff\">View Request</a></div></div></td></tr><tr></tr><tr><td><br></td></tr><tr><td><div style=\"color:#3b444c;font-size:13px\">Application</div></td></tr><tr><td><div style=\"color:#000a14;font-size:14px\">{{appName}}</div></td></tr><tr><td><br></td></tr><tr><td><div style=\"color:#3b444c;font-size:13px\">Source</div></td><td colspan=\"2\"><div style=\"color:#3b444c;font-size:13px\">Target environment</div></td></tr><tr><td><div style=\"color:#000a14;font-size:14px\">{{promotionArtifactSource}}</div></td><td><div style=\"color:#000a14;font-size:14px\">{{envName}}</div></td></tr><tr><td colspan=\"3\"><div style=\"font-weight:600;margin-top:20px;width:100%;border-top:1px solid #edf1f5;padding:16px 0 12px;font-size:14px\">Image Details</div></td></tr><tr><td><div style=\"color:#3b444c;font-size:13px\">Image tag</div></td></tr><tr><td><div style=\"color:#000a14;font-size:14px\">{{imageTag}}</div></td></tr><tr><td><br></td></tr><tr><td colspan=\"3\"><div style=\"color:#3b444c;font-size:13px;display:{{commentDisplayStyle}};\">Comment</div></td></tr><tr><td colspan=\"3\"><div style=\"color:#000a14;font-size:14px;display:{{commentDisplayStyle}};\">{{comment}}</div></td></tr><tr><td><br></td></tr><tr><td colspan=\"3\"><div style=\"color:#3b444c;font-size:13px;display:{{tagDisplayStyle}};\">Tags</div></td></tr><tr><td colspan=\"3\"><div style=\"color:#000a14;font-size:14px;display:{};\">{{tags}}</div></td></tr><tr><td colspan=\"3\"><div style=\"border-top:1px solid #edf1f5;margin:20px 0 16px 0;height:1px\"></div></td></tr><tr><td colspan=\"2\" style=\"display:flex\"><span><a href=\"https://twitter.com/DevtronL\" target=\"_blank\" style=\"cursor:pointer;text-decoration:none;padding-right:12px;display:flex\"><div><img style=\"width:20px\" src=\"https://cdn.devtron.ai/images/twitter_social_dark.png\"></div></a></span><span><a href=\"https://www.linkedin.com/company/devtron-labs/mycompany/\" target=\"_blank\" style=\"cursor:pointer;text-decoration:none;padding-right:12px;display:flex\"><div><img style=\"width:20px\" src=\"https://cdn.devtron.ai/images/linkedin_social_dark.png\"></div></a></span><span><a href=\"https://devtron.ai/blog/\" target=\"_blank\" style=\"color:#000a14;font-size:13px;line-height:20px;cursor:pointer;text-decoration:underline;padding-right:12px\">Blog</a></span><span><a href=\"https://devtron.ai/\" target=\"_blank\" style=\"color:#000a14;font-size:13px;line-height:20px;cursor:pointer;text-decoration:underline\">Website</a></span></td><td colspan=\"2\" style=\"text-align:right\"><div style=\"color:#767d84;font-size:13px;line-height:20px\">&copy; Devtron Labs 2024</div></td></tr></table>"
107+
}');

0 commit comments

Comments
 (0)