@jakubmazanec/carson-templates 2.3.0-unstable.f5bd618 → 2.3.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jakubmazanec/carson-templates",
3
- "version": "2.3.0-unstable.f5bd618",
3
+ "version": "2.3.0",
4
4
  "description": "Collection of Carson templates.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "lodash": "^4.17.21",
34
- "semver": "^7.6.0"
34
+ "semver": "^7.6.2"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@jakubmazanec/carson": "^1.1.0",
@@ -43,17 +43,17 @@
43
43
  "@types/zen-observable": "^0.8.7",
44
44
  "@vitest/coverage-v8": "^1.3.1",
45
45
  "del-cli": "^5.1.0",
46
- "esbuild": "^0.20.1",
46
+ "esbuild": "^0.21.4",
47
47
  "eslint": "^8.56.0",
48
- "execa": "^8.0.1",
48
+ "execa": "^9.1.0",
49
49
  "fast-glob": "^3.3.2",
50
50
  "fs-extra": "^11.2.0",
51
51
  "lodash": "^4.17.21",
52
- "prettier": "^3.2.5",
53
- "prettier-plugin-packagejson": "^2.4.12",
54
- "typedoc": "^0.25.10",
55
- "typedoc-plugin-markdown": "^3.17.1",
56
- "typescript": "^5.3.3",
52
+ "prettier": "^3.3.0",
53
+ "prettier-plugin-packagejson": "^2.5.0",
54
+ "typedoc": "^0.25.13",
55
+ "typedoc-plugin-markdown": "^4.0.3",
56
+ "typescript": "^5.4.5",
57
57
  "vitest": "^1.3.1",
58
58
  "zen-observable": "^0.10.0"
59
59
  },
@@ -3,11 +3,11 @@ to: '.eslintrc.cjs'
3
3
  strategy: overwrite
4
4
  ---
5
5
  <%
6
- let lintIgnorePatterns = [
7
- ...LINT_IGNORE_PATTERNS,
8
- 'dbschema/edgeql-js/',
9
- 'dbschema/interfaces.*',
10
- ];
6
+ let lintIgnorePatterns = [...LINT_IGNORE_PATTERNS];
7
+
8
+ if (project.config.deployment?.dbInstance) {
9
+ lintIgnorePatterns.push('dbschema/edgeql-js/', 'dbschema/interfaces.*');
10
+ }
11
11
  -%>
