@jakubmazanec/carson-templates 2.3.0-unstable.71d8a69 → 2.3.0-unstable.722cfcc

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.71d8a69",
3
+ "version": "2.3.0-unstable.722cfcc",
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-unstable.722cfcc",
38
+ "@jakubmazanec/eslint-config": "3.3.1-unstable.722cfcc",
39
+ "@jakubmazanec/fs-utils": "0.2.3-unstable.722cfcc",
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",
@@ -51,14 +51,14 @@
51
51
  "lodash": "^4.17.21",
52
52
  "prettier": "^3.2.5",
53
53
  "prettier-plugin-packagejson": "^2.4.12",
54
- "typedoc": "^0.25.10",
54
+ "typedoc": "^0.25.13",
55
55
  "typedoc-plugin-markdown": "^3.17.1",
56
- "typescript": "^5.3.3",
56
+ "typescript": "^5.4.5",
57
57
  "vitest": "^1.3.1",
58
58
  "zen-observable": "^0.10.0"
59
59
  },
60
60
  "peerDependencies": {
61
- "@jakubmazanec/carson": "^1.0.0"
61
+ "@jakubmazanec/carson": "1.1.1-unstable.722cfcc"
62
62
  },
63
63
  "packageManager": "npm@10.1.0",
64
64
  "engines": {
@@ -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') %>
@@ -56,7 +67,17 @@ RUN npm ci --include=dev --ignore-scripts
56
67
  COPY --link . .
57
68
 
58
69
  # Build
59
- 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
+ -%>
60
81
 
61
82
  # Final stage for app image
62
83
  FROM base
@@ -68,6 +89,6 @@ FROM base
68
89
  RUN npm ci --omit=dev --ignore-scripts
69
90
 
70
91
  # Start the server
71
- WORKDIR /workspace/apps/somewhere
92
+ WORKDIR /workspace/<%- project.relativePath %>
72
93
  EXPOSE 5000
73
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.
@@ -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.
@@ -54,21 +69,6 @@ if (workspace.projects.some((project) => project.config.deployment?.dbInstance))
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_INSTANCE: <%- project.config.deployment.dbInstance %>
65
- EDGEDB_BRANCH: ${{ github.head_ref }}
66
- EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
67
- run: |
68
- edgedb project init --link --server-instance <%- project.config.deployment.dbInstance %> --project-dir <%- project.relativePath %> --non-interactive
69
- <%
70
- }
71
- }
72
72
  -%>
73
73
 
74
74
  - name: Install packages
