@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 +9 -9
- package/templates/projects/remix-app/.eslintrc.cjs.ejs +5 -5
- package/templates/projects/remix-app/Dockerfile.ejs +27 -6
- package/templates/projects/remix-app/README.md.create.ejs +1 -1
- 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 +34 -17
- package/templates/workspace/.github/workflows/release-pull-request.yaml.ejs +65 -24
- package/templates/workspace/.github/workflows/release.yaml.ejs +156 -67
- 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.0-unstable.
|
|
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.
|
|
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-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.
|
|
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-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
|
-
|
|
8
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
@@ -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:
|
|
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?.
|
|
76
|
+
if (workspace.projects.some((project) => project.config.deployment?.appName)) {
|
|
51
77
|
-%>
|
|
52
78
|
|
|
53
|
-
- uses:
|
|
54
|
-
with:
|
|
55
|
-
server-version: none
|
|
79
|
+
- uses: superfly/flyctl-actions/setup-flyctl@master
|
|
56
80
|
<%
|
|
57
81
|
}
|
|
58
82
|
|
|
59
|
-
|
|
60
|
-
if (project.config.deployment?.dbInstance) {
|
|
83
|
+
if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
|
|
61
84
|
-%>
|
|
62
85
|
|
|
63
|
-
-
|
|
64
|
-
|
|
65
|
-
|
|
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:
|
|
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
|
-
|
|
168
|
+
for (let project of workspace.projects) {
|
|
169
|
+
if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
|
|
134
170
|
-%>
|
|
135
171
|
|
|
136
|
-
-
|
|
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
|
-
|
|
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: |
|
|
@@ -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:
|
|
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
|
|
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 (
|
|
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
|
-
|
|
243
|
-
|
|
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:
|
|
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
|
|
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)) {
|