vps-deployer 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +151 -0
  3. package/dist/app.d.ts +4 -0
  4. package/dist/app.d.ts.map +1 -0
  5. package/dist/app.js +39 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/db/db.d.ts +5 -0
  8. package/dist/db/db.d.ts.map +1 -0
  9. package/dist/db/db.js +100 -0
  10. package/dist/db/db.js.map +1 -0
  11. package/dist/helpers/arg.helper.d.ts +7 -0
  12. package/dist/helpers/arg.helper.d.ts.map +1 -0
  13. package/dist/helpers/arg.helper.js +28 -0
  14. package/dist/helpers/arg.helper.js.map +1 -0
  15. package/dist/helpers/cmd_executer.helper.d.ts +7 -0
  16. package/dist/helpers/cmd_executer.helper.d.ts.map +1 -0
  17. package/dist/helpers/cmd_executer.helper.js +88 -0
  18. package/dist/helpers/cmd_executer.helper.js.map +1 -0
  19. package/dist/helpers/common.helper.d.ts +2 -0
  20. package/dist/helpers/common.helper.d.ts.map +1 -0
  21. package/dist/helpers/common.helper.js +15 -0
  22. package/dist/helpers/common.helper.js.map +1 -0
  23. package/dist/helpers/config_files.helper.d.ts +2 -0
  24. package/dist/helpers/config_files.helper.d.ts.map +1 -0
  25. package/dist/helpers/config_files.helper.js +44 -0
  26. package/dist/helpers/config_files.helper.js.map +1 -0
  27. package/dist/helpers/create_systemd_service.helper.d.ts +9 -0
  28. package/dist/helpers/create_systemd_service.helper.d.ts.map +1 -0
  29. package/dist/helpers/create_systemd_service.helper.js +40 -0
  30. package/dist/helpers/create_systemd_service.helper.js.map +1 -0
  31. package/dist/helpers/date.helper.d.ts +2 -0
  32. package/dist/helpers/date.helper.d.ts.map +1 -0
  33. package/dist/helpers/date.helper.js +18 -0
  34. package/dist/helpers/date.helper.js.map +1 -0
  35. package/dist/helpers/email.helper.d.ts +11 -0
  36. package/dist/helpers/email.helper.d.ts.map +1 -0
  37. package/dist/helpers/email.helper.js +144 -0
  38. package/dist/helpers/email.helper.js.map +1 -0
  39. package/dist/helpers/logging.helper.d.ts +9 -0
  40. package/dist/helpers/logging.helper.d.ts.map +1 -0
  41. package/dist/helpers/logging.helper.js +32 -0
  42. package/dist/helpers/logging.helper.js.map +1 -0
  43. package/dist/helpers/remove_systemd_service.helper.d.ts +2 -0
  44. package/dist/helpers/remove_systemd_service.helper.d.ts.map +1 -0
  45. package/dist/helpers/remove_systemd_service.helper.js +21 -0
  46. package/dist/helpers/remove_systemd_service.helper.js.map +1 -0
  47. package/dist/helpers/start_systemd_service.helper.d.ts +2 -0
  48. package/dist/helpers/start_systemd_service.helper.d.ts.map +1 -0
  49. package/dist/helpers/start_systemd_service.helper.js +26 -0
  50. package/dist/helpers/start_systemd_service.helper.js.map +1 -0
  51. package/dist/index.d.ts +2 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +132 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/middleware/auth.middleware.d.ts +3 -0
  56. package/dist/middleware/auth.middleware.d.ts.map +1 -0
  57. package/dist/middleware/auth.middleware.js +7 -0
  58. package/dist/middleware/auth.middleware.js.map +1 -0
  59. package/dist/modules/auth/auth.route.d.ts +3 -0
  60. package/dist/modules/auth/auth.route.d.ts.map +1 -0
  61. package/dist/modules/auth/auth.route.js +16 -0
  62. package/dist/modules/auth/auth.route.js.map +1 -0
  63. package/dist/modules/auth/controllers/auth.controller.d.ts +6 -0
  64. package/dist/modules/auth/controllers/auth.controller.d.ts.map +1 -0
  65. package/dist/modules/auth/controllers/auth.controller.js +123 -0
  66. package/dist/modules/auth/controllers/auth.controller.js.map +1 -0
  67. package/dist/modules/auth/views/login.pug +254 -0
  68. package/dist/modules/auth/views/register.pug +298 -0
  69. package/dist/modules/common/views/404.pug +21 -0
  70. package/dist/modules/dashboard/dashboard.route.d.ts +3 -0
  71. package/dist/modules/dashboard/dashboard.route.d.ts.map +1 -0
  72. package/dist/modules/dashboard/dashboard.route.js +29 -0
  73. package/dist/modules/dashboard/dashboard.route.js.map +1 -0
  74. package/dist/modules/dashboard/views/dash.pug +149 -0
  75. package/dist/modules/dashboard/views/layout.pug +94 -0
  76. package/dist/modules/deployer/controllers/deployer.controller.d.ts +6 -0
  77. package/dist/modules/deployer/controllers/deployer.controller.d.ts.map +1 -0
  78. package/dist/modules/deployer/controllers/deployer.controller.js +119 -0
  79. package/dist/modules/deployer/controllers/deployer.controller.js.map +1 -0
  80. package/dist/modules/deployer/deployer.route.d.ts +3 -0
  81. package/dist/modules/deployer/deployer.route.d.ts.map +1 -0
  82. package/dist/modules/deployer/deployer.route.js +13 -0
  83. package/dist/modules/deployer/deployer.route.js.map +1 -0
  84. package/dist/modules/deployer/helper/deployer.d.ts +9 -0
  85. package/dist/modules/deployer/helper/deployer.d.ts.map +1 -0
  86. package/dist/modules/deployer/helper/deployer.js +89 -0
  87. package/dist/modules/deployer/helper/deployer.js.map +1 -0
  88. package/dist/modules/deployer/views/details.pug +157 -0
  89. package/dist/modules/deployer/views/index.pug +108 -0
  90. package/dist/modules/project/controllers/projects.controller.d.ts +12 -0
  91. package/dist/modules/project/controllers/projects.controller.d.ts.map +1 -0
  92. package/dist/modules/project/controllers/projects.controller.js +267 -0
  93. package/dist/modules/project/controllers/projects.controller.js.map +1 -0
  94. package/dist/modules/project/helper/project_file_sys.helper.d.ts +7 -0
  95. package/dist/modules/project/helper/project_file_sys.helper.d.ts.map +1 -0
  96. package/dist/modules/project/helper/project_file_sys.helper.js +93 -0
  97. package/dist/modules/project/helper/project_file_sys.helper.js.map +1 -0
  98. package/dist/modules/project/project.route.d.ts +3 -0
  99. package/dist/modules/project/project.route.d.ts.map +1 -0
  100. package/dist/modules/project/project.route.js +17 -0
  101. package/dist/modules/project/project.route.js.map +1 -0
  102. package/dist/modules/project/views/create.pug +189 -0
  103. package/dist/modules/project/views/details.pug +238 -0
  104. package/dist/modules/project/views/index.pug +114 -0
  105. package/dist/modules/settings/controllers/setting.controller.d.ts +5 -0
  106. package/dist/modules/settings/controllers/setting.controller.d.ts.map +1 -0
  107. package/dist/modules/settings/controllers/setting.controller.js +193 -0
  108. package/dist/modules/settings/controllers/setting.controller.js.map +1 -0
  109. package/dist/modules/settings/settings.route.d.ts +3 -0
  110. package/dist/modules/settings/settings.route.d.ts.map +1 -0
  111. package/dist/modules/settings/settings.route.js +10 -0
  112. package/dist/modules/settings/settings.route.js.map +1 -0
  113. package/dist/modules/settings/views/index.pug +173 -0
  114. package/dist/modules/webhook/controllers/webhook.controller.d.ts +3 -0
  115. package/dist/modules/webhook/controllers/webhook.controller.d.ts.map +1 -0
  116. package/dist/modules/webhook/controllers/webhook.controller.js +72 -0
  117. package/dist/modules/webhook/controllers/webhook.controller.js.map +1 -0
  118. package/dist/modules/webhook/webhook.route.d.ts +3 -0
  119. package/dist/modules/webhook/webhook.route.d.ts.map +1 -0
  120. package/dist/modules/webhook/webhook.route.js +6 -0
  121. package/dist/modules/webhook/webhook.route.js.map +1 -0
  122. package/dist/utils/app_config.d.ts +3 -0
  123. package/dist/utils/app_config.d.ts.map +1 -0
  124. package/dist/utils/app_config.js +5 -0
  125. package/dist/utils/app_config.js.map +1 -0
  126. package/dist/utils/cli.d.ts +2 -0
  127. package/dist/utils/cli.d.ts.map +1 -0
  128. package/dist/utils/cli.js +68 -0
  129. package/dist/utils/cli.js.map +1 -0
  130. package/package.json +80 -0
  131. package/public/favicon.svg +18 -0
  132. package/public/js/deploy.js +36 -0
  133. package/public/js/deployment-details.js +56 -0
  134. package/public/js/login.js +21 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_file_sys.helper.js","sourceRoot":"","sources":["../../../../src/modules/project/helper/project_file_sys.helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
