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\">© 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\">© Devtron Labs 2024</div></td></tr></table>"
107
+ }' );
0 commit comments