@@ -88,8 +88,25 @@ for (let project of workspace.projects) {
88
88
 
89
89
  git config --unset core.filemode
90
90
 
91
- - name: Run tests
92
- 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
+ -%>
93
110
 
94
111
  - name: Check for changes
95
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.
@@ -47,28 +73,20 @@ jobs:
47
73
  registry-url: 'https://registry.npmjs.org'
48
74
 
49
75
  <%
50
- if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
76
+ if (workspace.projects.some((project) => project.config.deployment?.appName)) {
51
77
  -%>
52
78
 
53
- - uses: edgedb/setup-edgedb@v1
54
- with:
55
- server-version: none
79
+ - uses: superfly/flyctl-actions/setup-flyctl@master
56
80
  <%
57
81
  }
58
82
 
59
- for (let project of workspace.projects) {
60
- if (project.config.deployment?.dbInstance) {
83
+ if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
61
84
  -%>
62
85
 
63
- - name: Authenticate EdgeDB Cloud
64
- env:
65
- EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
66
- EDGEDB_BRANCH: ${{ github.head_ref }}
67
- EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
68
- run: |
69
- edgedb project init --link --server-instance <%- project.config.deployment.dbInstance %> --project-dir <%- project.relativePath %>--non-interactive
86
+ - uses: edgedb/setup-edgedb@v1
87
+ with:
88
+ server-version: none
70
89
  <%
71
- }
72
90
  }
73
91
  -%>
74
92
 
@@ -89,8 +107,25 @@ for (let project of workspace.projects) {
89
107
 
90
108
  git config --unset core.filemode
91
109
 
92
- - name: Run tests
93
- 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
+ -%>
94
129
 
95
130
  - name: Check for changes
96
131
  run: |
@@ -107,7 +142,7 @@ for (let project of workspace.projects) {
107
142
  git config --unset core.filemode
108
143
 
109
144
  - name: Build packages
110
- run: npm run build
145
+ run: npm run build <%- appsFilter %>
111
146
 
112
147
  - name: Authenticate to npm registry
113
148
  run: |
@@ -130,19 +165,25 @@ for (let project of workspace.projects) {
130
165
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
131
166
  NPM_CONFIG_PROVENANCE: 'true' # must be string, not boolean
132
167
  <%
133
- 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) {
134
170
  -%>
135
171
 
136
- - 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 }}
137
181
  <%
138
- }
139
-
140
- for (let project of workspace.projects) {
141
- if (project.config.deployment?.appName) {
182
+ } else if (project.config.deployment?.appName) {
142
183
  -%>
143
184
 
144
185
  - name: Deploy <%- project.name %>
145
- run:
186
+ run: |
146
187
  npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-unstable
147
188
  env:
148
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: |
@@ -130,46 +208,25 @@ jobs:
130
208
  git push --follow-tags
131
209
 
132
210
  <%
133
- if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
134
- -%>
135
-
136
- - uses: edgedb/setup-edgedb@v1
137
- with:
138
- server-version: none
139
- <%
140
- }
141
-
142
211
  for (let project of workspace.projects) {
143
- if (project.config.deployment?.dbInstance) {
212
+ if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
144
213
  -%>
145
214
 
146
- - name: Migrate "<%- project.name %>"
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"
147
218
  env:
219
+ FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
220
+ FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
148
221
  EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
149
- EDGEDB_BRANCH: ${{ github.ref_name }}
150
- EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
151
- run: |
152
- edgedb project init --link --server-instance <%- project.config.deployment.dbInstance %> --project-dir <%- project.relativePath %>--non-interactive
153
- edgedb migrate -I <%- project.config.deployment.dbInstance %>
154
- <%
155
- }
156
- }
157
- -%>
158
-
222
+ EDGEDB_BRANCH: ${{ github.ref_name }}
223
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
159
224
  <%
160
- if (workspace.projects.some((project) => project.config.deployment?.appName)) {
161
- -%>
162
-
163
- - uses: superfly/flyctl-actions/setup-flyctl@master
164
- <%
165
- }
166
-
167
- for (let project of workspace.projects) {
168
- if (project.config.deployment?.appName) {
225
+ } else if (project.config.deployment?.appName) {
169
226
  -%>
170
227
 
171
228
  - name: Deploy "<%- project.name %>"
172
- run:
229
+ run: |
173
230
  npm run deploy --workspace <%- project.name %>
174
231
  env:
175
232
  FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
@@ -222,6 +279,24 @@ for (let project of workspace.projects) {
222
279
  node-version: 20
223
280
  registry-url: 'https://registry.npmjs.org'
224
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
+
225
300
  - name: Install packages
226
301
  run: npm ci
227
302
 
@@ -239,8 +314,42 @@ for (let project of workspace.projects) {
239
314
 
240
315
  git config --unset core.filemode
241
316
 
242
- - name: Run tests
243
- 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
+ -%>
244
353
 
245
354
  - name: Check for changes
246
355
  run: |
@@ -257,7 +366,7 @@ for (let project of workspace.projects) {
257
366
  git config --unset core.filemode
258
367
 
259
368
  - name: Build packages
260
- run: npm run build
369
+ run: npm run build <%- appsFilter %>
261
370
 
262
371
  - name: Update documentation
263
372
  run: |
@@ -290,45 +399,25 @@ for (let project of workspace.projects) {
290
399
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
291
400
  NPM_CONFIG_PROVENANCE: 'true' # must be string, not boolean
292
401
  <%
293
- if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
294
- -%>
295
-
296
- - uses: edgedb/setup-edgedb@v1
297
- with:
298
- server-version: none
299
- <%
300
- }
301
-
302
402
  for (let project of workspace.projects) {
303
- if (project.config.deployment?.dbInstance) {
403
+ if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
304
404
  -%>
305
405
 
306
- - name: Migrate "<%- project.name %>"
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"
307
409
  env:
410
+ FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
411
+ FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
308
412
  EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
309
- EDGEDB_BRANCH: ${{ github.ref_name }}
310
- EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance.split('/')[1] ?? '').toUpperCase() %>_EDGEDB_TOKEN }}
311
- run: |
312
- edgedb project init --link --server-instance <%- project.config.deployment.dbInstance %> --project-dir <%- project.relativePath %>--non-interactive
313
- edgedb migrate -I <%- project.config.deployment.dbInstance %>
413
+ EDGEDB_BRANCH: ${{ github.ref_name }}
414
+ EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
314
415
  <%
315
- }
316
- }
317
- -%>
318
- <%
319
- if (workspace.projects.some((project) => project.config.deployment?.appName)) {
320
- -%>
321
-
322
- - uses: superfly/flyctl-actions/setup-flyctl@master
323
- <%
324
- }
325
-
326
- for (let project of workspace.projects) {
327
- if (project.config.deployment?.appName) {
416
+ } else if (project.config.deployment?.appName) {
328
417
  -%>
329
418
 
330
419
  - name: Deploy "<%- project.name %>"
331
- run:
420
+ run: |
332
421
  npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-next
333
422
  env:
334
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)) {