@jakubmazanec/carson-templates 2.2.1 → 2.3.0-next.05e0306

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-next.05e0306",
4
4
  "description": "Collection of Carson templates.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -31,19 +31,19 @@
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
- "@jakubmazanec/carson": "^1.1.0",
38
- "@jakubmazanec/eslint-config": "^3.2.0",
39
- "@jakubmazanec/fs-utils": "^0.2.0",
37
+ "@jakubmazanec/carson": "1.1.1-next.05e0306",
38
+ "@jakubmazanec/eslint-config": "3.3.1-next.05e0306",
39
+ "@jakubmazanec/fs-utils": "0.2.3-next.05e0306",
40
40
  "@types/fs-extra": "^11.0.4",
41
41
  "@types/lodash": "^4.14.202",
42
42
  "@types/node": "^20.8.5",
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
48
  "execa": "^8.0.1",
49
49
  "fast-glob": "^3.3.2",
@@ -58,7 +58,7 @@
58
58
  "zen-observable": "^0.10.0"
59
59
  },
60
60
  "peerDependencies": {
61
- "@jakubmazanec/carson": "^1.0.0"
61
+ "@jakubmazanec/carson": "1.1.1-next.05e0306"
62
62
  },
63
63
  "packageManager": "npm@10.1.0",
64
64
  "engines": {
@@ -2,6 +2,13 @@
2
2
  to: '.eslintrc.cjs'
3
3
  strategy: overwrite
4
4
  ---
5
+ <%
6
+ let lintIgnorePatterns = [...LINT_IGNORE_PATTERNS];
7
+
8
+ if (project.config.deployment?.dbInstance) {
9
+ lintIgnorePatterns.push('dbschema/edgeql-js/', '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
  <%
@@ -10,12 +11,13 @@ for (let project of workspace.projects) {
10
11
  }
11
12
 
12
13
  let copyFilesLines = ['COPY package-lock.json package.json /workspace/'];
14
+ let currentProject = project;
13
15
 
14
16
  for (let project of workspace.projects) {
15
- if (project.config.deployment?.appName) {
17
+ if (project.config.deployment?.appName && project.name === currentProject.name) {
16
18
  copyFilesLines.push(`COPY --from=build /workspace/${project.relativePath}/build /workspace/${project.relativePath}/build`);
17
19
  copyFilesLines.push(`COPY --from=build /workspace/${project.relativePath}/package.json /workspace/${project.relativePath}/package.json`);
18
- } else {
20
+ } else if (!project.config.deployment?.appName) {
19
21
  if (project.packageJson.bin) {
20
22
  copyFilesLines.push(`COPY --from=build /workspace/${project.relativePath}/bin /workspace/${project.relativePath}/bin`);
21
23
  }
@@ -38,14 +40,24 @@ FROM node:20-slim as base
38
40
 
39
41
  WORKDIR /workspace
40
42
 
43
+ # Set up env variables
41
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
+ -%>
42
55
 
43
56
  # Throw-away build stage to reduce size of final image
44
57
  FROM base as build
45
58
 
46
59
  # Install packages needed to install dependencies
47
- RUN apt-get update -qq && \
48
- 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
49
61
 
50
62
  # Install dependencies
51
63
  <%- installDependenciesLines.join('\n') %>
@@ -55,7 +67,17 @@ RUN npm ci --include=dev --ignore-scripts
55
67
  COPY --link . .
56
68
 
57
69
  # Build
58
- RUN npm run build
70
+ <%
71
+ if (project.config.deployment?.dbInstance) {
72
+ -%>
73
+ RUN --mount=type=secret,id=EDGEDB_SECRET_KEY EDGEDB_SECRET_KEY="$(cat /run/secrets/EDGEDB_SECRET_KEY)" npm run build
74
+ <%
75
+ } else {
76
+ -%>
77
+ RUN npm run build -- --filter=<%- project.name %>
78
+ <%
79
+ }
80
+ -%>
59
81
 
60
82
  # Final stage for app image
61
83
  FROM base
@@ -67,6 +89,6 @@ FROM base
67
89
  RUN npm ci --omit=dev --ignore-scripts
68
90
 
69
91
  # Start the server
70
- WORKDIR /workspace/apps/somewhere
92
+ WORKDIR /workspace/<%- project.relativePath %>
71
93
  EXPOSE 5000
72
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.
@@ -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"
@@ -13,11 +13,16 @@ let tsconfig = lodash.merge(
13
13
  resolveJsonModule: true,
14
14
  rootDir: '.',
15
15
  },
16
- include: ['./env.d.ts', './*', './app/**/*'],
16
+ include: project.config.deployment?.dbInstance ? ['./app/**/*', './dbschema/**/*', './*'] : ['./app/**/*', './*'],
17
17
  references: getReferences(workspace, project),
18
18
  },
19
19
  project.config.overrides?.tsconfig ?? {},
20
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
+ }
21
26
  -%>
22
27
  //
23
28
  // DO NOT EDIT!
@@ -2,6 +2,18 @@
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
+ },
14
+ project.config.overrides?.tsconfig ?? {},
15
+ );
16
+ -%>
5
17
  //
6
18
  // DO NOT EDIT!
7
19
  // This file was autogenerated by Carson.
@@ -10,10 +22,4 @@ strategy: overwrite
10
22
  // Run `npx carson update workspace` to regenerate.
11
23
  //
12
24
 
13
- {
14
- "extends": "./tsconfig.json",
15
- "compilerOptions": {
16
- "composite": false
17
- },
18
- "include": ["./app/**/*", "./tests/**/*", "./*"]
19
- }
25
+ <%- JSON.stringify(tsconfig, null, 2) %>
@@ -9,7 +9,17 @@ let lines = [];
9
9
  for (let project of workspace.projects) {
10
10
  if (project.config.deployment?.appName) {
11
11
  lines.push(`!${project.relativePath}/app/**`);
12
+
13
+ if (project.config.deployment?.dbInstance) {
14
+ lines.push(`!${project.relativePath}/dbschema/**`);
15
+ }
16
+
12
17
  lines.push(`!${project.relativePath}/public/**`);
18
+
19
+ if (project.config.deployment?.dbInstance) {
20
+ lines.push(`!${project.relativePath}/edgedb.toml`);
21
+ }
22
+
13
23
  lines.push(`!${project.relativePath}/env.d.ts`);
14
24
  lines.push(`!${project.relativePath}/package.json`);
15
25
  lines.push(`!${project.relativePath}/postcss.config.cjs`);
@@ -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
 
@@ -62,8 +88,25 @@ jobs:
62
88
 
63
89
  git config --unset core.filemode
64
90
 
65
- - name: Run tests
66
- run: npm test
91
+ - name: 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: Test "<%- project.name %>"
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).toUpperCase() %>_EDGEDB_TOKEN }}
106
+ <%
107
+ }
108
+ }
109
+ -%>
67
110
 
