@nexical/cli 0.11.23 → 0.12.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 (91) hide show
  1. package/README.md +90 -235
  2. package/dist/{chunk-OYFWMYPG.js → chunk-6DE5Q66O.js} +6 -1
  3. package/dist/{chunk-OYFWMYPG.js.map → chunk-6DE5Q66O.js.map} +1 -1
  4. package/dist/chunk-G66GMEFE.js +31 -0
  5. package/dist/chunk-G66GMEFE.js.map +1 -0
  6. package/dist/{chunk-2FKDEDDE.js → chunk-HOVS7SCD.js} +16 -3
  7. package/dist/chunk-HOVS7SCD.js.map +1 -0
  8. package/dist/{chunk-GUUPSHWC.js → chunk-JEMIKBGX.js} +3 -3
  9. package/dist/chunk-JGAMEJTL.js +4101 -0
  10. package/dist/chunk-JGAMEJTL.js.map +1 -0
  11. package/dist/{chunk-OUGA4CB4.js → chunk-JS6WL5NS.js} +2 -2
  12. package/dist/{chunk-GEESHGE4.js → chunk-L2RUXOL4.js} +2 -2
  13. package/dist/{chunk-54HY52LH.js → chunk-QTJIGPQ3.js} +2 -2
  14. package/dist/{chunk-EKCOW7FM.js → chunk-USP2MI63.js} +41 -23
  15. package/dist/chunk-USP2MI63.js.map +1 -0
  16. package/dist/{chunk-2JW5BYZW.js → chunk-VKE7R2EZ.js} +2 -2
  17. package/dist/{chunk-AC4B3HPJ.js → chunk-XONR27KC.js} +2 -2
  18. package/dist/{chunk-PJIOCW2A.js → chunk-ZWNIZB3Q.js} +2 -2
  19. package/dist/index.js +5 -5
  20. package/dist/index.js.map +1 -1
  21. package/dist/src/commands/deploy.d.ts +3 -3
  22. package/dist/src/commands/deploy.js +134 -78
  23. package/dist/src/commands/deploy.js.map +1 -1
  24. package/dist/src/commands/init.js +5 -5
  25. package/dist/src/commands/module/add.js +4 -4
  26. package/dist/src/commands/module/list.js +2 -2
  27. package/dist/src/commands/module/remove.js +2 -2
  28. package/dist/src/commands/module/update.js +2 -2
  29. package/dist/src/commands/prompt.js +2 -2
  30. package/dist/src/commands/run.js +2 -2
  31. package/dist/src/commands/setup.js +3 -3
  32. package/dist/src/deploy/config-manager.js +3 -2
  33. package/dist/src/deploy/providers/cloudflare.d.ts +13 -8
  34. package/dist/src/deploy/providers/cloudflare.js +161 -52
  35. package/dist/src/deploy/providers/cloudflare.js.map +1 -1
  36. package/dist/src/deploy/providers/dns-cloudflare.d.ts +9 -0
  37. package/dist/src/deploy/providers/dns-cloudflare.js +123 -0
  38. package/dist/src/deploy/providers/dns-cloudflare.js.map +1 -0
  39. package/dist/src/deploy/providers/github.d.ts +6 -2
  40. package/dist/src/deploy/providers/github.js +37 -45
  41. package/dist/src/deploy/providers/github.js.map +1 -1
  42. package/dist/src/deploy/providers/railway.d.ts +17 -8
  43. package/dist/src/deploy/providers/railway.js +106 -45
  44. package/dist/src/deploy/providers/railway.js.map +1 -1
  45. package/dist/src/deploy/registry.d.ts +7 -4
  46. package/dist/src/deploy/registry.js +2 -2
  47. package/dist/src/deploy/schema.d.ts +188 -0
  48. package/dist/src/deploy/schema.js +11 -0
  49. package/dist/src/deploy/schema.js.map +1 -0
  50. package/dist/src/deploy/template-manager.d.ts +12 -0
  51. package/dist/src/deploy/template-manager.js +9 -0
  52. package/dist/src/deploy/template-manager.js.map +1 -0
  53. package/dist/src/deploy/types.d.ts +42 -17
  54. package/dist/src/deploy/types.js +1 -1
  55. package/dist/src/deploy/types.js.map +1 -1
  56. package/dist/src/deploy/utils.js +2 -2
  57. package/dist/src/utils/discovery.js +2 -2
  58. package/dist/src/utils/filter.js +2 -2
  59. package/dist/src/utils/git.js +2 -2
  60. package/dist/src/utils/url-resolver.js +2 -2
  61. package/dist/templates/github-workflow.yaml +23 -0
  62. package/package.json +2 -2
  63. package/src/commands/deploy.ts +157 -93
  64. package/src/deploy/config-manager.ts +14 -1
  65. package/src/deploy/providers/cloudflare.ts +203 -80
  66. package/src/deploy/providers/dns-cloudflare.ts +134 -0
  67. package/src/deploy/providers/github.ts +44 -47
  68. package/src/deploy/providers/railway.ts +135 -55
  69. package/src/deploy/registry.ts +49 -28
  70. package/src/deploy/schema.ts +39 -0
  71. package/src/deploy/template-manager.ts +32 -0
  72. package/src/deploy/templates/github-workflow.yaml +23 -0
  73. package/src/deploy/types.ts +48 -16
  74. package/test/integration/commands/deploy.integration.test.ts +79 -3
  75. package/test/unit/commands/deploy.test.ts +96 -198
  76. package/test/unit/deploy/config-manager.test.ts +9 -5
  77. package/test/unit/deploy/providers/cloudflare.test.ts +95 -96
  78. package/test/unit/deploy/providers/dns-cloudflare.test.ts +148 -0
  79. package/test/unit/deploy/providers/github.test.ts +43 -47
  80. package/test/unit/deploy/providers/railway.test.ts +50 -261
  81. package/test/unit/deploy/registry.test.ts +20 -17
  82. package/tsup.config.ts +3 -0
  83. package/dist/chunk-2FKDEDDE.js.map +0 -1
  84. package/dist/chunk-EKCOW7FM.js.map +0 -1
  85. /package/dist/{chunk-GUUPSHWC.js.map → chunk-JEMIKBGX.js.map} +0 -0
  86. /package/dist/{chunk-OUGA4CB4.js.map → chunk-JS6WL5NS.js.map} +0 -0
  87. /package/dist/{chunk-GEESHGE4.js.map → chunk-L2RUXOL4.js.map} +0 -0
  88. /package/dist/{chunk-54HY52LH.js.map → chunk-QTJIGPQ3.js.map} +0 -0
  89. /package/dist/{chunk-2JW5BYZW.js.map → chunk-VKE7R2EZ.js.map} +0 -0
  90. /package/dist/{chunk-AC4B3HPJ.js.map → chunk-XONR27KC.js.map} +0 -0
  91. /package/dist/{chunk-PJIOCW2A.js.map → chunk-ZWNIZB3Q.js.map} +0 -0
