@jakubmazanec/carson-templates 2.3.0-unstable.f7cb327 → 2.4.0-next.83fd9d1
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/build/getAppUrl.d.ts +2 -0
- package/build/getAppUrl.js +13 -0
- package/build/getAppUrl.js.map +7 -0
- package/build/main.d.ts +1 -0
- package/build/main.js +1 -0
- package/build/main.js.map +2 -2
- package/package.json +9 -9
- package/source/getAppUrl.ts +16 -0
- package/source/main.ts +1 -0
- package/templates/projects/remix-app/.eslintrc.cjs.ejs +5 -5
- package/templates/projects/remix-app/Dockerfile.ejs +34 -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 +45 -2
- package/templates/workspace/.github/workflows/release-pull-request.yaml.ejs +68 -23
- package/templates/workspace/.github/workflows/release.yaml.ejs +171 -24
- package/templates/workspace/turbo.json.ejs +11 -2
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
export function getAppUrl(project, deploymentEnvironment) {
|
|
3
|
+
let appName = project.config.deployment?.appName;
|
|
4
|
+
let appUrl = project.config.deployment?.appUrl;
|
|
5
|
+
if (appUrl && deploymentEnvironment === void 0 || !appName && appUrl) {
|
|
6
|
+
return appUrl;
|
|
7
|
+
}
|
|
8
|
+
if (!appName) {
|
|
9
|
+
return `http://localhost:5000`;
|
|
10
|
+
}
|
|
11
|
+
return `https://${deploymentEnvironment ? `${appName}-${deploymentEnvironment}` : appName}.fly.dev`;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=getAppUrl.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../source/getAppUrl.ts"],
|
|
4
|
+
"sourcesContent": ["import {type Project} from '@jakubmazanec/carson';\n\nexport function getAppUrl(project: Project, deploymentEnvironment?: string) {\n let appName = (project.config as {deployment?: {appName?: string}}).deployment?.appName;\n let appUrl = (project.config as {deployment?: {appUrl?: string}}).deployment?.appUrl;\n\n if ((appUrl && deploymentEnvironment === undefined) || (!appName && appUrl)) {\n return appUrl;\n }\n\n if (!appName) {\n return `http://localhost:5000`;\n }\n\n return `https://${deploymentEnvironment ? `${appName}-${deploymentEnvironment}` : appName}.fly.dev`;\n}\n"],
|
|
5
|
+
"mappings": ";AAEO,gBAAS,UAAU,SAAkB,uBAAgC;AAC1E,MAAI,UAAW,QAAQ,OAA6C,YAAY;AAChF,MAAI,SAAU,QAAQ,OAA4C,YAAY;AAE9E,MAAK,UAAU,0BAA0B,UAAe,CAAC,WAAW,QAAS;AAC3E,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SAAO,WAAW,wBAAwB,GAAG,OAAO,IAAI,qBAAqB,KAAK,OAAO;AAC3F;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/build/main.d.ts
CHANGED
package/build/main.js
CHANGED
package/build/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../source/main.ts"],
|
|
4
|
-
"sourcesContent": ["export * from './constants.js';\nexport * from './getDependencies.js';\nexport * from './getDevelopmentBranch.js';\nexport * from './getMainBranch.js';\nexport * from './getReferences.js';\nexport * from './getWorkspaceName.js';\nexport {default as lodash} from 'lodash';\nexport {default as semver} from 'semver';\n"],
|
|
5
|
-
"mappings": ";AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAQ,WAAW,cAAa;AAChC,SAAQ,WAAW,cAAa;",
|
|
4
|
+
"sourcesContent": ["export * from './constants.js';\nexport * from './getAppUrl.js';\nexport * from './getDependencies.js';\nexport * from './getDevelopmentBranch.js';\nexport * from './getMainBranch.js';\nexport * from './getReferences.js';\nexport * from './getWorkspaceName.js';\nexport {default as lodash} from 'lodash';\nexport {default as semver} from 'semver';\n"],
|
|
5
|
+
"mappings": ";AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAQ,WAAW,cAAa;AAChC,SAAQ,WAAW,cAAa;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jakubmazanec/carson-templates",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0-next.83fd9d1",
|
|
4
4
|
"description": "Collection of Carson templates.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"lodash": "^4.17.21",
|
|
34
|
-
"semver": "^7.6.
|
|
34
|
+
"semver": "^7.6.2"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@jakubmazanec/carson": "^1.1.0",
|
|
@@ -43,17 +43,17 @@
|
|
|
43
43
|
"@types/zen-observable": "^0.8.7",
|
|
44
44
|
"@vitest/coverage-v8": "^1.3.1",
|
|
45
45
|
"del-cli": "^5.1.0",
|
|
46
|
-
"esbuild": "^0.
|
|
46
|
+
"esbuild": "^0.21.4",
|
|
47
47
|
"eslint": "^8.56.0",
|
|
48
|
-
"execa": "^
|
|
48
|
+
"execa": "^9.1.0",
|
|
49
49
|
"fast-glob": "^3.3.2",
|
|
50
50
|
"fs-extra": "^11.2.0",
|
|
51
51
|
"lodash": "^4.17.21",
|
|
52
|
-
"prettier": "^3.
|
|
53
|
-
"prettier-plugin-packagejson": "^2.
|
|
54
|
-
"typedoc": "^0.25.
|
|
55
|
-
"typedoc-plugin-markdown": "^
|
|
56
|
-
"typescript": "^5.
|
|
52
|
+
"prettier": "^3.3.0",
|
|
53
|
+
"prettier-plugin-packagejson": "^2.5.0",
|
|
54
|
+
"typedoc": "^0.25.13",
|
|
55
|
+
"typedoc-plugin-markdown": "^4.0.3",
|
|
56
|
+
"typescript": "^5.4.5",
|
|
57
57
|
"vitest": "^1.3.1",
|
|
58
58
|
"zen-observable": "^0.10.0"
|
|
59
59
|
},
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {type Project} from '@jakubmazanec/carson';
|
|
2
|
+
|
|
3
|
+
export function getAppUrl(project: Project, deploymentEnvironment?: string) {
|
|
4
|
+
let appName = (project.config as {deployment?: {appName?: string}}).deployment?.appName;
|
|
5
|
+
let appUrl = (project.config as {deployment?: {appUrl?: string}}).deployment?.appUrl;
|
|
6
|
+
|
|
7
|
+
if ((appUrl && deploymentEnvironment === undefined) || (!appName && appUrl)) {
|
|
8
|
+
return appUrl;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if (!appName) {
|
|
12
|
+
return `http://localhost:5000`;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return `https://${deploymentEnvironment ? `${appName}-${deploymentEnvironment}` : appName}.fly.dev`;
|
|
16
|
+
}
|
package/source/main.ts
CHANGED
|
@@ -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,31 @@ 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?.appName) {
|
|
47
|
+
-%>
|
|
48
|
+
ARG VITE_APP_URL
|
|
49
|
+
ENV VITE_APP_URL=$VITE_APP_URL
|
|
50
|
+
<%
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (project.config.deployment?.dbInstance) {
|
|
54
|
+
-%>
|
|
55
|
+
ARG EDGEDB_INSTANCE
|
|
56
|
+
ENV EDGEDB_INSTANCE=$EDGEDB_INSTANCE
|
|
57
|
+
ARG EDGEDB_BRANCH
|
|
58
|
+
ENV EDGEDB_BRANCH=$EDGEDB_BRANCH
|
|
59
|
+
<%
|
|
60
|
+
}
|
|
61
|
+
-%>
|
|
43
62
|
|
|
44
63
|
# Throw-away build stage to reduce size of final image
|
|
45
64
|
FROM base as build
|
|
46
65
|
|
|
47
66
|
# 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
|
|
67
|
+
RUN apt-get update -qq && apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3
|
|
50
68
|
|
|
51
69
|
# Install dependencies
|
|
52
70
|
<%- installDependenciesLines.join('\n') %>
|
|
@@ -56,7 +74,17 @@ RUN npm ci --include=dev --ignore-scripts
|
|
|
56
74
|
COPY --link . .
|
|
57
75
|
|
|
58
76
|
# Build
|
|
59
|
-
|
|
77
|
+
<%
|
|
78
|
+
if (project.config.deployment?.dbInstance) {
|
|
79
|
+
-%>
|
|
80
|
+
RUN --mount=type=secret,id=EDGEDB_SECRET_KEY EDGEDB_SECRET_KEY="$(cat /run/secrets/EDGEDB_SECRET_KEY)" npm run build
|
|
81
|
+
<%
|
|
82
|
+
} else {
|
|
83
|
+
-%>
|
|
84
|
+
RUN npm run build -- --filter=<%- project.name %>
|
|
85
|
+
<%
|
|
86
|
+
}
|
|
87
|
+
-%>
|
|
60
88
|
|
|
61
89
|
# Final stage for app image
|
|
62
90
|
FROM base
|
|
@@ -68,6 +96,6 @@ FROM base
|
|
|
68
96
|
RUN npm ci --omit=dev --ignore-scripts
|
|
69
97
|
|
|
70
98
|
# Start the server
|
|
71
|
-
WORKDIR /workspace
|
|
99
|
+
WORKDIR /workspace/<%- project.relativePath %>
|
|
72
100
|
EXPOSE 5000
|
|
73
101
|
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.
|
|
@@ -47,26 +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
|
-
run: |
|
|
67
|
-
edgedb project init --link <%- project.config.deployment?.dbInstance %>
|
|
86
|
+
- uses: edgedb/setup-edgedb@v1
|
|
87
|
+
with:
|
|
88
|
+
server-version: none
|
|
68
89
|
<%
|
|
69
|
-
}
|
|
70
90
|
}
|
|
71
91
|
-%>
|
|
72
92
|
|
|
@@ -87,8 +107,25 @@ for (let project of workspace.projects) {
|
|
|
87
107
|
|
|
88
108
|
git config --unset core.filemode
|
|
89
109
|
|
|
90
|
-
- name:
|
|
91
|
-
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
|
+
-%>
|
|
92
129
|
|
|
93
130
|
- name: Check for changes
|
|
94
131
|
run: |
|
|
@@ -105,7 +142,7 @@ for (let project of workspace.projects) {
|
|
|
105
142
|
git config --unset core.filemode
|
|
106
143
|
|
|
107
144
|
- name: Build packages
|
|
108
|
-
run: npm run build
|
|
145
|
+
run: npm run build <%- appsFilter %>
|
|
109
146
|
|
|
110
147
|
- name: Authenticate to npm registry
|
|
111
148
|
run: |
|
|
@@ -128,21 +165,29 @@ for (let project of workspace.projects) {
|
|
|
128
165
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
129
166
|
NPM_CONFIG_PROVENANCE: 'true' # must be string, not boolean
|
|
130
167
|
<%
|
|
131
|
-
|
|
168
|
+
for (let project of workspace.projects) {
|
|
169
|
+
if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
|
|
132
170
|
-%>
|
|
133
171
|
|
|
134
|
-
-
|
|
172
|
+
- name: Deploy <%- project.name %>
|
|
173
|
+
run: |
|
|
174
|
+
npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-unstable --build-arg "VITE_APP_URL=$VITE_APP_URL" --build-arg "EDGEDB_INSTANCE=$EDGEDB_INSTANCE" --build-arg "EDGEDB_BRANCH=$EDGEDB_BRANCH" --build-secret "EDGEDB_SECRET_KEY=$EDGEDB_SECRET_KEY"
|
|
175
|
+
env:
|
|
176
|
+
VITE_APP_URL: <%- getAppUrl(project, 'unstable') %>
|
|
177
|
+
EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
|
|
178
|
+
EDGEDB_BRANCH: ${{ github.head_ref }}
|
|
179
|
+
EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
|
|
180
|
+
FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
181
|
+
FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
135
182
|
<%
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
for (let project of workspace.projects) {
|
|
139
|
-
if (project.config.deployment?.appName) {
|
|
183
|
+
} else if (project.config.deployment?.appName) {
|
|
140
184
|
-%>
|
|
141
185
|
|
|
142
186
|
- name: Deploy <%- project.name %>
|
|
143
|
-
run:
|
|
144
|
-
npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-unstable
|
|
187
|
+
run: |
|
|
188
|
+
npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-unstable --build-arg "VITE_APP_URL=$VITE_APP_URL"
|
|
145
189
|
env:
|
|
190
|
+
VITE_APP_URL: <%- getAppUrl(project, 'unstable') %>
|
|
146
191
|
FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
147
192
|
FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
148
193
|
<%
|
|
@@ -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,22 +206,31 @@ 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 "VITE_APP_URL=$VITE_APP_URL" --build-arg "EDGEDB_INSTANCE=$EDGEDB_INSTANCE" --build-arg "EDGEDB_BRANCH=$EDGEDB_BRANCH" --build-secret "EDGEDB_SECRET_KEY=$EDGEDB_SECRET_KEY"
|
|
218
|
+
env:
|
|
219
|
+
VITE_APP_URL: <%- getAppUrl(project) %>
|
|
220
|
+
EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
|
|
221
|
+
EDGEDB_BRANCH: ${{ github.ref_name }}
|
|
222
|
+
EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
|
|
223
|
+
FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
224
|
+
FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
136
225
|
<%
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
for (let project of workspace.projects) {
|
|
140
|
-
if (project.config.deployment?.appName) {
|
|
226
|
+
} else if (project.config.deployment?.appName) {
|
|
141
227
|
-%>
|
|
142
228
|
|
|
143
|
-
- name: Deploy <%- project.name %>
|
|
144
|
-
run:
|
|
145
|
-
npm run deploy --workspace <%- project.name %>
|
|
229
|
+
- name: Deploy "<%- project.name %>"
|
|
230
|
+
run: |
|
|
231
|
+
npm run deploy --workspace <%- project.name %> -- --build-arg "VITE_APP_URL=$VITE_APP_URL"
|
|
146
232
|
env:
|
|
233
|
+
VITE_APP_URL: <%- getAppUrl(project) %>
|
|
147
234
|
FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
148
235
|
FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
149
236
|
<%
|
|
@@ -194,6 +281,24 @@ for (let project of workspace.projects) {
|
|
|
194
281
|
node-version: 20
|
|
195
282
|
registry-url: 'https://registry.npmjs.org'
|
|
196
283
|
|
|
284
|
+
<%
|
|
285
|
+
if (workspace.projects.some((project) => project.config.deployment?.appName)) {
|
|
286
|
+
-%>
|
|
287
|
+
|
|
288
|
+
- uses: superfly/flyctl-actions/setup-flyctl@master
|
|
289
|
+
<%
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
|
|
293
|
+
-%>
|
|
294
|
+
|
|
295
|
+
- uses: edgedb/setup-edgedb@v1
|
|
296
|
+
with:
|
|
297
|
+
server-version: none
|
|
298
|
+
<%
|
|
299
|
+
}
|
|
300
|
+
-%>
|
|
301
|
+
|
|
197
302
|
- name: Install packages
|
|
198
303
|
run: npm ci
|
|
199
304
|
|
|
@@ -211,8 +316,42 @@ for (let project of workspace.projects) {
|
|
|
211
316
|
|
|
212
317
|
git config --unset core.filemode
|
|
213
318
|
|
|
214
|
-
|
|
215
|
-
|
|
319
|
+
<%
|
|
320
|
+
for (let project of workspace.projects) {
|
|
321
|
+
if (project.config.deployment?.dbInstance) {
|
|
322
|
+
-%>
|
|
323
|
+
|
|
324
|
+
- name: Migrate "<%- project.name %>"
|
|
325
|
+
run: |
|
|
326
|
+
edgedb migrate --schema-dir <%- project.relativePath %>/dbschema
|
|
327
|
+
env:
|
|
328
|
+
EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
|
|
329
|
+
EDGEDB_BRANCH: ${{ github.ref_name }}
|
|
330
|
+
EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
|
|
331
|
+
<%
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
-%>
|
|
335
|
+
|
|
336
|
+
- name: Test
|
|
337
|
+
run: npm test <%- appsWithDbFilter %>
|
|
338
|
+
|
|
339
|
+
<%
|
|
340
|
+
for (let project of workspace.projects) {
|
|
341
|
+
if (project.config.deployment?.dbInstance) {
|
|
342
|
+
-%>
|
|
343
|
+
|
|
344
|
+
- name: Test "<%- project.name %>"
|
|
345
|
+
run: |
|
|
346
|
+
npm run test -- --filter=<%- project.name %>
|
|
347
|
+
env:
|
|
348
|
+
EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
|
|
349
|
+
EDGEDB_BRANCH: ${{ github.ref_name }}
|
|
350
|
+
EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
|
|
351
|
+
<%
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
-%>
|
|
216
355
|
|
|
217
356
|
- name: Check for changes
|
|
218
357
|
run: |
|
|
@@ -229,7 +368,7 @@ for (let project of workspace.projects) {
|
|
|
229
368
|
git config --unset core.filemode
|
|
230
369
|
|
|
231
370
|
- name: Build packages
|
|
232
|
-
run: npm run build
|
|
371
|
+
run: npm run build <%- appsFilter %>
|
|
233
372
|
|
|
234
373
|
- name: Update documentation
|
|
235
374
|
run: |
|
|
@@ -262,21 +401,29 @@ for (let project of workspace.projects) {
|
|
|
262
401
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
263
402
|
NPM_CONFIG_PROVENANCE: 'true' # must be string, not boolean
|
|
264
403
|
<%
|
|
265
|
-
|
|
404
|
+
for (let project of workspace.projects) {
|
|
405
|
+
if (project.config.deployment?.appName && project.config.deployment?.dbInstance) {
|
|
266
406
|
-%>
|
|
267
407
|
|
|
268
|
-
-
|
|
408
|
+
- name: Deploy "<%- project.name %>"
|
|
409
|
+
run: |
|
|
410
|
+
npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-next --build-arg "VITE_APP_URL=$VITE_APP_URL" --build-arg "EDGEDB_INSTANCE=$EDGEDB_INSTANCE" --build-arg "EDGEDB_BRANCH=$EDGEDB_BRANCH" --build-secret "EDGEDB_SECRET_KEY=$EDGEDB_SECRET_KEY"
|
|
411
|
+
env:
|
|
412
|
+
VITE_APP_URL: <%- getAppUrl(project, 'next') %>
|
|
413
|
+
EDGEDB_INSTANCE: <%- project.config.deployment.dbInstance %>
|
|
414
|
+
EDGEDB_BRANCH: ${{ github.ref_name }}
|
|
415
|
+
EDGEDB_SECRET_KEY: ${{ secrets.<%- lodash.snakeCase(project.config.deployment.dbInstance).toUpperCase() %>_EDGEDB_TOKEN }}
|
|
416
|
+
FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
417
|
+
FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
269
418
|
<%
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
for (let project of workspace.projects) {
|
|
273
|
-
if (project.config.deployment?.appName) {
|
|
419
|
+
} else if (project.config.deployment?.appName) {
|
|
274
420
|
-%>
|
|
275
421
|
|
|
276
|
-
- name: Deploy <%- project.name %>
|
|
277
|
-
run:
|
|
278
|
-
npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-next
|
|
422
|
+
- name: Deploy "<%- project.name %>"
|
|
423
|
+
run: |
|
|
424
|
+
npm run deploy --workspace <%- project.name %> -- --app <%- project.config.deployment?.appName %>-next --build-arg "VITE_APP_URL=$VITE_APP_URL"
|
|
279
425
|
env:
|
|
426
|
+
VITE_APP_URL: <%- getAppUrl(project, 'next') %>
|
|
280
427
|
FLY_ACCESS_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
281
428
|
FLY_API_TOKEN: ${{ secrets.FLY_TOKEN }}
|
|
282
429
|
<%
|
|
@@ -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: [],
|
|
44
45
|
globalDependencies: [
|
|
45
46
|
'.editorconfig',
|
|
46
47
|
'.eslintrc.cjs',
|
|
@@ -51,6 +52,14 @@ let turboConfig = {
|
|
|
51
52
|
],
|
|
52
53
|
};
|
|
53
54
|
|
|
55
|
+
if (workspace.projects.some((project) => project.config.deployment?.appName)) {
|
|
56
|
+
turboConfig.globalEnv.push('VITE_APP_URL');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (workspace.projects.some((project) => project.config.deployment?.dbInstance)) {
|
|
60
|
+
turboConfig.globalEnv.push('EDGEDB_INSTANCE', 'EDGEDB_BRANCH', 'EDGEDB_SECRET_KEY');
|
|
61
|
+
}
|
|
62
|
+
|
|
54
63
|
if (workspace.projects.find((project) => project.name === LINTER_CONFIG_PACKAGE_NAME)) {
|
|
55
64
|
turboConfig.pipeline.lint.dependsOn = [`${LINTER_CONFIG_PACKAGE_NAME}#build`, '^build', 'codegen'];
|
|
56
65
|
}
|