68
111
  - name: Check for changes
69
112
  run: |
@@ -2,6 +2,32 @@
2
2
  to: '.github/workflows/release-pull-request.yaml'
3
3
  strategy: overwrite
4
4
  ---
5
+ <%
6
+ let apps = [];
7
+ let appsWithDb = [];
8
+
9
+ for (let project of workspace.projects) {
10
+ if (project.config.deployment?.appName) {
11
+ apps.push(project.name);
12
+ }
13
+
14
+ if (project.config.deployment?.dbInstance) {
15
+ appsWithDb.push(project.name);
16
+ }
17
+ }
18
+
19
+ let appsFilter = apps.map((name) => `--filter=!${name}`).join(' ');
20
+
21
+ if (appsFilter) {
22
+ appsFilter = `-- ${appsFilter}`;
23
+ }
24
+
25
+ let appsWithDbFilter = appsWithDb.map((name) => `--filter=!${name}`).join(' ');
26
+
27
+ if (appsWithDbFilter) {
28
+ appsWithDbFilter = `-- ${appsWithDbFilter}`;
29
+ }
30
+ -%>
5
31
  #
6
32
  # DO NOT EDIT!
7
33
  # This file was autogenerated by Carson.
@@ -46,6 +72,24 @@ jobs:
46
72
  node-version: 20
47
73
  registry-url: 'https://registry.npmjs.org'
48
74
 
75
+ <%
76
+ if (workspace.projects.some((project) => project.config.deployment?.appName)) {
77
+ -%>
78
+
79
+ - uses: superfly/flyctl-actions/setup-flyctl@master
80
+ <%
81
+ }
82
+
83
+ if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
84
+ -%>
85
+
86
+ - uses: edgedb/setup-edgedb@v1
87
+ with:
88
+ server-version: none
89
+ <%
90
+ }
91
+ -%>
92
+
49
93
  - name: Install packages
50
94
  run: npm ci
51
95
 
@@ -63,8 +107,25 @@ jobs:
63
107
 
64
108
  git config --unset core.filemode
65
109
 
66
- - name: Run tests
67
- run: npm test
110
+ - name: Test
111
+ run: npm test <%- appsWithDbFilter %>
112
+
113
+ <%
114
+ for (let project of workspace.projects) {
115
+ if (project.config.deployment?.dbInstance) {
116
+ -%>
117
+
118
+ - name: Test "<%- project.name %>"
119
+ run: |
120
+ npm run test -- --filter=<%- project.name %>
121
+ env:
122
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
123
+ EDGEDB_BRANCH: ${{ github.head_ref }}
124
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
125
+ <%
126
+ }
127
+ }
128
+ -%>
68
129
 
