@jakubmazanec/carson-templates 2.3.0-unstable.3a669f4 → 2.3.0-unstable.3faef2f

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jakubmazanec/carson-templates",
3
- "version": "2.3.0-unstable.3a669f4",
3
+ "version": "2.3.0-unstable.3faef2f",
4
4
  "description": "Collection of Carson templates.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -56,7 +56,17 @@ RUN npm ci --include=dev --ignore-scripts
56
56
  COPY --link . .
57
57
 
58
58
  # Build
59
+ <%
60
+ if (project.config.deployment?.dbInstance) {
61
+ -%>
62
+ RUN --mount=type=secret,id=EDGEDB_INSTANCE --mount=type=secret,id=EDGEDB_SECRET_KEY EDGEDB_INSTANCE="$(cat /run/secrets/EDGEDB_INSTANCE)" EDGEDB_SECRET_KEY="$(cat /run/secrets/EDGEDB_SECRET_KEY)" npm run build
63
+ <%
64
+ } else {
65
+ -%>
59
66
  RUN npm run build
67
+ <%
68
+ }
69
+ -%>
60
70
 
61
71
  # Final stage for app image
62
72
  FROM base
@@ -12,8 +12,9 @@ let tsconfig = lodash.merge(
12
12
  noEmit: true,
13
13
  resolveJsonModule: true,
14
14
  rootDir: '.',
15
+ exactOptionalPropertyTypes: project.config.deployment?.dbInstance ? false : true, // TODO: when EdgeDB client supports `exactOptionalPropertyTypes: true`, remove this line
15
16
  },
16
- include: ['./env.d.ts', './*', './app/**/*'],
17
+ include: project.config.deployment?.dbInstance ? ['./app/**/*', './dbschema/**/*', './*'] : ['./app/**/*', './*'],
17
18
  references: getReferences(workspace, project),
18
19
  },
19
20
  project.config.overrides?.tsconfig ?? {},
@@ -2,6 +2,19 @@
2
2
  to: 'tsconfig.typecheck.json'
3
3
  strategy: overwrite
4
4
  ---
5
+ <%
6
+ let tsconfig = lodash.merge(
7
+ {
8
+ extends: './tsconfig.json',
9
+ compilerOptions: {
10
+ composite: false,
11
+ },
12
+ include: project.config.deployment?.dbInstance ? ['./app/**/*', './dbschema/**/*', './tests/**/*', './*'] : ['./app/**/*', './tests/**/*', './*'],
13
+ references: getReferences(workspace, project),
14
+ },
15
+ project.config.overrides?.tsconfig ?? {},
16
+ );
17
+ -%>
5
18
  //
6
19
  // DO NOT EDIT!
7
20
  // This file was autogenerated by Carson.
@@ -10,10 +23,4 @@ strategy: overwrite
10
23
  // Run `npx carson update workspace` to regenerate.
11
24
  //
12
25
 
13
- {
14
- "extends": "./tsconfig.json",
15
- "compilerOptions": {
16
- "composite": false
17
- },
18
- "include": ["./app/**/*", "./tests/**/*", "./*"]
19
- }
26
+ <%- JSON.stringify(tsconfig, null, 2) %>
@@ -2,6 +2,21 @@
2
2
  to: '.github/workflows/check-pull-request.yaml'
3
3
  strategy: overwrite
4
4
  ---
5
+ <%
6
+ let appsWithDb = [];
7
+
8
+ for (let project of workspace.projects) {
9
+ if (project.config.deployment?.dbInstance) {
10
+ appsWithDb.push(project.name);
11
+ }
12
+ }
13
+
14
+ let appsWithDbFilter = appsWithDb.map((name) => `--filter=!${name}`).join(' ');
15
+
16
+ if (appsWithDbFilter) {
17
+ appsWithDbFilter = `-- ${appsWithDbFilter}`;
18
+ }
19
+ -%>
5
20
  #
6
21
  # DO NOT EDIT!
7
22
  # This file was autogenerated by Carson.
@@ -50,23 +65,10 @@ if (workspace.projects.some((project) => project.config.deployment?.dbInstance))
50
65
  -%>
51
66
 
52
67
  - uses: edgedb/setup-edgedb@v1
53
- - with:
68
+ with:
54
69
  server-version: none
55
70
  <%
56
71
  }
57
-
58
- for (let project of workspace.projects) {
59
- if (project.config.deployment?.dbInstance) {
60
- -%>
61
-
62
- - name: Authenticate EdgeDB Cloud
63
- env:
64
- EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
65
- run: |
66
- edgedb project init --link <%- project.config.deployment?.dbInstance %>
67
- <%
68
- }
69
- }
70
72
  -%>
71
73
 
72
74
  - name: Install packages
