@nocobase/app-plugin-releases 0.1.0-beta.2 → 0.1.0-beta.20

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 (268) hide show
  1. package/CHANGELOG.md +341 -0
  2. package/LICENSE.txt +129 -0
  3. package/README.md +91 -16
  4. package/dist/client/components/environment-form.d.ts +1 -1
  5. package/dist/client/components/environment-form.d.ts.map +1 -1
  6. package/dist/client/components/environment-form.js +9 -2
  7. package/dist/client/components/environment-form.js.map +1 -1
  8. package/dist/client/components/page-header.d.ts.map +1 -1
  9. package/dist/client/components/page-header.js +1 -1
  10. package/dist/client/components/page-header.js.map +1 -1
  11. package/dist/client/components/release-badges.d.ts.map +1 -1
  12. package/dist/client/components/release-badges.js +13 -1
  13. package/dist/client/components/release-badges.js.map +1 -1
  14. package/dist/client/components/route-overlay.d.ts +4 -1
  15. package/dist/client/components/route-overlay.d.ts.map +1 -1
  16. package/dist/client/components/route-overlay.js +32 -3
  17. package/dist/client/components/route-overlay.js.map +1 -1
  18. package/dist/client/components/runtime-policy-fields.d.ts +7 -1
  19. package/dist/client/components/runtime-policy-fields.d.ts.map +1 -1
  20. package/dist/client/components/runtime-policy-fields.js +19 -5
  21. package/dist/client/components/runtime-policy-fields.js.map +1 -1
  22. package/dist/client/components/runtime-state.d.ts +6 -0
  23. package/dist/client/components/runtime-state.d.ts.map +1 -0
  24. package/dist/client/components/runtime-state.js +67 -0
  25. package/dist/client/components/runtime-state.js.map +1 -0
  26. package/dist/client/components/shared-host.d.ts +20 -0
  27. package/dist/client/components/shared-host.d.ts.map +1 -0
  28. package/dist/client/components/shared-host.js +88 -0
  29. package/dist/client/components/shared-host.js.map +1 -0
  30. package/dist/client/components/ui/progress.d.ts +9 -0
  31. package/dist/client/components/ui/progress.d.ts.map +1 -0
  32. package/dist/client/components/ui/progress.js +20 -0
  33. package/dist/client/components/ui/progress.js.map +1 -0
  34. package/dist/client/components/use-route-overlay.d.ts +2 -9
  35. package/dist/client/components/use-route-overlay.d.ts.map +1 -1
  36. package/dist/client/components/use-route-overlay.js +5 -3
  37. package/dist/client/components/use-route-overlay.js.map +1 -1
  38. package/dist/client/components/variable-alerts.d.ts.map +1 -1
  39. package/dist/client/components/variable-alerts.js +6 -18
  40. package/dist/client/components/variable-alerts.js.map +1 -1
  41. package/dist/client/hooks/use-app-summary.d.ts +1 -1
  42. package/dist/client/hooks/use-app-summary.d.ts.map +1 -1
  43. package/dist/client/hooks/use-app-summary.js +4 -1
  44. package/dist/client/hooks/use-app-summary.js.map +1 -1
  45. package/dist/client/hooks/use-releases.d.ts +4 -1
  46. package/dist/client/hooks/use-releases.d.ts.map +1 -1
  47. package/dist/client/hooks/use-releases.js +6 -2
  48. package/dist/client/hooks/use-releases.js.map +1 -1
  49. package/dist/client/lib/app-state.d.ts +2 -2
  50. package/dist/client/lib/app-state.d.ts.map +1 -1
  51. package/dist/client/lib/app-state.js +10 -3
  52. package/dist/client/lib/app-state.js.map +1 -1
  53. package/dist/client/lib/errors.d.ts.map +1 -1
  54. package/dist/client/lib/errors.js +7 -0
  55. package/dist/client/lib/errors.js.map +1 -1
  56. package/dist/client/lib/format.d.ts +2 -0
  57. package/dist/client/lib/format.d.ts.map +1 -1
  58. package/dist/client/lib/format.js +7 -0
  59. package/dist/client/lib/format.js.map +1 -1
  60. package/dist/client/lib/paths.d.ts +5 -0
  61. package/dist/client/lib/paths.d.ts.map +1 -1
  62. package/dist/client/lib/paths.js +10 -0
  63. package/dist/client/lib/paths.js.map +1 -1
  64. package/dist/client/lib/permissions.d.ts +5 -0
  65. package/dist/client/lib/permissions.d.ts.map +1 -1
  66. package/dist/client/lib/permissions.js +8 -0
  67. package/dist/client/lib/permissions.js.map +1 -1
  68. package/dist/client/lib/runtime-state.d.ts +25 -0
  69. package/dist/client/lib/runtime-state.d.ts.map +1 -0
  70. package/dist/client/lib/runtime-state.js +58 -0
  71. package/dist/client/lib/runtime-state.js.map +1 -0
  72. package/dist/client/locales/de-DE.d.ts +5 -0
  73. package/dist/client/locales/de-DE.d.ts.map +1 -0
  74. package/dist/client/locales/de-DE.js +876 -0
  75. package/dist/client/locales/de-DE.js.map +1 -0
  76. package/dist/client/locales/en-US.d.ts +83 -9
  77. package/dist/client/locales/en-US.d.ts.map +1 -1
  78. package/dist/client/locales/en-US.js +80 -9
  79. package/dist/client/locales/en-US.js.map +1 -1
  80. package/dist/client/locales/es-ES.d.ts +5 -0
  81. package/dist/client/locales/es-ES.d.ts.map +1 -0
  82. package/dist/client/locales/es-ES.js +882 -0
  83. package/dist/client/locales/es-ES.js.map +1 -0
  84. package/dist/client/locales/fr-FR.d.ts +5 -0
  85. package/dist/client/locales/fr-FR.d.ts.map +1 -0
  86. package/dist/client/locales/fr-FR.js +882 -0
  87. package/dist/client/locales/fr-FR.js.map +1 -0
  88. package/dist/client/locales/id-ID.d.ts +5 -0
  89. package/dist/client/locales/id-ID.d.ts.map +1 -0
  90. package/dist/client/locales/id-ID.js +876 -0
  91. package/dist/client/locales/id-ID.js.map +1 -0
  92. package/dist/client/locales/index.d.ts.map +1 -1
  93. package/dist/client/locales/index.js +10 -0
  94. package/dist/client/locales/index.js.map +1 -1
  95. package/dist/client/locales/ja-JP.d.ts +5 -0
  96. package/dist/client/locales/ja-JP.d.ts.map +1 -0
  97. package/dist/client/locales/ja-JP.js +876 -0
  98. package/dist/client/locales/ja-JP.js.map +1 -0
  99. package/dist/client/locales/ko-KR.d.ts +5 -0
  100. package/dist/client/locales/ko-KR.d.ts.map +1 -0
  101. package/dist/client/locales/ko-KR.js +879 -0
  102. package/dist/client/locales/ko-KR.js.map +1 -0
  103. package/dist/client/locales/pt-BR.d.ts +5 -0
  104. package/dist/client/locales/pt-BR.d.ts.map +1 -0
  105. package/dist/client/locales/pt-BR.js +882 -0
  106. package/dist/client/locales/pt-BR.js.map +1 -0
  107. package/dist/client/locales/ru-RU.d.ts +5 -0
  108. package/dist/client/locales/ru-RU.d.ts.map +1 -0
  109. package/dist/client/locales/ru-RU.js +891 -0
  110. package/dist/client/locales/ru-RU.js.map +1 -0
  111. package/dist/client/locales/vi-VN.d.ts +5 -0
  112. package/dist/client/locales/vi-VN.d.ts.map +1 -0
  113. package/dist/client/locales/vi-VN.js +876 -0
  114. package/dist/client/locales/vi-VN.js.map +1 -0
  115. package/dist/client/locales/zh-CN.d.ts.map +1 -1
  116. package/dist/client/locales/zh-CN.js +83 -9
  117. package/dist/client/locales/zh-CN.js.map +1 -1
  118. package/dist/client/locales/zh-TW.d.ts +5 -0
  119. package/dist/client/locales/zh-TW.d.ts.map +1 -0
  120. package/dist/client/locales/zh-TW.js +876 -0
  121. package/dist/client/locales/zh-TW.js.map +1 -0
  122. package/dist/client/pages/app-page.d.ts.map +1 -1
  123. package/dist/client/pages/app-page.js +14 -8
  124. package/dist/client/pages/app-page.js.map +1 -1
  125. package/dist/client/pages/apps-outlet.d.ts +8 -0
  126. package/dist/client/pages/apps-outlet.d.ts.map +1 -0
  127. package/dist/client/pages/apps-outlet.js +9 -0
  128. package/dist/client/pages/apps-outlet.js.map +1 -0
  129. package/dist/client/pages/environment-page.d.ts.map +1 -1
  130. package/dist/client/pages/environment-page.js +112 -24
  131. package/dist/client/pages/environment-page.js.map +1 -1
  132. package/dist/client/pages/environments-page.d.ts +8 -3
  133. package/dist/client/pages/environments-page.d.ts.map +1 -1
  134. package/dist/client/pages/environments-page.js +58 -10
  135. package/dist/client/pages/environments-page.js.map +1 -1
  136. package/dist/client/pages/new-app-page.d.ts +2 -4
  137. package/dist/client/pages/new-app-page.d.ts.map +1 -1
  138. package/dist/client/pages/new-app-page.js +29 -19
  139. package/dist/client/pages/new-app-page.js.map +1 -1
  140. package/dist/client/pages/new-app-redirect.d.ts +7 -0
  141. package/dist/client/pages/new-app-redirect.d.ts.map +1 -0
  142. package/dist/client/pages/new-app-redirect.js +8 -0
  143. package/dist/client/pages/new-app-redirect.js.map +1 -0
  144. package/dist/client/pages/request-page.js +1 -1
  145. package/dist/client/pages.d.ts +6 -2
  146. package/dist/client/pages.d.ts.map +1 -1
  147. package/dist/client/pages.js +8 -4
  148. package/dist/client/pages.js.map +1 -1
  149. package/dist/client/routes.d.ts.map +1 -1
  150. package/dist/client/routes.js +37 -10
  151. package/dist/client/routes.js.map +1 -1
  152. package/dist/database/migrations/.manifest.json +10 -2
  153. package/dist/database/migrations/202610020001_rel_create_tables.js +1 -1
  154. package/dist/database/migrations/202610020001_rel_create_tables.js.map +1 -1
  155. package/dist/database/migrations/202610260002_rel_bound_artifact_keys.d.ts +4 -0
  156. package/dist/database/migrations/202610260002_rel_bound_artifact_keys.d.ts.map +1 -0
  157. package/dist/database/migrations/202610260002_rel_bound_artifact_keys.js +51 -0
  158. package/dist/database/migrations/202610260002_rel_bound_artifact_keys.js.map +1 -0
  159. package/dist/database/migrations/202611020001_rel_environment_purpose.d.ts +8 -0
  160. package/dist/database/migrations/202611020001_rel_environment_purpose.d.ts.map +1 -0
  161. package/dist/database/migrations/202611020001_rel_environment_purpose.js +30 -0
  162. package/dist/database/migrations/202611020001_rel_environment_purpose.js.map +1 -0
  163. package/dist/server/access/caller.d.ts +6 -0
  164. package/dist/server/access/caller.d.ts.map +1 -1
  165. package/dist/server/access/caller.js +36 -0
  166. package/dist/server/access/caller.js.map +1 -1
  167. package/dist/server/artifact-config.d.ts +9 -0
  168. package/dist/server/artifact-config.d.ts.map +1 -0
  169. package/dist/server/artifact-config.js +49 -0
  170. package/dist/server/artifact-config.js.map +1 -0
  171. package/dist/server/composition.d.ts +6 -0
  172. package/dist/server/composition.d.ts.map +1 -1
  173. package/dist/server/composition.js +7 -1
  174. package/dist/server/composition.js.map +1 -1
  175. package/dist/server/config.d.ts +18 -2
  176. package/dist/server/config.d.ts.map +1 -1
  177. package/dist/server/drivers/host/driver.d.ts +13 -2
  178. package/dist/server/drivers/host/driver.d.ts.map +1 -1
  179. package/dist/server/drivers/host/driver.js +427 -81
  180. package/dist/server/drivers/host/driver.js.map +1 -1
  181. package/dist/server/drivers/types.d.ts +79 -1
  182. package/dist/server/drivers/types.d.ts.map +1 -1
  183. package/dist/server/drivers/types.js +6 -0
  184. package/dist/server/drivers/types.js.map +1 -1
  185. package/dist/server/index.d.ts +1 -1
  186. package/dist/server/index.d.ts.map +1 -1
  187. package/dist/server/index.js.map +1 -1
  188. package/dist/server/locales/de-DE.d.ts +5 -0
  189. package/dist/server/locales/de-DE.d.ts.map +1 -0
  190. package/dist/server/locales/de-DE.js +133 -0
  191. package/dist/server/locales/de-DE.js.map +1 -0
  192. package/dist/server/locales/es-ES.d.ts +5 -0
  193. package/dist/server/locales/es-ES.d.ts.map +1 -0
  194. package/dist/server/locales/es-ES.js +133 -0
  195. package/dist/server/locales/es-ES.js.map +1 -0
  196. package/dist/server/locales/fr-FR.d.ts +5 -0
  197. package/dist/server/locales/fr-FR.d.ts.map +1 -0
  198. package/dist/server/locales/fr-FR.js +133 -0
  199. package/dist/server/locales/fr-FR.js.map +1 -0
  200. package/dist/server/locales/id-ID.d.ts +5 -0
  201. package/dist/server/locales/id-ID.d.ts.map +1 -0
  202. package/dist/server/locales/id-ID.js +133 -0
  203. package/dist/server/locales/id-ID.js.map +1 -0
  204. package/dist/server/locales/index.d.ts.map +1 -1
  205. package/dist/server/locales/index.js +10 -0
  206. package/dist/server/locales/index.js.map +1 -1
  207. package/dist/server/locales/ja-JP.d.ts +5 -0
  208. package/dist/server/locales/ja-JP.d.ts.map +1 -0
  209. package/dist/server/locales/ja-JP.js +133 -0
  210. package/dist/server/locales/ja-JP.js.map +1 -0
  211. package/dist/server/locales/ko-KR.d.ts +5 -0
  212. package/dist/server/locales/ko-KR.d.ts.map +1 -0
  213. package/dist/server/locales/ko-KR.js +133 -0
  214. package/dist/server/locales/ko-KR.js.map +1 -0
  215. package/dist/server/locales/pt-BR.d.ts +5 -0
  216. package/dist/server/locales/pt-BR.d.ts.map +1 -0
  217. package/dist/server/locales/pt-BR.js +133 -0
  218. package/dist/server/locales/pt-BR.js.map +1 -0
  219. package/dist/server/locales/ru-RU.d.ts +5 -0
  220. package/dist/server/locales/ru-RU.d.ts.map +1 -0
  221. package/dist/server/locales/ru-RU.js +133 -0
  222. package/dist/server/locales/ru-RU.js.map +1 -0
  223. package/dist/server/locales/vi-VN.d.ts +5 -0
  224. package/dist/server/locales/vi-VN.d.ts.map +1 -0
  225. package/dist/server/locales/vi-VN.js +133 -0
  226. package/dist/server/locales/vi-VN.js.map +1 -0
  227. package/dist/server/locales/zh-TW.d.ts +5 -0
  228. package/dist/server/locales/zh-TW.d.ts.map +1 -0
  229. package/dist/server/locales/zh-TW.js +133 -0
  230. package/dist/server/locales/zh-TW.js.map +1 -0
  231. package/dist/server/providers/releases.d.ts.map +1 -1
  232. package/dist/server/providers/releases.js +12 -5
  233. package/dist/server/providers/releases.js.map +1 -1
  234. package/dist/server/routes/api.d.ts +1 -1
  235. package/dist/server/routes/api.d.ts.map +1 -1
  236. package/dist/server/routes/api.js +120 -20
  237. package/dist/server/routes/api.js.map +1 -1
  238. package/dist/server/routes/index.d.ts.map +1 -1
  239. package/dist/server/routes/index.js +10 -2
  240. package/dist/server/routes/index.js.map +1 -1
  241. package/dist/server/routes/schemas.d.ts +7 -2
  242. package/dist/server/routes/schemas.d.ts.map +1 -1
  243. package/dist/server/routes/schemas.js +320 -89
  244. package/dist/server/routes/schemas.js.map +1 -1
  245. package/dist/server/services/environments.d.ts +2 -2
  246. package/dist/server/services/environments.d.ts.map +1 -1
  247. package/dist/server/services/environments.js +21 -1
  248. package/dist/server/services/environments.js.map +1 -1
  249. package/dist/server/services/releases.d.ts +69 -8
  250. package/dist/server/services/releases.d.ts.map +1 -1
  251. package/dist/server/services/releases.js +574 -128
  252. package/dist/server/services/releases.js.map +1 -1
  253. package/dist/server/services/validation.d.ts +2 -0
  254. package/dist/server/services/validation.d.ts.map +1 -1
  255. package/dist/server/services/validation.js +8 -0
  256. package/dist/server/services/validation.js.map +1 -1
  257. package/dist/server/tokens.d.ts +15 -2
  258. package/dist/server/tokens.d.ts.map +1 -1
  259. package/dist/server/tokens.js.map +1 -1
  260. package/dist/shared/releases.d.ts +94 -3
  261. package/dist/shared/releases.d.ts.map +1 -1
  262. package/dist/shared/releases.js +37 -0
  263. package/dist/shared/releases.js.map +1 -1
  264. package/package.json +18 -18
  265. package/dist/client/pages/apps-page.d.ts +0 -4
  266. package/dist/client/pages/apps-page.d.ts.map +0 -1
  267. package/dist/client/pages/apps-page.js +0 -116
  268. package/dist/client/pages/apps-page.js.map +0 -1