69
130
  - name: Check for changes
70
131
  run: |
@@ -81,7 +142,7 @@ jobs:
81
142
  git config --unset core.filemode
82
143
 
83
144
  - name: Build packages
84
- run: npm run build
145
+ run: npm run build <%- appsFilter %>
85
146
 
86
147
  - name: Authenticate to npm registry
87
148
  run: |
@@ -104,19 +165,25 @@ jobs:
104
165
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
105
166
  NPM_CONFIG_PROVENANCE: 'true' # must be string, not boolean
106
167
  <%
107
- if (workspace.projects.some((project) => project.config.deployment?.appName)) {
168
+ for (let project of workspace.projects) {
169
+ if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
108
170
  -%>
109
171
 
110
- - uses: superfly/flyctl-actions/setup-flyctl@master
172
+ - name: Deploy <%- project.name %>
173
+ run: |
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"
175
+ env:
176
+ FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
177
+ FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
178
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
179
+ EDGEDB_BRANCH: ${{ github.head_ref }}
180
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
111
181
  <%
112
- }
113
-
114
- for (let project of workspace.projects) {
115
- if (project.config.deployment?.appName) {
182
+ } else if (project.config.deployment?.appName) {
116
183
  -%>
117
184
 
118
185
  - name: Deploy <%- project.name %>
119
- run:
186
+ run: |
120
187
  npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-unstable
121
188
  env:
122
189
  FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
@@ -2,6 +2,32 @@
2
2
  to: '.github/workflows/release.yaml'
3
3
  strategy: overwrite
4
4
  ---
5
+ <%
6
+ let apps = [];
7
+ let appsWithDb = [];
8
+
9
+ for (let project of workspace.projects) {
10
+ if (project.config.deployment?.appName) {
11
+ apps.push(project.name);
12
+ }
13
+
14
+ if (project.config.deployment?.dbInstance) {
15
+ appsWithDb.push(project.name);
16
+ }
17
+ }
18
+
19
+ let appsFilter = apps.map((name) => `--filter=!${name}`).join(' ');
20
+
21
+ if (appsFilter) {
22
+ appsFilter = `-- ${appsFilter}`;
23
+ }
24
+
25
+ let appsWithDbFilter = appsWithDb.map((name) => `--filter=!${name}`).join(' ');
26
+
27
+ if (appsWithDbFilter) {
28
+ appsWithDbFilter = `-- ${appsWithDbFilter}`;
29
+ }
30
+ -%>
5
31
  #
6
32
  # DO NOT EDIT!
7
33
  # This file was autogenerated by Carson.
@@ -43,6 +69,24 @@ jobs:
43
69
  node-version: 20
44
70
  registry-url: 'https://registry.npmjs.org'
45
71
 
72
+ <%
73
+ if (workspace.projects.some((project) => project.config.deployment?.appName)) {
74
+ -%>
75
+
76
+ - uses: superfly/flyctl-actions/setup-flyctl@master
77
+ <%
78
+ }
79
+
80
+ if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
81
+ -%>
82
+
83
+ - uses: edgedb/setup-edgedb@v1
84
+ with:
85
+ server-version: none
86
+ <%
87
+ }
88
+ -%>
89
+
46
90
  - name: Install packages
47
91
  run: npm ci
48
92
 
@@ -60,8 +104,42 @@ jobs:
60
104
 
61
105
  git config --unset core.filemode
62
106
 
63
- - name: Run tests
64
- run: npm test
107
+ <%
108
+ for (let project of workspace.projects) {
109
+ if (project.config.deployment?.dbInstance) {
110
+ -%>
111
+
112
+ - name: Migrate "<%- project.name %>"
113
+ run: |
114
+ edgedb migrate --schema-dir <%- project.relativePath %>/dbschema
115
+ env:
116
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
117
+ EDGEDB_BRANCH: ${{ github.ref_name }}
118
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
119
+ <%
120
+ }
121
+ }
122
+ -%>
123
+
124
+ - name: Test
125
+ run: npm test <%- appsWithDbFilter %>
126
+
127
+ <%
128
+ for (let project of workspace.projects) {
129
+ if (project.config.deployment?.dbInstance) {
130
+ -%>
131
+
132
+ - name: Test "<%- project.name %>"
133
+ run: |
134
+ npm run test -- --filter=<%- project.name %>
135
+ env:
136
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
137
+ EDGEDB_BRANCH: ${{ github.ref_name }}
138
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
139
+ <%
140
+ }
141
+ }
142
+ -%>
65
143
 
66
144
  - name: Check for changes
67
145
  run: |
@@ -78,7 +156,7 @@ jobs:
78
156
  git config --unset core.filemode
79
157
 
80
158
  - name: Build packages
81
- run: npm run build
159
+ run: npm run build <%- appsFilter %>
82
160
 
83
161
  - name: Authenticate to npm registry
84
162
  run: |
@@ -128,20 +206,27 @@ jobs:
128
206
  - name: Push changes
129
207
  run: |
130
208
  git push --follow-tags
209
+
131
210
  <%
132
- if (workspace.projects.some((project) => project.config.deployment?.appName)) {
211
+ for (let project of workspace.projects) {
212
+ if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
133
213
  -%>
134
214
 
135
- - uses: superfly/flyctl-actions/setup-flyctl@master
215
+ - name: Deploy "<%- project.name %>"
216
+ run: |
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"
218
+ env:
219
+ FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
220
+ FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
221
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
222
+ EDGEDB_BRANCH: ${{ github.ref_name }}
223
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
136
224
  <%
137
- }
138
-
139
- for (let project of workspace.projects) {
140
- if (project.config.deployment?.appName) {
225
+ } else if (project.config.deployment?.appName) {
141
226
  -%>
142
227
 
143
- - name: Deploy <%- project.name %>
144
- run:
228
+ - name: Deploy "<%- project.name %>"
229
+ run: |
145
230
  npm run deploy --workspace <%- project.name %>
146
231
  env:
147
232
  FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
@@ -194,6 +279,24 @@ for (let project of workspace.projects) {
194
279
  node-version: 20
195
280
  registry-url: 'https://registry.npmjs.org'
196
281
 
282
+ <%
283
+ if (workspace.projects.some((project) => project.config.deployment?.appName)) {
284
+ -%>
285
+
286
+ - uses: superfly/flyctl-actions/setup-flyctl@master
287
+ <%
288
+ }
289
+
290
+ if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
291
+ -%>
292
+
293
+ - uses: edgedb/setup-edgedb@v1
294
+ with:
295
+ server-version: none
296
+ <%
297
+ }
298
+ -%>
299
+
197
300
  - name: Install packages
198
301
  run: npm ci
199
302
 
@@ -211,8 +314,42 @@ for (let project of workspace.projects) {
211
314
 
212
315
  git config --unset core.filemode
213
316
 
214
- - name: Run tests
215
- run: npm test
317
+ <%
318
+ for (let project of workspace.projects) {
319
+ if (project.config.deployment?.dbInstance) {
320
+ -%>
321
+
322
+ - name: Migrate "<%- project.name %>"
323
+ run: |
324
+ edgedb migrate --schema-dir <%- project.relativePath %>/dbschema
325
+ env:
326
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
327
+ EDGEDB_BRANCH: ${{ github.ref_name }}
328
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
329
+ <%
330
+ }
331
+ }
332
+ -%>
333
+
334
+ - name: Test
335
+ run: npm test <%- appsWithDbFilter %>
336
+
337
+ <%
338
+ for (let project of workspace.projects) {
339
+ if (project.config.deployment?.dbInstance) {
340
+ -%>
341
+
342
+ - name: Test "<%- project.name %>"
343
+ run: |
344
+ npm run test -- --filter=<%- project.name %>
345
+ env:
346
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
347
+ EDGEDB_BRANCH: ${{ github.ref_name }}
348
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
349
+ <%
350
+ }
351
+ }
352
+ -%>
216
353
 
217
354
  - name: Check for changes
218
355
  run: |
@@ -229,7 +366,7 @@ for (let project of workspace.projects) {
229
366
  git config --unset core.filemode
230
367
 
231
368
  - name: Build packages
232
- run: npm run build
369
+ run: npm run build <%- appsFilter %>
233
370
 
234
371
  - name: Update documentation
235
372
  run: |
@@ -262,19 +399,25 @@ for (let project of workspace.projects) {
262
399
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
263
400
  NPM_CONFIG_PROVENANCE: 'true' # must be string, not boolean
264
401
  <%
265
- if (workspace.projects.some((project) => project.config.deployment?.appName)) {
402
+ for (let project of workspace.projects) {
403
+ if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
266
404
  -%>
267
405
 
268
- - uses: superfly/flyctl-actions/setup-flyctl@master
406
+ - name: Deploy "<%- project.name %>"
407
+ run: |
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"
409
+ env:
410
+ FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
411
+ FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
412
+ EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
413
+ EDGEDB_BRANCH: ${{ github.ref_name }}
414
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
269
415
  <%
270
- }
271
-
272
- for (let project of workspace.projects) {
273
- if (project.config.deployment?.appName) {
416
+ } else if (project.config.deployment?.appName) {
274
417
  -%>
275
418
 
276
- - name: Deploy <%- project.name %>
277
- run:
419
+ - name: Deploy "<%- project.name %>"
420
+ run: |
278
421
  npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-next
279
422
  env:
280
423
  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)) {