@jakubmazanec/carson-templates 2.2.1 → 2.3.0-next.290ef27
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 +9 -9
- package/templates/projects/remix-app/.eslintrc.cjs.ejs +8 -1
- package/templates/projects/remix-app/Dockerfile.ejs +28 -6
- package/templates/projects/remix-app/README.md.create.ejs +1 -1
- package/templates/projects/remix-app/edgedb.toml.ejs +7 -0
- package/templates/projects/remix-app/tsconfig.json.ejs +6 -1
- package/templates/projects/remix-app/tsconfig.typecheck.json.ejs +13 -7
- package/templates/workspace/.dockerignore.ejs +10 -0
- package/templates/workspace/.github/workflows/check-pull-request.yaml.ejs +45 -2
- package/templates/workspace/.github/workflows/release-pull-request.yaml.ejs +77 -10
- package/templates/workspace/.github/workflows/release.yaml.ejs +165 -22
- package/templates/workspace/turbo.json.ejs +4 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jakubmazanec/carson-templates",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0-next.290ef27",
|
|
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.
|
|
34
|
+
"semver": "^7.6.2"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@jakubmazanec/carson": "
|
|
38
|
-
"@jakubmazanec/eslint-config": "
|
|
39
|
-
"@jakubmazanec/fs-utils": "
|
|
37
|
+
"@jakubmazanec/carson": "1.1.1-next.290ef27",
|
|
38
|
+
"@jakubmazanec/eslint-config": "3.3.1-next.290ef27",
|
|
39
|
+
"@jakubmazanec/fs-utils": "0.2.3-next.290ef27",
|
|
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.
|
|
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.
|
|
54
|
+
"typedoc": "^0.25.13",
|
|
55
55
|
"typedoc-plugin-markdown": "^3.17.1",
|
|
56
|
-
"typescript": "^5.
|
|
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": "
|
|
61
|
+
"@jakubmazanec/carson": "1.1.1-next.290ef27"
|
|
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(
|
|
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
|
-
|
|
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
|
|
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
|
|
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: ['./
|
|
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:
|
|
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:
|
|
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
|
-
|
|
168
|
+
for (let project of workspace.projects) {
|
|
169
|
+
if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
|
|
108
170
|
-%>
|
|
109
171
|
|
|
110
|
-
-
|
|
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
|
-
|
|
64
|
-
|
|
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
|
-
|
|
211
|
+
for (let project of workspace.projects) {
|
|
212
|
+
if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
|
|
133
213
|
-%>
|
|
134
214
|
|
|
135
|
-
-
|
|
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
|
-
|
|
215
|
-
|
|
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
|
-
|
|
402
|
+
for (let project of workspace.projects) {
|
|
403
|
+
if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
|
|
266
404
|
-%>
|
|
267
405
|
|
|
268
|
-
-
|
|
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)) {
|