@@ -0,0 +1,133 @@
1
+ const zhTW = {
2
+ access: {
3
+ section: '版本',
4
+ pages: {
5
+ 'rel-apps': '應用程式',
6
+ },
7
+ businessSection: '版本',
8
+ businesses: {
9
+ apps: {
10
+ title: '應用程式',
11
+ description: '應用程式、其版本、部署和執行環境。',
12
+ actions: {
13
+ view: {
14
+ title: '檢視應用程式',
15
+ description: '檢視應用程式、其版本、部署和執行環境狀態',
16
+ related: '檢視應用程式(與其相關的應用程式)',
17
+ relatedLabel: '我建立的',
18
+ relatedHint: '我建立的應用程式,以及任何與我相關的應用程式',
19
+ all: '檢視應用程式(全部)',
20
+ },
21
+ readLogs: {
22
+ title: '讀取日誌',
23
+ description: '讀取應用程式和部署日誌',
24
+ related: '讀取日誌(與之相關的日誌)',
25
+ relatedLabel: '我建立的',
26
+ relatedHint: '我建立的應用程式,以及任何與我相關的應用程式',
27
+ all: '讀取日誌(全部)',
28
+ },
29
+ create: {
30
+ title: '建立應用程式',
31
+ description: '在環境中建立應用程式',
32
+ all: '建立應用程式',
33
+ },
34
+ configure: {
35
+ title: '配置應用程式',
36
+ description: '讀取和更改應用程式的配置,這可能包含秘密',
37
+ related: '設定應用程式(與其相關的應用程式)',
38
+ relatedLabel: '我建立的',
39
+ relatedHint: '我建立的應用程式,以及任何與我相關的應用程式',
40
+ all: '設定應用程式(全部)',
41
+ },
42
+ upload: {
43
+ title: '上傳版本',
44
+ description: '上傳推廣版本',
45
+ related: '上傳版本(與其相關的版本)',
46
+ relatedLabel: '我建立的',
47
+ relatedHint: '我建立的應用程式,以及任何與我相關的應用程式',
48
+ all: '上傳版本(全部)',
49
+ },
50
+ deploy: {
51
+ title: '部署',
52
+ description: '在不受保護的環境上部署和回滾,請求部署到受保護的環境',
53
+ related: '部署(與其相關的)',
54
+ relatedLabel: '我建立的',
55
+ relatedHint: '我建立的應用程式,以及任何與我相關的應用程式',
56
+ all: '部署(全部)',
57
+ },
58
+ deployProtected: {
59
+ title: '批准受保護的部署',
60
+ description: '批准部署到沒有指定批准者的受保護環境;僅限人',
61
+ related: '批准受保護的部署(與其相關的部署)',
62
+ relatedLabel: '我建立的',
63
+ relatedHint: '我建立的應用程式,以及任何與我相關的應用程式',
64
+ all: '批准受保護的部署(全部)',
65
+ },
66
+ operate: {
67
+ title: '啟動與停止',
68
+ description: '啟動、停止和重新啟動應用程式',
69
+ related: '啟動和停止(相關的)',
70
+ relatedLabel: '我建立的',
71
+ relatedHint: '我建立的應用程式,以及任何與我相關的應用程式',
72
+ all: '啟動與停止(全部)',
73
+ },
74
+ delete: {
75
+ title: '刪除應用程式',
76
+ description: '刪除應用程式及其資料',
77
+ related: '刪除應用程式(與其相關的應用程式)',
78
+ relatedLabel: '我建立的',
79
+ relatedHint: '我建立的應用程式,以及任何與我相關的應用程式',
80
+ all: '刪除應用程式(全部)',
81
+ },
82
+ },
83
+ },
84
+ },
85
+ recordAccess: {
86
+ owned: '他們建立的應用程式',
87
+ },
88
+ settings: {
89
+ rel: {
90
+ environments: '部署環境',
91
+ },
92
+ },
93
+ keyScopes: {
94
+ apps: {
95
+ title: '應用程式和部署',
96
+ description: '閱讀:檢視應用程式、版本、部署和日誌。讀寫:還可以上傳版本。管理員:也可以部署並啟動或停止應用程式。',
97
+ objects: '應用程式',
98
+ },
99
+ environments: {
100
+ title: '部署環境',
101
+ description: '閱讀:列出環境。讀和寫:管理它們。',
102
+ },
103
+ presets: {
104
+ ciDeploy: {
105
+ title: 'CI 部署',
106
+ description: '將版本上傳到所選應用程式並部署它們,為期 90 天。',
107
+ },
108
+ ciUpload: {
109
+ title: 'CI上傳',
110
+ description: '將版本上傳到所選應用程式而不部署它們,為期 90 天。',
111
+ },
112
+ },
113
+ },
114
+ actions: {
115
+ read: '檢視',
116
+ manage: '管理',
117
+ view: '檢視',
118
+ 'read-logs': '讀取日誌',
119
+ create: '建立',
120
+ configure: '配置',
121
+ upload: '上傳版本',
122
+ deploy: '部署',
123
+ 'deploy-protected': '批准受保護的部署',
124
+ operate: '啟動與停止',
125
+ delete: '刪除',
126
+ },
127
+ },
128
+ drivers: {
129
+ host: '此伺服器',
130
+ },
131
+ };
132
+ export default zhTW;
133
+ //# sourceMappingURL=zh-TW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zh-TW.js","sourceRoot":"","sources":["../../../server/locales/zh-TW.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"releases.d.ts","sourceRoot":"","sources":["../../../server/providers/releases.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIrE,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;AAyBpC,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC;AAED,qBAAa,gBAAiB,SAAQ,eAAe,CAAC,2BAA2B,CAAC;IAChF,SAAgB,IAAI,EAAE,MAAM,CAAmC;IAC/D,OAAO,CAAC,UAAU,CAAC,CAAoB;IACvC,OAAO,CAAC,gBAAgB,CAAC,CAAoB;IAC7C,OAAO,CAAC,UAAU,CAAC,CAAuB;IAE1B,QAAQ,IAAI,IAAI;IA+IV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/C;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,MAAM;CAQf"}
1
+ {"version":3,"file":"releases.d.ts","sourceRoot":"","sources":["../../../server/providers/releases.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAKrE,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACtB,MAAM,4BAA4B,CAAC;AA0BpC,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC;AAED,qBAAa,gBAAiB,SAAQ,eAAe,CAAC,2BAA2B,CAAC;IAChF,SAAgB,IAAI,EAAE,MAAM,CAAmC;IAC/D,OAAO,CAAC,UAAU,CAAC,CAAoB;IACvC,OAAO,CAAC,gBAAgB,CAAC,CAAoB;IAC7C,OAAO,CAAC,UAAU,CAAC,CAAuB;IAE1B,QAAQ,IAAI,IAAI;IA2JV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/C;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,MAAM;CAQf"}
@@ -13,7 +13,8 @@ import { normalizeBasePath } from '@nocobase/app-server/support';
13
13
  import { AppHostSupervisor } from '@nocobase/app-host/supervisor';
14
14
  import { databaseManagerToken } from '@nocobase/db';
15
15
  import { ServiceProvider, } from '@nocobase/service-provider';
16
- import { createReleases } from '../composition.js';
16
+ import { createResolvedReleases } from '../composition.js';
17
+ import { resolveArtifact } from '../artifact-config.js';
17
18
  import { createReleasesSecretsStores } from '../secrets-stores.js';
18
19
  import { DOCKER_BACKEND, IN_PROCESS_BACKEND, createHostDriver, writeHostConfig, } from '../drivers/host/driver.js';
19
20
  import { createDriverRegistry } from '../drivers/types.js';
@@ -39,6 +40,7 @@ export class ReleasesProvider extends ServiceProvider {
39
40
  });
