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