@jakubmazanec/carson-templates 2.2.1 → 2.3.0-unstable.03df558

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.2.1",
3
+ "version": "2.3.0-unstable.03df558",
4
4
  "description": "Collection of Carson templates.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -2,6 +2,13 @@
2
2
  to: '.eslintrc.cjs'
3
3
  strategy: overwrite
4
4
  ---
5
+ <%
6
+ let lintIgnorePatterns = [
7
+ ...LINT_IGNORE_PATTERNS,
8
+ 'dbschema/edgeql-js/',
9
+ 'dbschema/interfaces.*',
10
+ ];
11
+ -%>
5
12
  /**
6
13
  * DO NOT EDIT!
7
14
  * This file was autogenerated by Carson.
@@ -17,5 +24,5 @@ module.exports = {
17
24
  '@jakubmazanec/eslint-config/nodejs',
18
25
  '@jakubmazanec/eslint-config/prettier',
19
26
  ],
20
- ignorePatterns: <%- JSON.stringify(LINT_IGNORE_PATTERNS, null, 2) %>,
27
+ ignorePatterns: <%- JSON.stringify(lintIgnorePatterns, null, 2) %>,
21
28
  };
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  to: 'Dockerfile'
3
+ if: <%- Boolean(project.config.deployment?.appName) %>
3
4
  strategy: overwrite
4
5
  ---
5
6
  <%
@@ -55,7 +56,17 @@ RUN npm ci --include=dev --ignore-scripts
55
56
  COPY --link . .
56
57
 
57
58
  # Build
58
- RUN npm run 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
+ -%>
66
+ RUN npm run build -- --filter=<%- project.name %>
67
+ <%
68
+ }
69
+ -%>
59
70
 
60
71
  # Final stage for app image
61
72
  FROM base
@@ -0,0 +1,7 @@
1
+ ---
2
+ to: 'edgedb.toml'
3
+ if: <%- Boolean(project.config.deployment?.dbInstance) %>
4
+ strategy: overwrite
5
+ ---
6
+ [edgedb]
7
+ server-version = "5.2"
@@ -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.
@@ -45,6 +60,17 @@ jobs:
45
60
  with:
46
61
  node-version: 20
47
62
 
63
+ <%
64
+ if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
65
+ -%>
66
+
67
+ - uses: edgedb/setup-edgedb@v1
68
+ with:
69
+ server-version: none
70
+ <%
71
+ }
72
+ -%>
73
+
48
74
  - name: Install packages
49
75
  run: npm ci
50
76
 
@@ -63,7 +89,24 @@ jobs:
63
89
  git config --unset core.filemode
64
90
 
65
91
  - name: Run tests
66
- 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
+ -%>
67
110
 
68
111
  - name: Check for changes
69
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.
@@ -46,6 +61,24 @@ jobs:
46
61
  node-version: 20
47
62
  registry-url: 'https://registry.npmjs.org'
48
63
 
64
+ <%
65
+ if (workspace.projects.some((project) => project.config.deployment?.appName)) {
66
+ -%>
67
+
68
+ - uses: superfly/flyctl-actions/setup-flyctl@master
69
+ <%
70
+ }
71
+
72
+ if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
73
+ -%>
74
+
75
+ - uses: edgedb/setup-edgedb@v1
76
+ with:
77
+ server-version: none
78
+ <%
79
+ }
80
+ -%>
81
+
49
82
  - name: Install packages
50
83
  run: npm ci
51
84
 
@@ -64,7 +97,24 @@ jobs:
64
97
  git config --unset core.filemode
65
98
 
66
99
  - name: Run tests
67
- 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
+ -%>
68
118
 
69
119
  - name: Check for changes
70
120
  run: |
@@ -81,7 +131,24 @@ jobs:
81
131
  git config --unset core.filemode
82
132
 
83
133
  - name: Build packages
84
- 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
+ -%>
85
152
 
86
153
  - name: Authenticate to npm registry
87
154
  run: |
@@ -104,19 +171,26 @@ jobs:
104
171
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
105
172
  NPM_CONFIG_PROVENANCE: 'true' # must be string, not boolean
106
173
  <%
107
- 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) {
108
176
  -%>
109
177
 
110
- - uses: superfly/flyctl-actions/setup-flyctl@master
178
+ - name: Deploy <%- project.name %>
179
+ run: |
180
+ echo $EDGEDB_INSTANCE
181
+ 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
182
+ env:
183
+ FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
184
+ FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
185
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
186
+ EDGEDB_BRANCH: ${{ github.head_ref }}
187
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
111
188
  <%
112
- }
113
-
114
- for (let project of workspace.projects) {
115
- if (project.config.deployment?.appName) {
189
+ } else if (project.config.deployment?.appName) {
116
190
  -%>
117
191
 
118
192
  - name: Deploy <%- project.name %>
119
- run:
193
+ run: |
120
194
  npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-unstable
121
195
  env:
122
196
  FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
@@ -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
+
63
113
  - name: Run tests
64
- run: npm test
114
+ run: npm test <%- appsWithDbFilter %>
115
+
116
+ <%
117
+ for (let project of workspace.projects) {
118
+ if (project.config.deployment?.dbInstance) {
119
+ -%>
120
+
121
+ - name: Run tests
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: |
@@ -78,7 +145,7 @@ jobs:
78
145
  git config --unset core.filemode
79
146
 
80
147
  - name: Build packages
81
- run: npm run build
148
+ run: npm run build <%- appsWithDbFilter %>
82
149
 
83
150
  - name: Authenticate to npm registry
84
151
  run: |
@@ -128,20 +195,27 @@ 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 %>
144
- run:
217
+ - name: Deploy "<%- project.name %>"
218
+ run: |
145
219
  npm run deploy --workspace <%- project.name %>
146
220
  env:
147
221
  FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
@@ -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: |
@@ -229,7 +355,7 @@ for (let project of workspace.projects) {
229
355
  git config --unset core.filemode
230
356
 
231
357
  - name: Build packages
232
- run: npm run build
358
+ run: npm run build <%- appsWithDbFilter %>
233
359
 
234
360
  - name: Update documentation
235
361
  run: |
@@ -262,19 +388,25 @@ 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 %>
277
- run:
408
+ - name: Deploy "<%- project.name %>"
409
+ run: |
278
410
  npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-next
279
411
  env:
280
412
  FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
@@ -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)) {