40
41
  container.singleton(releasesToken, (resolver) => {
41
42
  const config = this.config();
43
+ const artifact = resolveArtifact(config.artifact, this.app.config.get('drive'));
42
44
  const logger = resolver.has(loggingToken)
43
45
  ? resolver.resolve(loggingToken).getLogger('releases')
44
46
  : undefined;
@@ -76,7 +78,7 @@ export class ReleasesProvider extends ServiceProvider {
76
78
  [IN_PROCESS_BACKEND]: {
77
79
  controller: this.supervisor,
78
80
  prepare: () => writeHostConfig(host.configPath, {
79
- artifact: config.artifact,
81
+ artifact: artifact.disk,
80
82
  appVolumesDir: host.appVolumesDir,
81
83
  appRevisionsDir: host.appRevisionsDir,
82
84
  ...(host.controlDir ? { controlDir: host.controlDir } : {}),
@@ -84,8 +86,13 @@ export class ReleasesProvider extends ServiceProvider {
84
86
  sweepIntervalSeconds: host.sweepIntervalSeconds,
85
87
  activationHoldMs: host.activationHoldMs,
86
88
  activationWaitMs: host.activationWaitMs,
89
+ memoryBudget: host.memoryBudget,
90
+ maxActiveApps: host.maxActiveApps,
87
91
  }),
88
92
  ...(host.publicUrl ? { publicUrl: host.publicUrl } : {}),
93
+ restartHeapRatio: host.restartHeapRatio,
94
+ restartMaxWaitMs: host.restartMaxWaitMs,
95
+ restartDrainMs: host.restartDrainMs,
89
96
  ...(host.restartAfterChurn
90
97
  ? { restartAfterChurn: host.restartAfterChurn }
91
98
  : {}),
@@ -97,7 +104,7 @@ export class ReleasesProvider extends ServiceProvider {
97
104
  hosts[DOCKER_BACKEND] = {
98
105
  controller: this.dockerSupervisor,
99
106
  prepare: () => writeHostConfig(docker.configPath, {
100
- artifact: config.artifact,
107
+ artifact: artifact.disk,
101
108
  appVolumesDir: docker.appVolumesDir,
102
109
  appRevisionsDir: docker.appRevisionsDir,
103
110
  ...(docker.controlDir ? { controlDir: docker.controlDir } : {}),
@@ -138,7 +145,7 @@ export class ReleasesProvider extends ServiceProvider {
138
145
  });
139
146
  drivers.register(this.hostDriver);
140
147
  }
141
- return createReleases({
148
+ return createResolvedReleases({
142
149
  database: resolver.resolve(databaseManagerToken),
143
150
  config,
144
151
  drivers,
@@ -151,7 +158,7 @@ export class ReleasesProvider extends ServiceProvider {
151
158
  reservedBasePath: normalizeBasePath(this.app.config.get('app.publicBasePath') ?? ''),
152
159
  publicOrigin: this.app.config.get('app.publicOrigin') ?? null,
153
160
  logger,
154
- });
161
+ }, artifact);
155
162
  });
156
163
  container.singleton(releasesEventsToken, (resolver) => resolver.resolve(releasesToken).events);
157
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"releases.js","sourceRoot":"","sources":["../../../server/providers/releases.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACL,eAAe,GAEhB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAKnE,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAGhB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,cAAc,CAAC;AAOtB,MAAM,OAAO,gBAAiB,SAAQ,eAA4C;IAChE,IAAI,GAAW,+BAA+B,CAAC;IACvD,UAAU,CAAqB;IAC/B,gBAAgB,CAAqB;IACrC,UAAU,CAAwB;IAE1B,QAAQ;QACtB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAC/B,IAAI,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACvD,KAAK,MAAM,KAAK,IAAI,2BAA2B,CAAC,GAAG,EAAE,CACnD,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,UAAU,EAAE,CACrD;gBACC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,SAAS,CAAC,SAAS,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACxE,SAAS,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,EAAE;YAClD,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAChC,OAAO;gBACL,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI;aAC1D,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;gBACvC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;gBACtD,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YACvD,IAAI,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;gBACzB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;gBACxB,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC;oBAC7C,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM;oBAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;oBACrC,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;oBACzC,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;oBAC/C,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;oBACvD,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;oBAC7D,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;wBAChC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC;wBAC7D,CAAC,CAAC,SAAS;iBACd,CAAC,CAAC;gBACH,MAAM,KAAK,GAAwC;oBACjD,CAAC,kBAAkB,CAAC,EAAE;wBACpB,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,OAAO,EAAE,GAAG,EAAE,CACZ,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE;4BAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;4BACzB,aAAa,EAAE,IAAI,CAAC,aAAa;4BACjC,eAAe,EAAE,IAAI,CAAC,eAAe;4BACrC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3D,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;4BAC/C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;4BACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;yBACxC,CAAC;wBACJ,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACxD,GAAG,CAAC,IAAI,CAAC,iBAAiB;4BACxB,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;4BAC/C,CAAC,CAAC,EAAE,CAAC;qBACR;iBACF,CAAC;gBACF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC7B,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAC/D,KAAK,CAAC,cAAc,CAAC,GAAG;wBACtB,UAAU,EAAE,IAAI,CAAC,gBAAgB;wBACjC,OAAO,EAAE,GAAG,EAAE,CACZ,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE;4BACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;4BACzB,aAAa,EAAE,MAAM,CAAC,aAAa;4BACnC,eAAe,EAAE,MAAM,CAAC,eAAe;4BACvC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC/D,OAAO,EAAE,MAAM,CAAC,OAAO;4BACvB,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;4BACjD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;4BACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;4BACzC,GAAG,CAAC,MAAM,CAAC,OAAO;gCAChB,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE;gCACjD,CAAC,CAAC,EAAE,CAAC;yBACR,CAAC;wBACJ,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC7D,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC;oBACjC,KAAK;oBACL,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI;oBAChC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;oBAC/C,sGAAsG;oBACtG,gDAAgD;oBAChD,KAAK,EAAE;wBACL,CAAC,kBAAkB,CAAC,EAAE;4BACpB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,IAAI;4BACjC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;4BACxC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;4BACvC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;yBAClC;wBACD,GAAG,CAAC,MAAM,EAAE,OAAO;4BACjB,CAAC,CAAC;gCACE,CAAC,cAAc,CAAC,EAAE;oCAChB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;oCACnC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,EAAE;iCACjE;6BACF;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR;oBACD,MAAM;iBACP,CAAC,CAAC;gBACH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,cAAc,CAAC;gBACpB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC;gBAChD,MAAM;gBACN,OAAO;gBACP,MAAM,EAAE,GAAG,EAAE,CACX,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC;oBAC/B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC;oBACvC,CAAC,CAAC,SAAS;gBACf,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC;oBACnC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;oBACpD,CAAC,CAAC,EAAE,CAAC;gBACP,gBAAgB,EAAE,iBAAiB,CACjC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAS,oBAAoB,CAAC,IAAI,EAAE,CACxD;gBACD,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAS,kBAAkB,CAAC,IAAI,IAAI;gBACrE,MAAM;aACP,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,SAAS,CACjB,mBAAmB,EACnB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CACrD,CAAC;IACJ,CAAC;IAEe,KAAK,CAAC,KAAK;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IAEe,KAAK,CAAC,QAAQ;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS;iBACrB,gBAAgB,CAAC,aAAa,CAAC;gBAChC,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,CAAC,UAAU,CAAC;gBACvB,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE;gBAC3B,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,eAAe,CACrB,MAAgC,EAChC,QAAmD;QAEnD,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,UAAU;YACb,IAAI,CAAC;gBACH,UAAU,GAAG,aAAa,CACxB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CACrD,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,oHAAoH,EACpH,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;QACH,OAAO,iBAAiB,CAAC,MAAM,CAAC;YAC9B,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM;YAC/B,UAAU;YACV,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EACZ,MAAM,CAAC,cAAc;gBACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;YAC5D,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;gBAChC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC;gBACpE,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;IACL,CAAC;IAEO,MAAM;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAuB,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO;YACtC,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;QACJ,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
1
+ {"version":3,"file":"releases.js","sourceRoot":"","sources":["../../../server/providers/releases.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ export interface ReleasesApiOptions {
18
18
  readonly authenticate: MiddlewareHandler;
19
19
  /** The caller for an authenticated request. */
20
20
  readonly callerOf: (context: Context) => Promise<Caller>;
21
- readonly securityLog?: (event: string, details: Record<string, unknown>) => void;
21
+ readonly securityLog?: (event: string, details: Record<string, unknown>, context?: Context) => void;
22
22
  }
23
23
  export declare function createReleasesApi(services: Releases, options: ReleasesApiOptions): Hono<ReleasesApiEnv>;
24
24
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../server/routes/api.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAIlE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAqElD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE;QACT,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE;YACf,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;YACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,CACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,IAAI,CAAC;CACX;AAeD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,CAAC,cAAc,CAAC,CAyvEtB"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../server/routes/api.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAIlE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAuElD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE;QACT,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE;YACf,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;YACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,CACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,OAAO,KACd,IAAI,CAAC;CACX;AAeD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,CAAC,cAAc,CAAC,CAu5EtB"}
@@ -6,11 +6,12 @@
6
6
  * services then check the record itself, so in-process callers meet the same rules.
7
7
  */
8
8
  import { apiErrorHandler, apiErrorResponse, apiErrorResponses, apiValidator, cliRoute, dataResponse, describeRoute, emptyResponse, listResponse, } from '@nocobase/app-server/router';
9
+ import { Readable } from 'node:stream';
9
10
  import { Hono } from 'hono';
10
11
  import { UPLOAD_TICKET_PREFIX } from '../../shared/releases.js';
11
12
  import { ReleasesError, referencedBy } from '../errors.js';
12
13
  import { parseLabelFilter } from '../services/validation.js';
13
- import { AppParams, ApproveRequestBody, CheckEnvironmentBody, CheckRegistryBody, CreateAppBody, CreateEnvironmentBody, CreateRegistryBody, CreateRequestBody, CreateUploadTicketBody, DeleteAppQuery, DeployBody, DeployQuery, DeploymentParams, EmptyBody, EnvironmentParams, IdempotencyHeaders, LabelReleaseBody, ListAppsQuery, ListReleasesQuery, ListRequestsQuery, LogQuery, PageQuery, PromoteBody, RegisterImageReleaseBody, ReleasesAppSchema, ReleasesCallerSchema, ReleasesConfigSchema, ReleasesConfigTemplateSchema, ReleasesDeploymentRequestSchema, ReleasesDeploymentSchema, ReleasesDriverSchema, ReleasesEnvironmentCheckSchema, ReleasesEnvironmentSchema, ReleasesLogEntrySchema, ReleasesLogMeta, ReleasesPageMeta, ReleasesRegistryCheckSchema, ReleasesRegistrySchema, ReleasesReleaseSchema, ReleasesTotalMeta, ReleasesUploadTicketSchema, ReleasesAppVariableSchema, ReleasesAppVariablesMeta, ReleasesEnvironmentDeclaredVariableSchema, ReleasesEnvironmentVariableSchema, ReleasesInitialAdminSchema, ReleasesVariablesManifestSchema, AppVariableParams, AppVariablesQuery, EnvironmentVariableParams, SetAppVariableBody, SetEnvironmentVariableBody, RegistryParams, RejectRequestBody, ReleaseParams, RequestParams, RollbackBody, UpdateAppBody, UpdateConfigBody, UpdateEnvironmentBody, UpdateRegistryBody, UploadHeaders, } from './schemas.js';
14
+ import { AppParams, ApproveRequestBody, CheckEnvironmentBody, CheckRegistryBody, CreateAppBody, CreateEnvironmentBody, CreateRegistryBody, CreateRequestBody, CreateUploadTicketBody, DeleteAppQuery, DeployBody, DeployQuery, DeploymentParams, EmptyBody, EnvironmentParams, IdempotencyHeaders, LabelReleaseBody, ListAppsQuery, ListReleasesQuery, ListRequestsQuery, LogQuery, PageQuery, PromoteBody, RegisterImageReleaseBody, ReleasesAppSchema, ReleasesSharedHostSchema, ReleasesCallerSchema, ReleasesConfigSchema, ReleasesConfigTemplateSchema, ReleasesDeploymentRequestSchema, ReleasesDeploymentSchema, ReleasesDriverSchema, ReleasesEnvironmentCheckSchema, ReleasesEnvironmentListItemSchema, ReleasesEnvironmentSchema, ReleasesLogEntrySchema, ReleasesLogMeta, ReleasesPageMeta, ReleasesRegistryCheckSchema, ReleasesRegistrySchema, ReleasesReleaseSchema, ReleasesTotalMeta, ReleasesUploadTicketSchema, ReleasesAppVariableSchema, ReleasesAppVariablesMeta, ReleasesEnvironmentDeclaredVariableSchema, ReleasesEnvironmentVariableSchema, ReleasesInitialAdminSchema, ReleasesVariablesManifestSchema, AppVariableParams, AppVariablesQuery, EnvironmentVariableParams, SetAppVariableBody, SetEnvironmentVariableBody, RegistryParams, RejectRequestBody, ReleaseParams, RequestParams, RollbackBody, UpdateAppBody, UpdateConfigBody, UpdateEnvironmentBody, UpdateRegistryBody, UploadHeaders, } from './schemas.js';
14
15
  const UPLOAD_CONTENT_TYPES = ['application/gzip', 'application/octet-stream'];
15
16
  const tags = ['Releases'];
16
17
  /**
@@ -96,6 +97,22 @@ export function createReleasesApi(services, options) {
96
97
  const data = services.environments.drivers(person(context));
97
98
  return context.json({ data, meta: { total: data.length } });
98
99
  });
100
+ // The runtimes environments share, for the environments page; outside `/environments`, where every segment names one.
101
+ api.get('/hosts', settings('read'), describeRoute({
102
+ tags,
103
+ summary: 'List shared app hosts',
104
+ operationId: 'releasesListHosts',
105
+ // The environments page's block; `app get` answers an App's own host.
106
+ ...cliRoute(false),
107
+ description: 'Requires the `rel.environments` `read` setting. Each runtime the environments with Apps share, once: its memory, how many Apps run or start on it against its limit, and its restart state — totals of the whole runtime, every environment on it included. An environment’s restore error only reaches those with the `manage` setting.',
108
+ responses: {
109
+ 200: listResponse(ReleasesSharedHostSchema, ReleasesTotalMeta),
110
+ ...apiErrorResponses,
111
+ },
112
+ }), async (context) => {
113
+ const data = await services.releases.listHosts(person(context));
114
+ return context.json({ data, meta: { total: data.length } });
115
+ });
99
116
  // --- Environments. `check` is a fixed segment, registered before `:environmentId`; no environment may take it. ---
100
117
  api.get('/environments', environmentReader, describeRoute({
101
118
  tags,
@@ -104,12 +121,12 @@ export function createReleasesApi(services, options) {
104
121
  security: personOrRunSecurity,
105
122
  ...cliRoute({
106
123
  command: 'env list',
107
- columns: ['id', 'name', 'driver', 'protected'],
124
+ columns: ['id', 'name', 'driver', 'protected', 'appCount'],
108
125
  action: 'rel.environments/read',
109
126
  }),
110
127
  description: 'Requires the `rel.environments` `read` setting, access to the Apps page, or the `create` action on every App.',
111
128
  responses: {
112
- 200: listResponse(ReleasesEnvironmentSchema, ReleasesTotalMeta),
129
+ 200: listResponse(ReleasesEnvironmentListItemSchema, ReleasesTotalMeta),
113
130
  ...apiErrorResponses,
114
131
  },
115
132
  }), async (context) => {
@@ -130,7 +147,7 @@ export function createReleasesApi(services, options) {
130
147
  },
131
148
  bodyFile: 'file',
132
149
  examples: [
133
- 'env create staging --name Staging --driver host --protected',
150
+ 'env create staging --name Staging --driver host --purpose test --protected',
134
151
  'env create production --file production.json',
135
152
  ],
136
153
  action: 'rel.environments/manage',
@@ -521,7 +538,14 @@ export function createReleasesApi(services, options) {
521
538
  command: 'app list',
522
539
  flags: {
523
540
  pageSize: { name: 'limit' },
524
- environmentId: { name: 'env' },
541
+ environmentId: {
542
+ name: 'env',
543
+ description: 'An environment; repeat for more.',
544
+ },
545
+ runtimeState: {
546
+ name: 'state',
547
+ description: 'A runtime state (running, starting, pending, waiting, stopped, failed, unknown); repeat for more.',
548
+ },
525
549
  q: { name: 'search' },
526
550
  label: { description: 'A label (key=value); repeat for more.' },
527
551
  },
@@ -535,7 +559,7 @@ export function createReleasesApi(services, options) {
535
559
  ],
536
560
  action: 'rel.apps/view',
537
561
  }),
538
- description: 'Requires the `view` action; lists the Apps it reaches. `q` searches, `label=key=value` (repeatable) filters by label.',
562
+ description: 'Requires the `view` action; lists the Apps it reaches. `q` searches, `environmentId` (repeatable) keeps the Apps of those environments, `runtimeState` (repeatable) those whose runtime is in those states, and `label=key=value` (repeatable) filters by label; every filter applies before the page is cut, so `total` counts the matches.',
539
563
  responses: {
540
564
  200: listResponse(ReleasesAppSchema, ReleasesPageMeta),
541
565
  ...apiErrorResponses,
@@ -546,9 +570,8 @@ export function createReleasesApi(services, options) {
546
570
  page: query.page,
547
571
  pageSize: query.pageSize,
548
572
  ...(query.q === undefined ? {} : { search: query.q }),
549
- ...(query.environmentId === undefined
550
- ? {}
551
- : { environmentId: query.environmentId }),
573
+ environmentIds: query.environmentId,
574
+ runStates: query.runtimeState,
552
575
  labels: parseLabelFilter(query.label),
553
576
  });
554
577
  return context.json({ data: result.items, meta: pageMeta(result) });
@@ -828,11 +851,11 @@ export function createReleasesApi(services, options) {
828
851
  operationId: 'releasesGetInitialAdmin',
829
852
  // A password: it stays out of the command line, so it never lands in a terminal's history or an agent's log.
830
853
  ...cliRoute(false),
831
- description: 'Requires the `deploy` action on the App. People only: agents and keys are refused. The first administrator its first deployment generated, until someone saves it (`dismiss`) or 24 hours pass (a preview App’s stays until the App goes).',
854
+ description: 'Requires the `deploy` action on the App. People only: agents and keys are refused. The first administrator its first deployment generated, until someone saves it (`dismiss`) or the App is removed.',
832
855
  responses: {
833
856
  200: dataResponse(ReleasesInitialAdminSchema),
834
857
  ...apiErrorResponses,
835
- 404: apiErrorResponse(404, 'Nothing to show: it was saved or expired, or none was generated (`INITIAL_ADMIN_UNAVAILABLE`).'),
858
+ 404: apiErrorResponse(404, 'Nothing to show: it was saved or none was generated (`INITIAL_ADMIN_UNAVAILABLE`).'),
836
859
  },
837
860
  }), noStore, apiValidator('param', AppParams), async (context) => context.json({
838
861
  data: await services.releases.readInitialAdmin(person(context), context.req.valid('param').appId),
@@ -920,7 +943,7 @@ export function createReleasesApi(services, options) {
920
943
  201: dataResponse(ReleasesReleaseSchema, 'The created release.'),
921
944
  202: dataResponse(ReleasesReleaseSchema, 'The created release, whose deployment (`deploymentId`) has started.'),
922
945
  ...apiErrorResponses,
923
- 400: apiErrorResponse(400, 'The archive is invalid or does not match its checksum, or its variables manifest is (`INVALID_VARIABLES_MANIFEST`), or deploying it is refused (`APPROVAL_REQUIRED` on a protected environment, `DEPLOYMENT_IN_PROGRESS`, `VARIABLES_MISSING`: the release is kept, and deploys by its ID once the variables are set).'),
946
+ 400: apiErrorResponse(400, 'The archive is invalid or does not match its checksum, or its variables manifest is (`INVALID_VARIABLES_MANIFEST`), or deploying it is refused (`APPROVAL_REQUIRED` on a protected environment, `VARIABLES_MISSING`: the release is kept, and deploys by its ID once the variables are set).'),
924
947
  404: apiErrorResponse(404),
925
948
  409: apiErrorResponse(409, 'The idempotency key was used for another archive (`IDEMPOTENCY_CONFLICT`).'),
926
949
  413: apiErrorResponse(413, 'The archive exceeds the size limit (`ARTIFACT_TOO_LARGE`).'),
@@ -971,7 +994,8 @@ export function createReleasesApi(services, options) {
971
994
  via: caller.kind,
972
995
  appId,
973
996
  releaseId: release.id,
974
- });
997
+ ...(ticketId ? { ticketId } : {}),
998
+ }, context);
975
999
  // An upload that also deploys answers before the deployment finishes; its progress is the deployment's.
976
1000
  return context.json({ data: release }, release.reused ? 200 : release.deploymentId ? 202 : 201);
977
1001
  }
@@ -983,6 +1007,7 @@ export function createReleasesApi(services, options) {
983
1007
  tags,
984
1008
  summary: 'Get a release',
985
1009
  operationId: 'releasesGetRelease',
1010
+ security: personOrRunSecurity,
986
1011
  ...cliRoute({
987
1012
  command: 'release get',
988
1013
  flags: { appId: { name: 'app' }, releaseId: { name: 'release' } },
@@ -1000,6 +1025,54 @@ export function createReleasesApi(services, options) {
1000
1025
  data: await services.releases.getRelease(person(context), appId, releaseId),
1001
1026
  });
1002
1027
  });
1028
+ api.get('/apps/:appId/releases/:releaseId/archive', onApps('view'), describeRoute({
1029
+ tags,
1030
+ summary: "Download a release's archive",
1031
+ operationId: 'releasesDownloadReleaseArchive',
1032
+ security: personOrRunSecurity,
1033
+ ...cliRoute({
1034
+ command: 'release download',
1035
+ flags: { appId: { name: 'app' }, releaseId: { name: 'release' } },
1036
+ action: 'rel.apps/view',
1037
+ examples: ['release download --app <app> --release <release> --out .'],
1038
+ }),
1039
+ description: 'Requires the `view` action on the App. Answers the uploaded `.tar.gz` as `<appId>-<version>.tar.gz`, with its SHA-256 in `X-Artifact-Sha256`. An image release has no archive (`RELEASE_HAS_NO_ARCHIVE`).',
1040
+ responses: {
1041
+ 200: {
1042
+ description: 'The archive.',
1043
+ headers: {
1044
+ 'Content-Disposition': {
1045
+ description: '`attachment`, named `<appId>-<version>.tar.gz`.',
1046
+ schema: { type: 'string' },
1047
+ },
1048
+ 'X-Artifact-Sha256': {
1049
+ description: "The archive's SHA-256, hex.",
1050
+ schema: { type: 'string' },
1051
+ },
1052
+ },
1053
+ content: {
1054
+ 'application/gzip': {
1055
+ schema: { type: 'string', format: 'binary' },
1056
+ },
1057
+ },
1058
+ },
1059
+ ...apiErrorResponses,
1060
+ 404: apiErrorResponse(404, 'The App or release does not exist, or its archive is missing from the artifact storage (reason `RELEASE_ARCHIVE_NOT_FOUND`).'),
1061
+ 400: apiErrorResponse(400, 'An image release has no archive (`FAILED_PRECONDITION`, reason `RELEASE_HAS_NO_ARCHIVE`).'),
1062
+ },
1063
+ }), apiValidator('param', ReleaseParams), async (context) => {
1064
+ const { appId, releaseId } = context.req.valid('param');
1065
+ const archive = await services.releases.openArchive(person(context), appId, releaseId);
1066
+ const headers = {
1067
+ 'Content-Type': 'application/gzip',
1068
+ 'Content-Disposition': `attachment; filename="${archive.fileName}"`,
1069
+ 'X-Artifact-Sha256': archive.checksum,
1070
+ 'Cache-Control': 'private, no-store',
1071
+ };
1072
+ if (archive.size !== null)
1073
+ headers['Content-Length'] = String(archive.size);
1074
+ return new Response(Readable.toWeb(archive.stream), { headers });
1075
+ });
1003
1076
  api.patch('/apps/:appId/releases/:releaseId', onApps('upload'), describeRoute({
1004
1077
  tags,
1005
1078
  summary: "Replace a release's labels",
@@ -1107,7 +1180,7 @@ export function createReleasesApi(services, options) {
1107
1180
  actorId: caller.userId,
1108
1181
  appId: toAppId,
1109
1182
  releaseId: release.id,
1110
- });
1183
+ }, context);
1111
1184
  return context.json({ data: release });
1112
1185
  });
1113
1186
  // An image CI built and pushed, registered by digest as a release (`upload` on the App).
@@ -1151,7 +1224,7 @@ export function createReleasesApi(services, options) {
1151
1224
  via: caller.kind,
1152
1225
  appId,
1153
1226
  releaseId: release.id,
1154
- });
1227
+ }, context);
1155
1228
  if (!deploy)
1156
1229
  return context.json({ data: release }, release.reused ? 200 : 201);
1157
1230
  const deployment = await services.releases.deploy(caller, appId, {
@@ -1186,7 +1259,7 @@ export function createReleasesApi(services, options) {
1186
1259
  actorId: caller.userId,
1187
1260
  appId,
1188
1261
  ticketId: ticket.id,
1189
- });
1262
+ }, context);
1190
1263
  return context.json({ data: ticket }, 201);
1191
1264
  });
1192
1265
  // --- Deployments. Deploying answers 202 with the deployment, whose progress `GET` reads. ---
@@ -1205,12 +1278,12 @@ export function createReleasesApi(services, options) {
1205
1278
  },
1206
1279
  action: 'rel.apps/deploy',
1207
1280
  }),
1208
- description: 'Requires the `deploy` action on the App. A protected environment is deployed only through a deployment request an approver approves (`POST /apps/{appId}/deploymentRequests`), so deploying there directly is refused. The `Idempotency-Key` header, or `idempotencyKey`, answers a repeated request with its first deployment.',
1281
+ description: 'Requires the `deploy` action on the App. A protected environment is deployed only through a deployment request an approver approves (`POST /apps/{appId}/deploymentRequests`), so deploying there directly is refused. A new deployment replaces older queued deployments of the same App; running deployments continue. The `Idempotency-Key` header, or `idempotencyKey`, answers a repeated request with its first deployment.',
1209
1282
  responses: {
1210
1283
  200: dataResponse(ReleasesDeploymentSchema, 'With `wait=true`: the deployment, finished.'),
1211
1284
  202: dataResponse(ReleasesDeploymentSchema, 'The deployment, which continues in the background; read it for progress.'),
1212
1285
  ...apiErrorResponses,
1213
- 400: apiErrorResponse(400, 'The release is not given, the environment is protected (`APPROVAL_REQUIRED`: request the deployment instead), a deployment is in progress (`DEPLOYMENT_IN_PROGRESS`) or a required variable is not set (`VARIABLES_MISSING`, naming them in `metadata.variables`).'),
1286
+ 400: apiErrorResponse(400, 'The release is not given, the environment is protected (`APPROVAL_REQUIRED`: request the deployment instead), a required variable is not set (`VARIABLES_MISSING`, naming them in `metadata.variables`).'),
1214
1287
  404: apiErrorResponse(404),
1215
1288
  409: apiErrorResponse(409, 'The idempotency key was used for another request (`IDEMPOTENCY_CONFLICT`).'),
1216
1289
  },
@@ -1232,7 +1305,7 @@ export function createReleasesApi(services, options) {
1232
1305
  if (context.req.valid('query').wait !== 'true')
1233
1306
  return context.json({ data: deployment }, 202);
1234
1307
  const settled = await services.releases.waitForDeployment(deployment.id, 100_000);
1235
- const finished = settled.status !== 'queued' && settled.status !== 'deploying';
1308
+ const finished = !['queued', 'deploying', 'cancelling'].includes(settled.status);
1236
1309
  return context.json({ data: settled }, finished ? 200 : 202);
1237
1310
  });
1238
1311
  api.post('/apps/:appId/rollback', onApps('deploy'), describeRoute({
@@ -1249,7 +1322,7 @@ export function createReleasesApi(services, options) {
1249
1322
  responses: {
1250
1323
  202: dataResponse(ReleasesDeploymentSchema, 'The rollback deployment, which continues in the background.'),
1251
1324
  ...apiErrorResponses,
1252
- 400: apiErrorResponse(400, 'The target is not a successful deployment of this App (`INVALID_ROLLBACK_TARGET`), the environment is protected (`APPROVAL_REQUIRED`) or a deployment is in progress.'),
1325
+ 400: apiErrorResponse(400, 'The target is not a successful deployment of this App (`INVALID_ROLLBACK_TARGET`), the environment is protected (`APPROVAL_REQUIRED`).'),
1253
1326
  404: apiErrorResponse(404),
1254
1327
  },
1255
1328
  }), apiValidator('param', AppParams), apiValidator('json', RollbackBody), async (context) => {
@@ -1298,6 +1371,33 @@ export function createReleasesApi(services, options) {
1298
1371
  return context.json({ data: result.items, meta: pageMeta(result) });
1299
1372
  });
1300
1373
  // Whoever may deploy the App reads a deployment too, so CI holding only a deploying key can wait for the result.
1374
+ api.post('/apps/:appId/deployments/:deploymentId/cancel', onApps('deploy'), describeRoute({
1375
+ tags,
1376
+ summary: 'Cancel a deployment',
1377
+ operationId: 'releasesCancelDeployment',
1378
+ security: personOrRunSecurity,
1379
+ ...cliRoute({
1380
+ command: 'deploy cancel',
1381
+ flags: { appId: { name: 'app' }, deploymentId: { name: 'deployment' } },
1382
+ action: 'rel.apps/deploy',
1383
+ }),
1384
+ description: 'Requires the deploy action on the App. Cancels a queued deployment immediately; a running deployment stops after its current step and cleanup. Refused once switching starts. Repeating cancellation is safe.',
1385
+ responses: {
1386
+ 200: dataResponse(ReleasesDeploymentSchema),
1387
+ ...apiErrorResponses,
1388
+ 400: apiErrorResponse(400, 'The deployment has started switching or finished (DEPLOYMENT_NOT_CANCELLABLE), or the driver does not support cancellation.'),
1389
+ 404: apiErrorResponse(404),
1390
+ },
1391
+ }), apiValidator('param', DeploymentParams), async (context) => {
1392
+ const { appId, deploymentId } = context.req.valid('param');
1393
+ const data = await services.releases.cancelDeployment(person(context), appId, deploymentId);
1394
+ log('releases.deployment.cancel', {
1395
+ actorId: person(context).userId,
1396
+ appId,
1397
+ deploymentId,
1398
+ });
1399
+ return context.json({ data });
1400
+ });
1301
1401
  api.get('/apps/:appId/deployments/:deploymentId', onApps('view', 'deploy'), describeRoute({
1302
1402
  tags,
1303
1403
  summary: 'Get a deployment',