@@ -0,0 +1,188 @@
1
+ import { z } from 'zod';
2
+
3
+ declare const AppConfigSchema: z.ZodObject<{
4
+ provider: z.ZodString;
5
+ projectName: z.ZodOptional<z.ZodString>;
6
+ target: z.ZodOptional<z.ZodString>;
7
+ buildCommand: z.ZodOptional<z.ZodString>;
8
+ artifactPath: z.ZodOptional<z.ZodString>;
9
+ paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
10
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
11
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
12
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
13
+ domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
14
+ dnsTarget: z.ZodOptional<z.ZodString>;
15
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
16
+ provider: z.ZodString;
17
+ projectName: z.ZodOptional<z.ZodString>;
18
+ target: z.ZodOptional<z.ZodString>;
19
+ buildCommand: z.ZodOptional<z.ZodString>;
20
+ artifactPath: z.ZodOptional<z.ZodString>;
21
+ paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
22
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
23
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
24
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
25
+ domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
26
+ dnsTarget: z.ZodOptional<z.ZodString>;
27
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
28
+ provider: z.ZodString;
29
+ projectName: z.ZodOptional<z.ZodString>;
30
+ target: z.ZodOptional<z.ZodString>;
31
+ buildCommand: z.ZodOptional<z.ZodString>;
32
+ artifactPath: z.ZodOptional<z.ZodString>;
33
+ paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
34
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
35
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
36
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
37
+ domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
38
+ dnsTarget: z.ZodOptional<z.ZodString>;
39
+ }, z.ZodTypeAny, "passthrough">>;
40
+ declare const DeploymentSchema: z.ZodObject<{
41
+ deploy: z.ZodOptional<z.ZodObject<{
42
+ repository: z.ZodOptional<z.ZodObject<{
43
+ provider: z.ZodString;
44
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ provider: string;
47
+ options?: Record<string, any> | undefined;
48
+ }, {
49
+ provider: string;
50
+ options?: Record<string, any> | undefined;
51
+ }>>;
52
+ dns: z.ZodOptional<z.ZodObject<{
53
+ provider: z.ZodString;
54
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
55
+ provider: z.ZodString;
56
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
57
+ provider: z.ZodString;
58
+ }, z.ZodTypeAny, "passthrough">>>;
59
+ apps: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
60
+ provider: z.ZodString;
61
+ projectName: z.ZodOptional<z.ZodString>;
62
+ target: z.ZodOptional<z.ZodString>;
63
+ buildCommand: z.ZodOptional<z.ZodString>;
64
+ artifactPath: z.ZodOptional<z.ZodString>;
65
+ paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
66
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
67
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
68
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
69
+ domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
70
+ dnsTarget: z.ZodOptional<z.ZodString>;
71
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
72
+ provider: z.ZodString;
73
+ projectName: z.ZodOptional<z.ZodString>;
74
+ target: z.ZodOptional<z.ZodString>;
75
+ buildCommand: z.ZodOptional<z.ZodString>;
76
+ artifactPath: z.ZodOptional<z.ZodString>;
77
+ paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
78
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
79
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
80
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
81
+ domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
82
+ dnsTarget: z.ZodOptional<z.ZodString>;
83
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
84
+ provider: z.ZodString;
85
+ projectName: z.ZodOptional<z.ZodString>;
86
+ target: z.ZodOptional<z.ZodString>;
87
+ buildCommand: z.ZodOptional<z.ZodString>;
88
+ artifactPath: z.ZodOptional<z.ZodString>;
89
+ paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
90
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
91
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
92
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
93
+ domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
94
+ dnsTarget: z.ZodOptional<z.ZodString>;
95
+ }, z.ZodTypeAny, "passthrough">>>>;
96
+ }, "strip", z.ZodTypeAny, {
97
+ apps?: Record<string, z.objectOutputType<{
98
+ provider: z.ZodString;
99
+ projectName: z.ZodOptional<z.ZodString>;
100
+ target: z.ZodOptional<z.ZodString>;
101
+ buildCommand: z.ZodOptional<z.ZodString>;
102
+ artifactPath: z.ZodOptional<z.ZodString>;
103
+ paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
104
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
105
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
106
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
107
+ domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
108
+ dnsTarget: z.ZodOptional<z.ZodString>;
109
+ }, z.ZodTypeAny, "passthrough">> | undefined;
110
+ dns?: z.objectOutputType<{
111
+ provider: z.ZodString;
112
+ }, z.ZodTypeAny, "passthrough"> | undefined;
113
+ repository?: {
114
+ provider: string;
115
+ options?: Record<string, any> | undefined;
116
+ } | undefined;
117
+ }, {
118
+ apps?: Record<string, z.objectInputType<{
119
+ provider: z.ZodString;
120
+ projectName: z.ZodOptional<z.ZodString>;
121
+ target: z.ZodOptional<z.ZodString>;
122
+ buildCommand: z.ZodOptional<z.ZodString>;
123
+ artifactPath: z.ZodOptional<z.ZodString>;
124
+ paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
125
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
126
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
127
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
128
+ domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
129
+ dnsTarget: z.ZodOptional<z.ZodString>;
130
+ }, z.ZodTypeAny, "passthrough">> | undefined;
131
+ dns?: z.objectInputType<{
132
+ provider: z.ZodString;
133
+ }, z.ZodTypeAny, "passthrough"> | undefined;
134
+ repository?: {
135
+ provider: string;
136
+ options?: Record<string, any> | undefined;
137
+ } | undefined;
138
+ }>>;
139
+ }, "strip", z.ZodTypeAny, {
140
+ deploy?: {
141
+ apps?: Record<string, z.objectOutputType<{
142
+ provider: z.ZodString;
143
+ projectName: z.ZodOptional<z.ZodString>;
144
+ target: z.ZodOptional<z.ZodString>;
145
+ buildCommand: z.ZodOptional<z.ZodString>;
146
+ artifactPath: z.ZodOptional<z.ZodString>;
147
+ paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
148
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
149
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
150
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
151
+ domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
152
+ dnsTarget: z.ZodOptional<z.ZodString>;
153
+ }, z.ZodTypeAny, "passthrough">> | undefined;
154
+ dns?: z.objectOutputType<{
155
+ provider: z.ZodString;
156
+ }, z.ZodTypeAny, "passthrough"> | undefined;
157
+ repository?: {
158
+ provider: string;
159
+ options?: Record<string, any> | undefined;
160
+ } | undefined;
161
+ } | undefined;
162
+ }, {
163
+ deploy?: {
164
+ apps?: Record<string, z.objectInputType<{
165
+ provider: z.ZodString;
166
+ projectName: z.ZodOptional<z.ZodString>;
167
+ target: z.ZodOptional<z.ZodString>;
168
+ buildCommand: z.ZodOptional<z.ZodString>;
169
+ artifactPath: z.ZodOptional<z.ZodString>;
170
+ paths: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
171
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
172
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
173
+ secrets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
174
+ domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
175
+ dnsTarget: z.ZodOptional<z.ZodString>;
176
+ }, z.ZodTypeAny, "passthrough">> | undefined;
177
+ dns?: z.objectInputType<{
178
+ provider: z.ZodString;
179
+ }, z.ZodTypeAny, "passthrough"> | undefined;
180
+ repository?: {
181
+ provider: string;
182
+ options?: Record<string, any> | undefined;
183
+ } | undefined;
184
+ } | undefined;
185
+ }>;
186
+ type ValidatedNexicalConfig = z.infer<typeof DeploymentSchema>;
187
+
188
+ export { AppConfigSchema, DeploymentSchema, type ValidatedNexicalConfig };
@@ -0,0 +1,11 @@
1
+ import { createRequire } from "module"; const require = createRequire(import.meta.url);
2
+ import {
3
+ AppConfigSchema,
4
+ DeploymentSchema
5
+ } from "../../chunk-JGAMEJTL.js";
6
+ import "../../chunk-6DE5Q66O.js";
7
+ export {
8
+ AppConfigSchema,
9
+ DeploymentSchema
10
+ };
11
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,12 @@
1
+ interface WorkflowTemplateData {
2
+ APP_NAME: string;
3
+ PROVIDER_NAME: string;
4
+ [key: string]: string;
5
+ }
6
+ declare class TemplateManager {
7
+ private templatesDir;
8
+ constructor();
9
+ loadWorkflow(name: string, data: WorkflowTemplateData): Promise<unknown>;
10
+ }
11
+
12
+ export { TemplateManager, type WorkflowTemplateData };
@@ -0,0 +1,9 @@
1
+ import { createRequire } from "module"; const require = createRequire(import.meta.url);
2
+ import {
3
+ TemplateManager
4
+ } from "../../chunk-G66GMEFE.js";
5
+ import "../../chunk-6DE5Q66O.js";
6
+ export {
7
+ TemplateManager
8
+ };
9
+ //# sourceMappingURL=template-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -6,42 +6,67 @@ interface CIConfig {
6
6
  deploySteps?: string[];