@@ -87,7 +89,24 @@ for (let project of workspace.projects) {
87
89
  git config --unset core.filemode
88
90
 
89
91
  - name: Run tests
90
- run: npm test
92
+ run: npm test <%- appsWithDbFilter %>
93
+
94
+ <%
95
+ for (let project of workspace.projects) {
96
+ if (project.config.deployment?.dbInstance) {
97
+ -%>
98
+
99
+ - name: Run tests
100
+ run: |
101
+ npm run test -- --filter=<%- project.name %>
102
+ env:
103
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
104
+ EDGEDB_BRANCH: ${{ github.head_ref }}
105
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
106
+ <%
107
+ }
108
+ }
109
+ -%>
91
110
 
92
111
  - name: Check for changes
93
112
  run: |
@@ -2,6 +2,21 @@
2
2
  to: '.github/workflows/release-pull-request.yaml'
3
3
  strategy: overwrite
4
4
  ---
5
+ <%
6
+ let appsWithDb = [];
7
+
8
+ for (let project of workspace.projects) {
9
+ if (project.config.deployment?.dbInstance) {
10
+ appsWithDb.push(project.name);
11
+ }
12
+ }
13
+
14
+ let appsWithDbFilter = appsWithDb.map((name) => `--filter=!${name}`).join(' ');
15
+
16
+ if (appsWithDbFilter) {
17
+ appsWithDbFilter = `-- ${appsWithDbFilter}`;
18
+ }
19
+ -%>
5
20
  #
6
21
  # DO NOT EDIT!
7
22
  # This file was autogenerated by Carson.
@@ -47,26 +62,20 @@ jobs:
47
62
  registry-url: 'https://registry.npmjs.org'
48
63
 
49
64
  <%
50
- if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
65
+ if (workspace.projects.some((project) => project.config.deployment?.appName)) {
51
66
  -%>
52
67
 
53
- - uses: edgedb/setup-edgedb@v1
54
- - with:
55
- server-version: none
68
+ - uses: superfly/flyctl-actions/setup-flyctl@master
56
69
  <%
57
70
  }
58
71
 
59
- for (let project of workspace.projects) {
60
- if (project.config.deployment?.dbInstance) {
72
+ if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
61
73
  -%>
62
74
 
63
- - name: Authenticate EdgeDB Cloud
64
- env:
65
- EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
66
- run: |
67
- edgedb project init --link <%- project.config.deployment?.dbInstance %>
75
+ - uses: edgedb/setup-edgedb@v1
76
+ with:
77
+ server-version: none
68
78
  <%
69
- }
70
79
  }
71
80
  -%>
72
81
 
@@ -88,7 +97,24 @@ for (let project of workspace.projects) {
88
97
  git config --unset core.filemode
89
98
 
90
99
  - name: Run tests
91
- run: npm test
100
+ run: npm test <%- appsWithDbFilter %>
101
+
102
+ <%
103
+ for (let project of workspace.projects) {
104
+ if (project.config.deployment?.dbInstance) {
105
+ -%>
106
+
107
+ - name: Run tests
108
+ run: |
109
+ npm run test -- --filter=<%- project.name %>
110
+ env:
111
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
112
+ EDGEDB_BRANCH: ${{ github.head_ref }}
113
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
114
+ <%
115
+ }
116
+ }
117
+ -%>
92
118
 
93
119
  - name: Check for changes
94
120
  run: |
@@ -105,7 +131,24 @@ for (let project of workspace.projects) {
105
131
  git config --unset core.filemode
106
132
 
107
133
  - name: Build packages
108
- run: npm run build
134
+ run: npm run build <%- appsWithDbFilter %>
135
+
136
+ <%
137
+ for (let project of workspace.projects) {
138
+ if (project.config.deployment?.dbInstance) {
139
+ -%>
140
+
141
+ - name: Build <%- project.name %>
142
+ run: |
143
+ npm run build -- --filter=<%- project.name %>
144
+ env:
145
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
146
+ EDGEDB_BRANCH: ${{ github.head_ref }}
147
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
148
+ <%
149
+ }
150
+ }
151
+ -%>
109
152
 
110
153
  - name: Authenticate to npm registry
111
154
  run: |
@@ -128,15 +171,21 @@ for (let project of workspace.projects) {
128
171
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
129
172
  NPM_CONFIG_PROVENANCE: 'true' # must be string, not boolean
130
173
  <%
131
- if (workspace.projects.some((project) => project.config.deployment?.appName)) {
174
+ for (let project of workspace.projects) {
175
+ if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
132
176
  -%>
133
177
 
134
- - uses: superfly/flyctl-actions/setup-flyctl@master
178
+ - name: Deploy <%- project.name %>
179
+ run:
180
+ npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-unstable --build-secret EDGEDB_INSTANCE=$EDGEDB_INSTANCE --build-secret EDGEDB_SECRET_KEY=$EDGEDB_SECRET_KEY
181
+ env:
182
+ FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
183
+ FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
184
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
185
+ EDGEDB_BRANCH: ${{ github.head_ref }}
186
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
135
187
  <%
136
- }
137
-
138
- for (let project of workspace.projects) {
139
- if (project.config.deployment?.appName) {
188
+ } else if (project.config.deployment?.appName) {
140
189
  -%>
141
190
 
142
191
  - name: Deploy <%- project.name %>
@@ -2,6 +2,21 @@
2
2
  to: '.github/workflows/release.yaml'
3
3
  strategy: overwrite
4
4
  ---
5
+ <%
6
+ let appsWithDb = [];
7
+
8
+ for (let project of workspace.projects) {
9
+ if (project.config.deployment?.dbInstance) {
10
+ appsWithDb.push(project.name);
11
+ }
12
+ }
13
+
14
+ let appsWithDbFilter = appsWithDb.map((name) => `--filter=!${name}`).join(' ');
15
+
16
+ if (appsWithDbFilter) {
17
+ appsWithDbFilter = `-- ${appsWithDbFilter}`;
18
+ }
19
+ -%>
5
20
  #
6
21
  # DO NOT EDIT!
7
22
  # This file was autogenerated by Carson.
@@ -43,6 +58,24 @@ jobs:
43
58
  node-version: 20
44
59
  registry-url: 'https://registry.npmjs.org'
45
60
 
61
+ <%
62
+ if (workspace.projects.some((project) => project.config.deployment?.appName)) {
63
+ -%>
64
+
65
+ - uses: superfly/flyctl-actions/setup-flyctl@master
66
+ <%
67
+ }
68
+
69
+ if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
70
+ -%>
71
+
72
+ - uses: edgedb/setup-edgedb@v1
73
+ with:
74
+ server-version: none
75
+ <%
76
+ }
77
+ -%>
78
+
46
79
  - name: Install packages
47
80
  run: npm ci
48
81
 
@@ -60,8 +93,42 @@ jobs:
60
93
 
61
94
  git config --unset core.filemode
62
95
 
96
+ <%
97
+ for (let project of workspace.projects) {
98
+ if (project.config.deployment?.dbInstance) {
99
+ -%>
100
+
101
+ - name: Migrate "<%- project.name %>"
102
+ run: |
103
+ edgedb migrate
104
+ env:
105
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
106
+ EDGEDB_BRANCH: ${{ github.ref_name }}
107
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
108
+ <%
109
+ }
110
+ }
111
+ -%>
112
+
113
+ - name: Run tests
114
+ run: npm test <%- appsWithDbFilter %>
115
+
116
+ <%
117
+ for (let project of workspace.projects) {
118
+ if (project.config.deployment?.dbInstance) {
119
+ -%>
120
+
63
121
  - name: Run tests
64
- run: npm test
122
+ run: |
123
+ npm run test -- --filter=<%- project.name %>
124
+ env:
125
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
126
+ EDGEDB_BRANCH: ${{ github.head_ref }}
127
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
128
+ <%
129
+ }
130
+ }
131
+ -%>
65
132
 
66
133
  - name: Check for changes
67
134
  run: |
@@ -128,19 +195,26 @@ jobs:
128
195
  - name: Push changes
129
196
  run: |
130
197
  git push --follow-tags
198
+
131
199
  <%
132
- if (workspace.projects.some((project) => project.config.deployment?.appName)) {
200
+ for (let project of workspace.projects) {
201
+ if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
133
202
  -%>
134
203
 
135
- - uses: superfly/flyctl-actions/setup-flyctl@master
204
+ - name: Deploy "<%- project.name %>"
205
+ run:
206
+ npm run deploy --workspace <%- project.name %> -- --build-secret EDGEDB_INSTANCE=$EDGEDB_INSTANCE --build-secret EDGEDB_SECRET_KEY=$EDGEDB_SECRET_KEY
207
+ env:
208
+ FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
209
+ FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
210
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
211
+ EDGEDB_BRANCH: ${{ github.head_ref }}
212
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
136
213
  <%
137
- }
138
-
139
- for (let project of workspace.projects) {
140
- if (project.config.deployment?.appName) {
214
+ } else if (project.config.deployment?.appName) {
141
215
  -%>
142
216
 
143
- - name: Deploy <%- project.name %>
217
+ - name: Deploy "<%- project.name %>"
144
218
  run:
145
219
  npm run deploy --workspace <%- project.name %>
146
220
  env:
@@ -194,6 +268,24 @@ for (let project of workspace.projects) {
194
268
  node-version: 20
195
269
  registry-url: 'https://registry.npmjs.org'
196
270
 
271
+ <%
272
+ if (workspace.projects.some((project) => project.config.deployment?.appName)) {
273
+ -%>
274
+
275
+ - uses: superfly/flyctl-actions/setup-flyctl@master
276
+ <%
277
+ }
278
+
279
+ if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
280
+ -%>
281
+
282
+ - uses: edgedb/setup-edgedb@v1
283
+ with:
284
+ server-version: none
285
+ <%
286
+ }
287
+ -%>
288
+
197
289
  - name: Install packages
198
290
  run: npm ci
199
291
 
@@ -211,8 +303,42 @@ for (let project of workspace.projects) {
211
303
 
212
304
  git config --unset core.filemode
213
305
 
306
+ <%
307
+ for (let project of workspace.projects) {
308
+ if (project.config.deployment?.dbInstance) {
309
+ -%>
310
+
311
+ - name: Migrate "<%- project.name %>"
312
+ env:
313
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
314
+ EDGEDB_BRANCH: ${{ github.ref_name }}
315
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
316
+ run: |
317
+ edgedb migrate
318
+ <%
319
+ }
320
+ }
321
+ -%>
322
+
214
323
  - name: Run tests
215
- run: npm test
324
+ run: npm test <%- appsWithDbFilter %>
325
+
326
+ <%
327
+ for (let project of workspace.projects) {
328
+ if (project.config.deployment?.dbInstance) {
329
+ -%>
330
+
331
+ - name: Run tests
332
+ run: |
333
+ npm run test -- --filter=<%- project.name %>
334
+ env:
335
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
336
+ EDGEDB_BRANCH: ${{ github.head_ref }}
337
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
338
+ <%
339
+ }
340
+ }
341
+ -%>
216
342
 
217
343
  - name: Check for changes
218
344
  run: |
@@ -262,18 +388,24 @@ for (let project of workspace.projects) {
262
388
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
263
389
  NPM_CONFIG_PROVENANCE: 'true' # must be string, not boolean
264
390
  <%
265
- if (workspace.projects.some((project) => project.config.deployment?.appName)) {
391
+ for (let project of workspace.projects) {
392
+ if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
266
393
  -%>
267
394
 
268
- - uses: superfly/flyctl-actions/setup-flyctl@master
395
+ - name: Deploy "<%- project.name %>"
396
+ run:
397
+ npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-next --build-secret EDGEDB_INSTANCE=$EDGEDB_INSTANCE --build-secret EDGEDB_SECRET_KEY=$EDGEDB_SECRET_KEY
398
+ env:
399
+ FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
400
+ FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
401
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
402
+ EDGEDB_BRANCH: ${{ github.head_ref }}
403
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
269
404
  <%
270
- }
271
-
272
- for (let project of workspace.projects) {
273
- if (project.config.deployment?.appName) {
405
+ } else if (project.config.deployment?.appName) {
274
406
  -%>
275
407
 
276
- - name: Deploy <%- project.name %>
408
+ - name: Deploy "<%- project.name %>"
277
409
  run:
278
410
  npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-next
279
411
  env:
@@ -8,7 +8,7 @@ let turboConfig = {
8
8
  pipeline: {
9
9
  build: {
10
10
  dependsOn: ['^build', 'codegen'],
11
- outputs: [`${BUILD_DIRECTORY}/**`],
11
+ outputs: [`${BUILD_DIRECTORY}/**`, 'app/**'],
12
12
  },
13
13
  clean: {
14
14
  cache: false,
@@ -33,7 +33,7 @@ let turboConfig = {
33
33
  outputs: [],
34
34
  },
35
35
  test: {
36
- dependsOn: ['^build', 'typecheck', 'lint'],
36
+ dependsOn: ['^build', 'codegen', 'typecheck', 'lint'],
37
37
  outputs: ['coverage/**'],
38
38
  },
39
39
  typecheck: {
@@ -41,6 +41,7 @@ let turboConfig = {
41
41
  outputs: [],
42
42
  },
43
43
  },
44
+ globalEnv: workspace.projects.some((project) => project.config.deployment?.dbInstance) ? ['EDGEDB_INSTANCE', 'EDGEDB_BRANCH', 'EDGEDB_SECRET_KEY'] : [],
44
45
  globalDependencies: [
45
46
  '.editorconfig',
46
47
  '.eslintrc.cjs',
@@ -49,6 +50,7 @@ let turboConfig = {
49
50
  'tsconfig.json',
50
51
  'tsconfig.typecheck.json',
51
52
  ],
53
+
52
54
  };
53
55
 
54
56
  if (workspace.projects.find((project) => project.name === LINTER_CONFIG_PACKAGE_NAME)) {