3
+ //# sourceMappingURL=project.route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.route.d.ts","sourceRoot":"","sources":["../../../src/modules/project/project.route.ts"],"names":[],"mappings":"AAeA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAiBxB,eAAe,MAAM,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { Router } from "express";
2
+ import { addCommand, addEnv, createProject, deleteCommand, deleteEnv, deleteProject, listProjects, updateProject, viewCreateProject, viewProjectDetails, } from "./controllers/projects.controller.js";
3
+ import { requireAuth } from "../../middleware/auth.middleware.js";
4
+ const router = Router();
5
+ router.use(requireAuth);
6
+ router.get("/projects", listProjects);
7
+ router.get("/projects/create", viewCreateProject);
8
+ router.post("/projects/create", createProject);
9
+ router.post("/projects/:id/delete", deleteProject);
10
+ router.get("/projects/:id", viewProjectDetails);
11
+ router.post("/projects/:id/update", updateProject);
12
+ router.post("/projects/:id/env", addEnv);
13
+ router.post("/projects/:id/env/:envId/delete", deleteEnv);
14
+ router.post("/projects/:id/commands", addCommand);
15
+ router.post("/projects/:id/commands/:cmdId/delete", deleteCommand);
16
+ export default router;
17
+ //# sourceMappingURL=project.route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.route.js","sourceRoot":"","sources":["../../../src/modules/project/project.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,UAAU,EACV,MAAM,EACN,aAAa,EACb,aAAa,EACb,SAAS,EACT,aAAa,EACb,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AACxB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AACvB,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AACtC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AAClD,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;AAE/C,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;AAEnD,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;AAChD,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;AAEnD,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AACzC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC;AAE1D,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;AAClD,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE,aAAa,CAAC,CAAC;AAEnE,eAAe,MAAM,CAAC"}
@@ -0,0 +1,189 @@
1
+ extends ../../dashboard/views/layout.pug
2
+
3
+ block content
4
+ // Page Header
5
+ .d-flex.justify-content-between.align-items-center.mb-4
6
+ div
7
+ h2.mb-1 Create Project
8
+ p.text-muted.mb-0 Add a new project to deploy on your VPS
9
+ div
10
+ a.btn.btn-outline-secondary(href="/projects")
11
+ i.bi.bi-arrow-left.me-2
12
+ | Back to Projects
13
+
14
+ // Flash Messages
15
+ if error
16
+ .alert.alert-danger.alert-dismissible.fade-show.d-flex.align-items-center.mb-4(role="alert")
17
+ i.bi.bi-exclamation-triangle-fill.me-2
18
+ span.flex-grow-1 #{error}
19
+
20
+
21
+ .row
22
+ .col-lg-8.mb-4
23
+ // Create Project Form
24
+ .card.border-0.shadow-sm
25
+ .card-header.bg-white.border-bottom-0.pt-3
26
+ .d-flex.align-items-center
27
+ i.bi.bi-folder-plus.text-primary.me-2(style="font-size: 1.25rem;")
28
+ h5.mb-0 Project Details
29
+ .card-body
30
+ form(method="POST", action="/projects/create")
31
+ // Project Name
32
+ .mb-3
33
+ label.form-label.fw-semibold(for="name")
34
+ i.bi.bi-tag.me-1
35
+ | Project Name
36
+ input.form-control(
37
+ type="text",
38
+ id="name",
39
+ name="name",
40
+ placeholder="my-awesome-app",
41
+ required,
42
+ autofocus
43
+ )
44
+ small.form-text.text-muted Choose a unique name for your project
45
+
46
+ // GitHub URL
47
+ .mb-3
48
+ label.form-label.fw-semibold(for="github_url")
49
+ i.bi.bi-github.me-1
50
+ | GitHub URL
51
+ input.form-control(
52
+ type="text",
53
+ id="github_url",
54
+ name="github_url",
55
+ placeholder="https://github.com/username/repository.git",
56
+ required
57
+ )
58
+ small.form-text.text-muted Use the .git URL from your GitHub repository
59
+
60
+ // Branch
61
+ .mb-3
62
+ label.form-label.fw-semibold(for="branch_name")
63
+ i.bi.bi-git-branch.me-1
64
+ | Branch
65
+ input.form-control(
66
+ type="text",
67
+ id="branch_name",
68
+ name="branch_name",
69
+ placeholder="main",
70
+ required
71
+ )
72
+ small.form-text.text-muted The branch to deploy from
73
+
74
+ // Checkboxes
75
+ .mb-3
76
+ .form-check.mb-2
77
+ input.form-check-input(
78
+ type="checkbox",
79
+ name="receive_email_notf",
80
+ id="receive_email_notf"
81
+ )
82
+ label.form-check-label.fw-semibold(for="receive_email_notf")
83
+ i.bi.bi-envelope.me-1
84
+ | Receive Email Notifications
85
+ small.form-text.text-muted.d-block.ms-4 Get updates about deployment status
86
+
87
+ .form-check
88
+ input.form-check-input(
89
+ type="checkbox",
90
+ name="auto_deploy",
91
+ id="auto_deploy"
92
+ )
93
+ label.form-check-label.fw-semibold(for="auto_deploy")
94
+ i.bi.bi-rocket.me-1
95
+ | Enable Auto Deploy
96
+ small.form-text.text-muted.d-block.ms-4 Automatically deploy on GitHub push
97
+
98
+ hr.my-4
99
+
100
+ // Form Actions
101
+ .d-flex.gap-2
102
+ button.btn.btn-primary(type="submit")
103
+ i.bi.bi-check-lg.me-2
104
+ | Create Project
105
+ a.btn.btn-outline-secondary(href="/projects")
106
+ | Cancel
107
+
108
+ .col-lg-4.mb-4
109
+ // Info Note Card
110
+ .card.border-0.shadow-sm
111
+ .card-header.bg-white.border-bottom-0.pt-3
112
+ .d-flex.align-items-center
113
+ i.bi.bi-info-circle.text-warning.me-2(style="font-size: 1.25rem;")
114
+ h5.mb-0 Important Setup
115
+ .card-body
116
+ .alert.alert-warning.p-3.mb-0
117
+ strong
118
+ i.bi.bi-exclamation-triangle-fill.me-1
119
+ | SSH Authentication Required
120
+ hr
121
+ p.small.mb-2 The repository will be cloned using:
122
+ code.git-url.text-small git clone git@github.com:username/repository.git
123
+ hr
124
+ strong Setup SSH on your VPS:
125
+ ol.small.mt-2.ps-3.mb-0
126
+ li.mb-2
127
+ | Generate SSH key:
128
+ br
129
+ code ssh-keygen -t ed25519 -C "your_email@example.com"
130
+ li.mb-2
131
+ | Show public key:
132
+ br
133
+ code cat ~/.ssh/id_ed25519.pub
134
+ li.mb-2
135
+ | Add to GitHub:
136
+ br
137
+ a.text-decoration-none(href="https://github.com/settings/keys", target="_blank")
138
+ i.bi.bi-box-arrow-up-right.me-1
139
+ | github.com/settings/keys
140
+ li.mb-2
141
+ | Test connection:
142
+ br
143
+ code ssh -T git@github.com
144
+
145
+ // Additional styles
146
+ style.
147
+ .card {
148
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
149
+ }
150
+
151
+ .card:hover {
152
+ transform: translateY(-2px);
153
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.08) !important;
154
+ }
155
+
156
+ .form-control:focus {
157
+ border-color: #0066ff;
158
+ box-shadow: 0 0 0 3px rgba(0, 102, 255, 0.1);
159
+ }
160
+
161
+ .alert {
162
+ border-radius: 8px;
163
+ border: none;
164
+ }
165
+
166
+ .alert-danger {
167
+ background: #fff5f5;
168
+ color: #c62828;
169
+ border-left: 4px solid #c62828;
170
+ }
171
+
172
+ .alert-warning {
173
+ background: #fff9e6;
174
+ color: #856404;
175
+ border-left: 4px solid #ffc107;
176
+ }
177
+
178
+ code {
179
+ background: #f8f9fa;
180
+ padding: 0.2rem 0.4rem;
181
+ border-radius: 4px;
182
+ font-size: 0.8rem;
183
+ color: #d63384;
184
+ }
185
+
186
+ .git-url {
187
+ word-break: break-all;
188
+ display: inline-block;
189
+ }
@@ -0,0 +1,238 @@
1
+ extends ../../dashboard/views/layout.pug
2
+
3
+ block content
4
+ // Page Header
5
+ .d-flex.justify-content-between.align-items-center.mb-4
6
+ div
7
+ h2.mb-1 Project Details
8
+ p.text-muted.mb-0 Manage your project configuration and deployment
9
+ div
10
+ a.btn.btn-outline-secondary(href="/projects")
11
+ i.bi.bi-arrow-left.me-2
12
+ | Back to Projects
13
+
14
+ .row
15
+ .col-lg-6.mb-4
16
+ // ================= PROJECT INFO & WEBHOOK =================
17
+ .card.border-0.shadow-sm.mb-4
18
+ .card-header.bg-white.border-bottom-0.pt-3
19
+ .d-flex.align-items-center
20
+ i.bi.bi-info-circle.text-primary.me-2(style="font-size: 1.25rem;")
21
+ h5.mb-0 Project Information
22
+ .card-body
23
+ // Webhook Info
24
+ .alert.alert-info.mb-4
25
+ .mb-3
26
+ strong
27
+ i.bi.bi-link.me-1
28
+ | Webhook URL:
29
+ br
30
+ code.text-small #{`/webhook/${project.id}`}
31
+ .mb-3
32
+ strong
33
+ i.bi.bi-key.me-1
34
+ | Secret:
35
+ br
36
+ code.text-small #{project.webhook_secret}
37
+ hr.mb-0
38
+ .d-flex.justify-content-center.pt-2
39
+ button.btn.btn-primary.w-100(
40
+ id="deploy-btn",
41
+ data-projid=project.id
42
+ )
43
+ i.bi.bi-rocket-takeoff.me-2
44
+ | Deploy Now
45
+
46
+ // Update Form
47
+ form(method="POST", action=`/projects/${project.id}/update`)
48
+ .mb-3
49
+ label.form-label.fw-semibold(for="name")
50
+ i.bi.bi-tag.me-1
51
+ | Project Name
52
+ input.form-control(
53
+ type="text",
54
+ id="name",
55
+ name="name",
56
+ value=project.name,
57
+ required
58
+ )
59
+
60
+ .mb-3
61
+ label.form-label.fw-semibold(for="github_url")
62
+ i.bi.bi-github.me-1
63
+ | GitHub URL
64
+ input.form-control(
65
+ type="text",
66
+ id="github_url",
67
+ name="github_url",
68
+ value=project.github_url,
69
+ required
70
+ )
71
+
72
+ .mb-3
73
+ label.form-label.fw-semibold(for="branch_name")
74
+ i.bi.bi-git-branch.me-1
75
+ | Branch
76
+ input.form-control(
77
+ type="text",
78
+ id="branch_name",
79
+ name="branch_name",
80
+ value=project.branch_name,
81
+ required
82
+ )
83
+
84
+ .mb-3
85
+ .form-check.mb-2
86
+ input.form-check-input(
87
+ type="checkbox",
88
+ name="receive_email_notf",
89
+ id="receive_email_notf",
90
+ checked=(project.receive_email_notf === 1)
91
+ )
92
+ label.form-check-label.fw-semibold(for="receive_email_notf")
93
+ i.bi.bi-envelope.me-1
94
+ | Receive Email Notifications
95
+
96
+ .form-check
97
+ input.form-check-input(
98
+ type="checkbox",
99
+ name="auto_deploy",
100
+ id="auto_deploy",
101
+ checked=(project.auto_deploy === 1)
102
+ )
103
+ label.form-check-label.fw-semibold(for="auto_deploy")
104
+ i.bi.bi-rocket.me-1
105
+ | Enable Auto Deploy
106
+
107
+ hr.my-4
108
+
109
+ .d-flex.gap-2
110
+ button.btn.btn-primary(type="submit")
111
+ i.bi.bi-save.me-2
112
+ | Update Project
113
+
114
+ .col-lg-6.mb-4
115
+ // ================= ENVIRONMENT VARIABLES =================
116
+ .card.border-0.shadow-sm.mb-4
117
+ .card-header.bg-white.border-bottom-0.pt-3
118
+ .d-flex.align-items-center
119
+ i.bi.bi-gear.text-primary.me-2(style="font-size: 1.25rem;")
120
+ h5.mb-0 Environment Variables
121
+ .card-body
122
+ form(method="POST", action=`/projects/${project.id}/env`)
123
+ .row.g-2.mb-3
124
+ .col-md-5
125
+ input.form-control(type="text", name="key", placeholder="KEY", required)
126
+ .col-md-5
127
+ input.form-control(type="text", name="value", placeholder="VALUE", required)
128
+ .col-md-2
129
+ button.btn.btn-primary.w-100(type="submit")
130
+ i.bi.bi-plus-lg
131
+
132
+ if envs.length === 0
133
+ .text-center.py-4
134
+ i.bi.bi-database.text-muted(style="font-size: 2rem;")
135
+ p.text-muted.mt-2.mb-0 No environment variables
136
+ else
137
+ .table-responsive
138
+ table.table.table-hover.align-middle.mb-0
139
+ thead.table-light
140
+ tr
141
+ th(style="font-weight: 600;") Key
142
+ th(style="font-weight: 600;") Value
143
+ th(style="width: 80px;") Action
144
+ tbody
145
+ each e in envs
146
+ tr
147
+ td
148
+ code.text-small #{e.key}
149
+ td
150
+ code.text-small #{e.value}
151
+ td
152
+ form(method="POST", action=`/projects/${project.id}/env/${e.id}/delete`, onsubmit="return confirm('Delete this environment variable?');")
153
+ button.btn.btn-sm.btn-outline-danger(type="submit")
154
+ i.bi.bi-trash
155
+
156
+ // ================= COMMANDS =================
157
+ .card.border-0.shadow-sm
158
+ .card-header.bg-white.border-bottom-0.pt-3
159
+ .d-flex.align-items-center
160
+ i.bi.bi-terminal.text-primary.me-2(style="font-size: 1.25rem;")
161
+ h5.mb-0 Deployment Commands
162
+ .card-body
163
+ form(method="POST", action=`/projects/${project.id}/commands`)
164
+ .input-group.mb-3
165
+ input.form-control(type="text", name="cmd", placeholder="npm install", required)
166
+ button.btn.btn-primary(type="submit")
167
+ i.bi.bi-plus-lg.me-1
168
+ | Add Command
169
+
170
+ if commands.length === 0
171
+ .text-center.py-4
172
+ i.bi.bi-terminal-x.text-muted(style="font-size: 2rem;")
173
+ p.text-muted.mt-2.mb-0 No deployment commands
174
+ else
175
+ .table-responsive
176
+ table.table.table-hover.align-middle.mb-0
177
+ thead.table-light
178
+ tr
179
+ th(style="width: 80px; font-weight: 600;") Seq
180
+ th(style="font-weight: 600;") Command
181
+ th(style="width: 80px;") Action
182
+ tbody
183
+ each c in commands
184
+ tr
185
+ td
186
+ span.badge.bg-secondary #{c.seq_no}
187
+ td
188
+ code.text-small #{c.cmd}
189
+ td
190
+ form(method="POST", action=`/projects/${project.id}/commands/${c.id}/delete`, onsubmit="return confirm('Delete this command?');")
191
+ button.btn.btn-sm.btn-outline-danger(type="submit")
192
+ i.bi.bi-trash
193
+
194
+ // Additional styles
195
+ style.
196
+ .card {
197
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
198
+ }
199
+
200
+ .card:hover {
201
+ transform: translateY(-2px);
202
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.08) !important;
203
+ }
204
+
205
+ .form-control:focus {
206
+ border-color: #0066ff;
207
+ box-shadow: 0 0 0 3px rgba(0, 102, 255, 0.1);
208
+ }
209
+
210
+ .alert-info {
211
+ background: #e8f4ff;
212
+ border: none;
213
+ border-left: 4px solid #0066ff;
214
+ color: #0047b3;
215
+ }
216
+
217
+ code {
218
+ background: #f8f9fa;
219
+ padding: 0.2rem 0.4rem;
220
+ border-radius: 4px;
221
+ font-size: 0.8rem;
222
+ color: #d63384;
223
+ }
224
+
225
+ .table-hover tbody tr:hover {
226
+ background-color: #f8f9fa;
227
+ }
228
+
229
+ .btn-sm {
230
+ padding: 0.25rem 0.5rem;
231
+ font-size: 0.75rem;
232
+ }
233
+
234
+ .badge {
235
+ font-weight: 500;
236
+ }
237
+
238
+ script(src="/js/deploy.js")
@@ -0,0 +1,114 @@
1
+ extends ../../dashboard/views/layout.pug
2
+
3
+ block content
4
+ // Page Header
5
+ .d-flex.flex-column.flex-md-row.justify-content-between.align-items-md-center.mb-4
6
+ div
7
+ h2.mb-1 Projects
8
+ p.text-muted.mb-0 Manage and monitor your deployed projects
9
+ div
10
+ a.btn.btn-primary(href="/projects/create")
11
+ i.bi.bi-plus-lg.me-2
12
+ | Create Project
13
+
14
+ // Empty State
15
+ if projects.length === 0
16
+ .card.border-0.shadow-sm
17
+ .card-body.text-center.py-5
18
+ i.bi.bi-folder-x.display-1.text-muted
19
+ h4.mt-3.text-muted No projects yet
20
+ p.text-muted.mb-3 Get started by creating your first project
21
+ a.btn.btn-primary(href="/projects/create")
22
+ i.bi.bi-plus-lg.me-2
23
+ | Create Your First Project
24
+
25
+ else
26
+ // Projects Table
27
+ .card.border-0.shadow-sm
28
+ .card-header.bg-white.border-bottom-0.pt-3.pb-0
29
+ .d-flex.align-items-center
30
+ i.bi.bi-folder.text-primary.me-2(style="font-size: 1.25rem;")
31
+ h5.mb-0 All Projects
32
+ .card-body.p-0
33
+ .table-responsive
34
+ table.table.table-hover.align-middle.mb-0
35
+ thead.table-light
36
+ tr
37
+ th(style="font-weight: 600;") Project Name
38
+ th(style="font-weight: 600;") Repository
39
+ th(style="font-weight: 600; width: 120px;") Actions
40
+ tbody
41
+ each p in projects
42
+ tr
43
+ td
44
+ .d-flex.align-items-center
45
+ i.bi.bi-folder-fill.text-primary.me-2
46
+ span.fw-medium #{p.name}
47
+ td
48
+ .d-flex.align-items-center
49
+ i.bi.bi-github.me-2.text-muted
50
+ code.text-small #{p.github_url}
51
+ td
52
+ .d-flex.gap-2
53
+ a.btn.btn-sm.btn-outline-primary(href=`/projects/${p.id}`)
54
+ i.bi.bi-eye.me-1
55
+ | View
56
+ form.d-inline(method="POST", action=`/projects/${p.id}/delete`, onsubmit="return confirm('Are you sure you want to delete this project? This action cannot be undone.');")
57
+ button.btn.btn-sm.btn-outline-danger(type="submit")
58
+ i.bi.bi-trash.me-1
59
+ | Delete
60
+
61
+ // Additional styles
62
+ style.
63
+ .card {
64
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
65
+ }
66
+
67
+ .card:hover {
68
+ transform: translateY(-2px);
69
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.08) !important;
70
+ }
71
+
72
+ .table-hover tbody tr:hover {
73
+ background-color: #f8f9fa;
74
+ }
75
+
76
+ .btn-sm {
77
+ padding: 0.375rem 0.75rem;
78
+ font-size: 0.813rem;
79
+ }
80
+
81
+ code {
82
+ background: #f8f9fa;
83
+ padding: 0.2rem 0.4rem;
84
+ border-radius: 4px;
85
+ font-size: 0.8rem;
86
+ color: #d63384;
87
+ }
88
+
89
+ .table-responsive {
90
+ border-radius: 8px;
91
+ overflow: hidden;
92
+ }
93
+
94
+ .btn-outline-primary {
95
+ border-color: #dee2e6;
96
+ color: #0066ff;
97
+ }
98
+
99
+ .btn-outline-primary:hover {
100
+ background: #0066ff;
101
+ border-color: #0066ff;
102
+ color: #ffffff;
103
+ }
104
+
105
+ .btn-outline-danger {
106
+ border-color: #dee2e6;
107
+ color: #dc3545;
108
+ }
109
+
110
+ .btn-outline-danger:hover {
111
+ background: #dc3545;
112
+ border-color: #dc3545;
113
+ color: #ffffff;
114
+ }
@@ -0,0 +1,5 @@
1
+ import type { Request, Response } from "express";
2
+ export declare const viewSettings: (_req: Request, res: Response) => void;
3
+ export declare const upsertEmail: (req: Request, res: Response) => void;
4
+ export declare const sendTestEmail: (_req: Request, res: Response) => Promise<void>;
5
+ //# sourceMappingURL=setting.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setting.controller.d.ts","sourceRoot":"","sources":["../../../../src/modules/settings/controllers/setting.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKjD,eAAO,MAAM,YAAY,GAAI,MAAM,OAAO,EAAE,KAAK,QAAQ,SAcxD,CAAC;AAGF,eAAO,MAAM,WAAW,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,SA6CtD,CAAC;AAGF,eAAO,MAAM,aAAa,GAAU,MAAM,OAAO,EAAE,KAAK,QAAQ,kBA0I/D,CAAC"}