12
12
  /**
13
13
  * DO NOT EDIT!
@@ -11,12 +11,13 @@ for (let project of workspace.projects) {
11
11
  }
12
12
 
13
13
  let copyFilesLines = ['COPY package-lock.json package.json /workspace/'];
14
+ let currentProject = project;
14
15
 
15
16
  for (let project of workspace.projects) {
16
- if (project.config.deployment?.appName) {
17
+ if (project.config.deployment?.appName && project.name === currentProject.name) {
17
18
  copyFilesLines.push(`COPY --from=build /workspace/${project.relativePath}/build /workspace/${project.relativePath}/build`);
18
19
  copyFilesLines.push(`COPY --from=build /workspace/${project.relativePath}/package.json /workspace/${project.relativePath}/package.json`);
19
- } else {
20
+ } else if (!project.config.deployment?.appName) {
20
21
  if (project.packageJson.bin) {
21
22
  copyFilesLines.push(`COPY --from=build /workspace/${project.relativePath}/bin /workspace/${project.relativePath}/bin`);
22
23
  }
@@ -39,14 +40,24 @@ FROM node:20-slim as base
39
40
 
40
41
  WORKDIR /workspace
41
42
 
43
+ # Set up env variables
42
44
  ENV NODE_ENV=production
45
+ <%
46
+ if (project.config.deployment?.dbInstance) {
47
+ -%>
48
+ ARG EDGEDB_INSTANCE
49
+ ENV EDGEDB_INSTANCE=$EDGEDB_INSTANCE
50
+ ARG EDGEDB_BRANCH
51
+ ENV EDGEDB_BRANCH=$EDGEDB_BRANCH
52
+ <%
53
+ }
54
+ -%>
43
55
 
44
56
  # Throw-away build stage to reduce size of final image
45
57
  FROM base as build
46
58
 
47
59
  # Install packages needed to install dependencies
48
- RUN apt-get update -qq && \
49
- apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3
60
+ RUN apt-get update -qq && apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3
50
61
 
51
62
  # Install dependencies
52
63
  <%- installDependenciesLines.join('\n') %>
@@ -59,7 +70,7 @@ COPY --link . .
59
70
  <%
60
71
  if (project.config.deployment?.dbInstance) {
61
72
  -%>
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
73
+ RUN --mount=type=secret,id=EDGEDB_SECRET_KEY EDGEDB_SECRET_KEY="$(cat /run/secrets/EDGEDB_SECRET_KEY)" npm run build
63
74
  <%
64
75
  } else {
65
76
  -%>
@@ -78,6 +89,6 @@ FROM base
78
89
  RUN npm ci --omit=dev --ignore-scripts
79
90
 
80
91
  # Start the server
81
- WORKDIR /workspace/apps/somewhere
92
+ WORKDIR /workspace/<%- project.relativePath %>
82
93
  EXPOSE 5000
83
94
  ENTRYPOINT ["npm", "start"]
@@ -22,5 +22,5 @@ If you want to contribute, see [CONTRIBUTING](./CONTRIBUTING.md) for details.
22
22
 
23
23
  ## License
24
24
 
25
- This package is licensed under the GNU Affero General Public License v3. See [LICENSE](./LICENSE.md)
25
+ This app is licensed under the GNU Affero General Public License v3. See [LICENSE](./LICENSE.md)
26
26
  for details.
@@ -12,13 +12,17 @@ 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
16
15
  },
17
16
  include: project.config.deployment?.dbInstance ? ['./app/**/*', './dbschema/**/*', './*'] : ['./app/**/*', './*'],
18
17
  references: getReferences(workspace, project),
19
18
  },
20
19
  project.config.overrides?.tsconfig ?? {},
21
20
  );
21
+
22
+ // TODO: when EdgeDB client supports `exactOptionalPropertyTypes: true`, remove this line
23
+ if (project.config.deployment?.dbInstance) {
24
+ tsconfig.compilerOptions.exactOptionalPropertyTypes = false;
25
+ }
22
26
  -%>
23
27
  //
24
28
  // DO NOT EDIT!
@@ -10,7 +10,6 @@ let tsconfig = lodash.merge(
10
10
  composite: false,
11
11
  },
12
12
  include: project.config.deployment?.dbInstance ? ['./app/**/*', './dbschema/**/*', './tests/**/*', './*'] : ['./app/**/*', './tests/**/*', './*'],
13
- references: getReferences(workspace, project),
14
13
  },
15
14
  project.config.overrides?.tsconfig ?? {},
16
15
  );
@@ -88,7 +88,7 @@ if (workspace.projects.some((project) => project.config.deployment?.dbInstance))
88
88
 
89
89
  git config --unset core.filemode
90
90
 
91
- - name: Run tests
91
+ - name: Test
92
92
  run: npm test <%- appsWithDbFilter %>
93
93
 
94
94
  <%
@@ -96,13 +96,13 @@ for (let project of workspace.projects) {
96
96
  if (project.config.deployment?.dbInstance) {
97
97
  -%>
98
98
 
99
- - name: Run tests
99
+ - name: Test "<%- project.name %>"
100
100
  run: |
101
101
  npm run test -- --filter=<%- project.name %>
102
102
  env:
103
103
  EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
104
104
  EDGEDB_BRANCH: ${{ github.head_ref }}
105
- EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
105
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
106
106
  <%
107
107
  }
108
108
  }
@@ -3,14 +3,25 @@ to: '.github/workflows/release-pull-request.yaml'
3
3
  strategy: overwrite
4
4
  ---
5
5
  <%
6
+ let apps = [];
6
7
  let appsWithDb = [];
7
8
 
8
9
  for (let project of workspace.projects) {
10
+ if (project.config.deployment?.appName) {
11
+ apps.push(project.name);
12
+ }
13
+
9
14
  if (project.config.deployment?.dbInstance) {
10
15
  appsWithDb.push(project.name);
11
16
  }
12
17
  }
13
18
 
19
+ let appsFilter = apps.map((name) => `--filter=!${name}`).join(' ');
20
+
21
+ if (appsFilter) {
22
+ appsFilter = `-- ${appsFilter}`;
23
+ }
24
+
14
25
  let appsWithDbFilter = appsWithDb.map((name) => `--filter=!${name}`).join(' ');
15
26
 
16
27
  if (appsWithDbFilter) {
@@ -96,7 +107,7 @@ if (workspace.projects.some((project) => project.config.deployment?.dbInstance))
96
107
 
97
108
  git config --unset core.filemode
98
109
 
99
- - name: Run tests
110
+ - name: Test
100
111
  run: npm test <%- appsWithDbFilter %>
101
112
 
102
113
  <%
@@ -104,13 +115,13 @@ for (let project of workspace.projects) {
104
115
  if (project.config.deployment?.dbInstance) {
105
116
  -%>
106
117
 
107
- - name: Run tests
118
+ - name: Test "<%- project.name %>"
108
119
  run: |
109
120
  npm run test -- --filter=<%- project.name %>
110
121
  env:
111
122
  EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
112
123
  EDGEDB_BRANCH: ${{ github.head_ref }}
113
- EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
124
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
114
125
  <%
115
126
  }
116
127
  }
@@ -131,24 +142,7 @@ for (let project of workspace.projects) {
131
142
  git config --unset core.filemode
132
143
 
133
144
  - name: Build packages
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
- -%>
145
+ run: npm run build <%- appsFilter %>
152
146
 
153
147
  - name: Authenticate to npm registry
154
148
  run: |
@@ -177,13 +171,13 @@ for (let project of workspace.projects) {
177
171
 
178
172
  - name: Deploy <%- project.name %>
179
173
  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"
174
+ npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-unstable --build-arg "EDGEDB_INSTANCE=$EDGEDB_INSTANCE" --build-arg "EDGEDB_BRANCH=$EDGEDB_BRANCH" --build-secret "EDGEDB_SECRET_KEY=$EDGEDB_SECRET_KEY"
181
175
  env:
182
176
  FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
183
177
  FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
184
178
  EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
185
179
  EDGEDB_BRANCH: ${{ github.head_ref }}
186
- EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
180
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
187
181
  <%
188
182
  } else if (project.config.deployment?.appName) {
189
183
  -%>
@@ -3,14 +3,25 @@ to: '.github/workflows/release.yaml'
3
3
  strategy: overwrite
4
4
  ---
5
5
  <%
6
+ let apps = [];
6
7
  let appsWithDb = [];
7
8
 
8
9
  for (let project of workspace.projects) {
10
+ if (project.config.deployment?.appName) {
11
+ apps.push(project.name);
12
+ }
13
+
9
14
  if (project.config.deployment?.dbInstance) {
10
15
  appsWithDb.push(project.name);
11
16
  }
12
17
  }
13
18
 
19
+ let appsFilter = apps.map((name) => `--filter=!${name}`).join(' ');
20
+
21
+ if (appsFilter) {
22
+ appsFilter = `-- ${appsFilter}`;
23
+ }
24
+
14
25
  let appsWithDbFilter = appsWithDb.map((name) => `--filter=!${name}`).join(' ');
15
26
 
16
27
  if (appsWithDbFilter) {
@@ -100,17 +111,17 @@ for (let project of workspace.projects) {
100
111
 
101
112
  - name: Migrate "<%- project.name %>"
102
113
  run: |
103
- edgedb migrate
114
+ edgedb migrate --schema-dir <%- project.relativePath %>/dbschema
104
115
  env:
105
116
  EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
106
117
  EDGEDB_BRANCH: ${{ github.ref_name }}
107
- EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
118
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
108
119
  <%
109
120
  }
110
121
  }
111
122
  -%>
112
123
 
113
- - name: Run tests
124
+ - name: Test
114
125
  run: npm test <%- appsWithDbFilter %>
115
126
 
116
127
  <%
@@ -118,13 +129,13 @@ for (let project of workspace.projects) {
118
129
  if (project.config.deployment?.dbInstance) {
119
130
  -%>
120
131
 
121
- - name: Run tests
132
+ - name: Test "<%- project.name %>"
122
133
  run: |
123
134
  npm run test -- --filter=<%- project.name %>
124
135
  env:
125
136
  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 }}
137
+ EDGEDB_BRANCH: ${{ github.ref_name }}
138
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
128
139
  <%
129
140
  }
130
141
  }
@@ -145,7 +156,7 @@ for (let project of workspace.projects) {
145
156
  git config --unset core.filemode
146
157
 
147
158
  - name: Build packages
148
- run: npm run build <%- appsWithDbFilter %>
159
+ run: npm run build <%- appsFilter %>
149
160
 
150
161
  - name: Authenticate to npm registry
151
162
  run: |
@@ -203,13 +214,13 @@ for (let project of workspace.projects) {
203
214
 
204
215
  - name: Deploy "<%- project.name %>"
205
216
  run: |
206
- npm run deploy --workspace <%- project.name %> -- --build-secret "EDGEDB_INSTANCE=$EDGEDB_INSTANCE" --build-secret "EDGEDB_SECRET_KEY=$EDGEDB_SECRET_KEY"
217
+ npm run deploy --workspace <%- project.name %> -- --build-arg "EDGEDB_INSTANCE=$EDGEDB_INSTANCE" --build-arg "EDGEDB_BRANCH=$EDGEDB_BRANCH" --build-secret "EDGEDB_SECRET_KEY=$EDGEDB_SECRET_KEY"
207
218
  env:
208
219
  FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
209
220
  FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
210
221
  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 }}
222
+ EDGEDB_BRANCH: ${{ github.ref_name }}
223
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
213
224
  <%
214
225
  } else if (project.config.deployment?.appName) {
215
226
  -%>
@@ -309,18 +320,18 @@ for (let project of workspace.projects) {
309
320
  -%>
310
321
 
311
322
  - name: Migrate "<%- project.name %>"
323
+ run: |
324
+ edgedb migrate --schema-dir <%- project.relativePath %>/dbschema
312
325
  env:
313
326
  EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
314
327
  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
328
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
318
329
  <%
319
330
  }
320
331
  }
321
332
  -%>
322
333
 
323
- - name: Run tests
334
+ - name: Test
324
335
  run: npm test <%- appsWithDbFilter %>
325
336
 
326
337
  <%
@@ -328,13 +339,13 @@ for (let project of workspace.projects) {
328
339
  if (project.config.deployment?.dbInstance) {
329
340
  -%>
330
341
 
331
- - name: Run tests
342
+ - name: Test "<%- project.name %>"
332
343
  run: |
333
344
  npm run test -- --filter=<%- project.name %>
334
345
  env:
335
346
  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 }}
347
+ EDGEDB_BRANCH: ${{ github.ref_name }}
348
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
338
349
  <%
339
350
  }
340
351
  }
@@ -355,7 +366,7 @@ for (let project of workspace.projects) {
355
366
  git config --unset core.filemode
356
367
 
357
368
  - name: Build packages
358
- run: npm run build <%- appsWithDbFilter %>
369
+ run: npm run build <%- appsFilter %>
359
370
 
360
371
  - name: Update documentation
361
372
  run: |
@@ -394,13 +405,13 @@ for (let project of workspace.projects) {
394
405
 
395
406
  - name: Deploy "<%- project.name %>"
396
407
  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"
408
+ npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-next --build-arg "EDGEDB_INSTANCE=$EDGEDB_INSTANCE" --build-arg "EDGEDB_BRANCH=$EDGEDB_BRANCH" --build-secret "EDGEDB_SECRET_KEY=$EDGEDB_SECRET_KEY"
398
409
  env:
399
410
  FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
400
411
  FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
401
412
  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 }}
413
+ EDGEDB_BRANCH: ${{ github.ref_name }}
414
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
404
415
  <%
405
416
  } else if (project.config.deployment?.appName) {
406
417
  -%>