7
7
  githubActionStep?: Record<string, unknown>;
8
8
  }
9
+ interface AppConfig {
10
+ name: string;
11
+ provider: string;
12
+ projectName?: string;
13
+ target?: string;
14
+ buildCommand?: string;
15
+ artifactPath?: string;
16
+ paths?: string[];
17
+ options?: Record<string, unknown>;
18
+ env?: Record<string, string>;
19
+ secrets?: Record<string, string>;
20
+ domain?: string | string[];
21
+ dnsTarget?: string;
22
+ [key: string]: unknown;
23
+ }
9
24
  interface DeploymentContext {
10
25
  cwd: string;
11
26
  config: NexicalConfig;
12
27
  options: Record<string, unknown>;
13
28
  }
14
- interface DeploymentProvider {
29
+ interface HostingProvider {
15
30
  name: string;
16
- type: 'frontend' | 'backend';
17
- provision(context: DeploymentContext): Promise<void>;
18
- getCIConfig(repoType: 'github' | 'gitlab'): CIConfig;
19
- getSecrets(context: DeploymentContext): Promise<Record<string, string>>;
20
- getVariables(context: DeploymentContext): Promise<Record<string, string>>;
31
+ provision(context: DeploymentContext, app: AppConfig): Promise<void>;
32
+ getCIConfig(repoType: 'github' | 'gitlab', app: AppConfig): CIConfig;
33
+ getSecrets(context: DeploymentContext, app: AppConfig): Promise<Record<string, string>>;
34
+ getVariables(context: DeploymentContext, app: AppConfig): Promise<Record<string, string>>;
35
+ deploy?(context: DeploymentContext, app: AppConfig): Promise<void>;
36
+ getDefaultDnsTarget?(app: AppConfig): string | undefined;
21
37
  }
22
38
  interface RepositoryProvider {
23
39
  name: string;
24
40
  configureSecrets(context: DeploymentContext, secrets: Record<string, string>): Promise<void>;
25
41
  configureVariables(context: DeploymentContext, variables: Record<string, string>): Promise<void>;
26
- generateWorkflow(context: DeploymentContext, targets: DeploymentProvider[]): Promise<void>;
42
+ generateWorkflow(context: DeploymentContext, targets: {
43
+ provider: HostingProvider;
44
+ app: AppConfig;
45
+ }[]): Promise<void>;
27
46
  }
28
47
  interface NexicalConfig {
29
48
  deploy?: {
30
- backend?: {
31
- provider: string;
32
- projectName?: string;
33
- options?: Record<string, unknown>;
34
- };
35
- frontend?: {
49
+ apps?: Record<string, Omit<AppConfig, 'name'>>;
50
+ repository?: {
36
51
  provider: string;
37
- projectName?: string;
38
52
  options?: Record<string, unknown>;
39
53
  };
40
- repository?: {
54
+ dns?: {
41
55
  provider: string;
42
- options?: Record<string, unknown>;
56
+ [key: string]: unknown;
43
57
  };
44
58
  };
45
59
  }
60
+ interface DnsRecord {
61
+ type: string;
62
+ name: string;
63
+ content: string;
64
+ proxied?: boolean;
65
+ }
66
+ interface DnsProvider {
67
+ name: string;
68
+ type?: 'dns';
69
+ provision(context: DeploymentContext, records: DnsRecord[]): Promise<void>;
70
+ }
46
71
 
47
- export type { CIConfig, DeploymentContext, DeploymentProvider, NexicalConfig, RepositoryProvider };
72
+ export type { AppConfig, CIConfig, DeploymentContext, DnsProvider, DnsRecord, HostingProvider, NexicalConfig, RepositoryProvider };
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from "module"; const require = createRequire(import.meta.url);
2
2
  import {
3
3
  init_esm_shims
4
- } from "../../chunk-OYFWMYPG.js";
4
+ } from "../../chunk-6DE5Q66O.js";
5
5
 
6
6
  // src/deploy/types.ts
7
7
  init_esm_shims();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/deploy/types.ts"],"sourcesContent":["export interface CIConfig {\n secrets: string[];\n variables: string[];\n installSteps?: string[];\n buildSteps?: string[];\n deploySteps?: string[];\n // Platform specific overrides (e.g. uses: action/...)\n githubActionStep?: Record<string, unknown>;\n}\n\nexport interface DeploymentContext {\n cwd: string;\n config: NexicalConfig;\n options: Record<string, unknown>;\n}\n\nexport interface DeploymentProvider {\n name: string;\n type: 'frontend' | 'backend';\n\n // Interactive or automatic setup of the provider resources\n provision(context: DeploymentContext): Promise<void>;\n\n // Returns the CI configuration for this provider\n getCIConfig(repoType: 'github' | 'gitlab'): CIConfig;\n\n // Returns a map of secrets to be set in the repository (e.g. tokens, account IDs)\n // The provider is responsible for resolving these from config/env and throwing if missing.\n getSecrets(context: DeploymentContext): Promise<Record<string, string>>;\n\n // Returns a map of variables to be set in the repository (e.g. project names, service names)\n getVariables(context: DeploymentContext): Promise<Record<string, string>>;\n}\n\nexport interface RepositoryProvider {\n name: string;\n\n // Sets secrets/variables in the repo\n configureSecrets(context: DeploymentContext, secrets: Record<string, string>): Promise<void>;\n configureVariables(context: DeploymentContext, variables: Record<string, string>): Promise<void>;\n\n // Generates and writes the CI workflow files\n generateWorkflow(context: DeploymentContext, targets: DeploymentProvider[]): Promise<void>;\n}\n\nexport interface NexicalConfig {\n deploy?: {\n backend?: {\n provider: string;\n projectName?: string;\n options?: Record<string, unknown>;\n };\n frontend?: {\n provider: string;\n projectName?: string;\n options?: Record<string, unknown>;\n };\n repository?: {\n provider: string;\n options?: Record<string, unknown>;\n };\n };\n}\n"],"mappings":";;;;;;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../../src/deploy/types.ts"],"sourcesContent":["export interface CIConfig {\n secrets: string[];\n variables: string[];\n installSteps?: string[];\n buildSteps?: string[];\n deploySteps?: string[];\n // Platform specific overrides (e.g. uses: action/...)\n githubActionStep?: Record<string, unknown>;\n}\n\nexport interface AppConfig {\n name: string;\n provider: string;\n projectName?: string;\n target?: string;\n buildCommand?: string;\n artifactPath?: string;\n paths?: string[];\n options?: Record<string, unknown>;\n env?: Record<string, string>;\n secrets?: Record<string, string>;\n domain?: string | string[];\n dnsTarget?: string;\n [key: string]: unknown;\n}\n\nexport interface DeploymentContext {\n cwd: string;\n config: NexicalConfig;\n options: Record<string, unknown>;\n}\n\nexport interface HostingProvider {\n name: string;\n\n // Interactive or automatic setup of the provider resources\n provision(context: DeploymentContext, app: AppConfig): Promise<void>;\n\n // Returns the CI configuration for this provider\n getCIConfig(repoType: 'github' | 'gitlab', app: AppConfig): CIConfig;\n\n // Returns a map of secrets to be set in the repository (e.g. tokens, account IDs)\n // The provider is responsible for resolving these from config/env and throwing if missing.\n getSecrets(context: DeploymentContext, app: AppConfig): Promise<Record<string, string>>;\n\n // Returns a map of variables to be set in the repository (e.g. project names, service names)\n getVariables(context: DeploymentContext, app: AppConfig): Promise<Record<string, string>>;\n\n // Performs a manual build/deployment from the local machine\n deploy?(context: DeploymentContext, app: AppConfig): Promise<void>;\n\n // Optional: Automatically infer the DnsTarget from the hosting configuration\n getDefaultDnsTarget?(app: AppConfig): string | undefined;\n}\n\nexport interface RepositoryProvider {\n name: string;\n\n // Sets secrets/variables in the repo\n configureSecrets(context: DeploymentContext, secrets: Record<string, string>): Promise<void>;\n configureVariables(context: DeploymentContext, variables: Record<string, string>): Promise<void>;\n\n // Generates and writes the CI workflow files\n generateWorkflow(\n context: DeploymentContext,\n targets: { provider: HostingProvider; app: AppConfig }[],\n ): Promise<void>;\n}\n\nexport interface NexicalConfig {\n deploy?: {\n apps?: Record<string, Omit<AppConfig, 'name'>>;\n repository?: {\n provider: string;\n options?: Record<string, unknown>;\n };\n dns?: {\n provider: string;\n [key: string]: unknown;\n };\n };\n}\n\nexport interface DnsRecord {\n type: string;\n name: string;\n content: string;\n proxied?: boolean;\n}\n\nexport interface DnsProvider {\n name: string;\n type?: 'dns';\n provision(context: DeploymentContext, records: DnsRecord[]): Promise<void>;\n}\n"],"mappings":";;;;;;AAAA;","names":[]}
@@ -2,8 +2,8 @@ import { createRequire } from "module"; const require = createRequire(import.met
2
2
  import {
3
3
  checkCommand,
4
4
  execAsync
5
- } from "../../chunk-2JW5BYZW.js";
6
- import "../../chunk-OYFWMYPG.js";
5
+ } from "../../chunk-VKE7R2EZ.js";
6
+ import "../../chunk-6DE5Q66O.js";
7
7
  export {
8
8
  checkCommand,
9
9
  execAsync
@@ -1,8 +1,8 @@
1
1
  import { createRequire } from "module"; const require = createRequire(import.meta.url);
2
2
  import {
3
3
  discoverCommandDirectories
4
- } from "../../chunk-AC4B3HPJ.js";
5
- import "../../chunk-OYFWMYPG.js";
4
+ } from "../../chunk-XONR27KC.js";
5
+ import "../../chunk-6DE5Q66O.js";
6
6
  export {
7
7
  discoverCommandDirectories
8
8
  };
@@ -1,8 +1,8 @@
1
1
  import { createRequire } from "module"; const require = createRequire(import.meta.url);
2
2
  import {
3
3
  filterCommandDirectories
4
- } from "../../chunk-54HY52LH.js";
5
- import "../../chunk-OYFWMYPG.js";
4
+ } from "../../chunk-QTJIGPQ3.js";
5
+ import "../../chunk-6DE5Q66O.js";
6
6
  export {
7
7
  filterCommandDirectories
8
8
  };
@@ -12,8 +12,8 @@ import {
12
12
  renameBranch,
13
13
  renameRemote,
14
14
  updateSubmodules
15
- } from "../../chunk-GEESHGE4.js";
16
- import "../../chunk-OYFWMYPG.js";
15
+ } from "../../chunk-L2RUXOL4.js";
16
+ import "../../chunk-6DE5Q66O.js";
17
17
  export {
18
18
  addAll,
19
19
  addSubmodule,
@@ -1,8 +1,8 @@
1
1
  import { createRequire } from "module"; const require = createRequire(import.meta.url);
2
2
  import {
3
3
  resolveGitUrl
4
- } from "../../chunk-PJIOCW2A.js";
5
- import "../../chunk-OYFWMYPG.js";
4
+ } from "../../chunk-ZWNIZB3Q.js";
5
+ import "../../chunk-6DE5Q66O.js";
6
6
  export {
7
7
  resolveGitUrl
8
8
  };
@@ -0,0 +1,23 @@
1
+ name: Deploy ${APP_NAME} to ${PROVIDER_NAME}
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ workflow_dispatch: {}
6
+ jobs:
7
+ deploy:
8
+ runs-on: ubuntu-latest
9
+ permissions:
10
+ contents: read
11
+ deployments: write
12
+ steps:
13
+ - name: Checkout
14
+ uses: actions/checkout@v4
15
+ with:
16
+ submodules: recursive
17
+ - name: Setup Node
18
+ uses: actions/setup-node@v4
19
+ with:
20
+ node-version: 20
21
+ cache: npm
22
+ - name: Install Dependencies
23
+ run: npm ci
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@nexical/cli",
3
- "version": "0.11.23",
3
+ "version": "0.12.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "nexical": "./dist/index.js"
8
8
  },
9
9
  "scripts": {
10
- "build": "tsup",
10
+ "build": "tsup && cp -r src/deploy/templates dist/",
11
11
  "dev": "tsup --watch",
12
12
  "start": "node dist/index.js",
13
13
  "test": "npm run test:unit && npm run test:integration && npm run test:e2e",