@abgov/nx-oc 13.0.0-beta.4 → 13.0.0-beta.5
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
|
@@ -9,6 +9,20 @@ const git_utils_1 = require("../../utils/git-utils");
|
|
|
9
9
|
const oc_utils_1 = require("../../utils/oc-utils");
|
|
10
10
|
const app_type_1 = require("../../utils/app-type");
|
|
11
11
|
const SANDBOX_GENERATOR = '@abgov/nx-oc:sandbox';
|
|
12
|
+
const DATABASE_TAG_PREFIX = 'adsp:database:';
|
|
13
|
+
// Infer the database when --database wasn't passed, so a DB-backed service isn't
|
|
14
|
+
// silently deployed without its DATABASE_URL/migrate wiring. Prefer the explicit
|
|
15
|
+
// tag the express-service generator records; fall back to a drizzle db:migrate
|
|
16
|
+
// target (postgres) for projects generated before the tag existed.
|
|
17
|
+
function detectDatabase(config) {
|
|
18
|
+
var _a, _b;
|
|
19
|
+
const tag = ((_a = config.tags) !== null && _a !== void 0 ? _a : []).find((t) => t.startsWith(DATABASE_TAG_PREFIX));
|
|
20
|
+
if (tag)
|
|
21
|
+
return tag.slice(DATABASE_TAG_PREFIX.length);
|
|
22
|
+
if ((_b = config.targets) === null || _b === void 0 ? void 0 : _b['db:migrate'])
|
|
23
|
+
return 'postgres';
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
12
26
|
// Resolves the sandbox container registry once per workspace and persists it to
|
|
13
27
|
// nx.json so subsequent sandbox generations reuse it without re-prompting:
|
|
14
28
|
// --registry flag → nx.json → derived from git remote (ghcr.io/<org>) → prompt.
|
|
@@ -47,7 +61,7 @@ function persistRegistry(host, registry) {
|
|
|
47
61
|
}
|
|
48
62
|
function normalizeOptions(host, options) {
|
|
49
63
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
var _a, _b;
|
|
64
|
+
var _a, _b, _c, _d;
|
|
51
65
|
const projectName = (0, devkit_1.names)(options.project).fileName;
|
|
52
66
|
const config = (0, devkit_1.readProjectConfiguration)(host, projectName);
|
|
53
67
|
const appType = (_a = options.appType) !== null && _a !== void 0 ? _a : (0, app_type_1.detectApplicationType)(config);
|
|
@@ -58,8 +72,7 @@ function normalizeOptions(host, options) {
|
|
|
58
72
|
// different experimenters never collide on GHCR's org-global package names.
|
|
59
73
|
const imageName = `${options.sandboxProject}-${projectName}`.toLowerCase();
|
|
60
74
|
const repoSlug = (0, git_utils_1.getGitHubRepo)(remoteUrl);
|
|
61
|
-
return Object.assign(Object.assign({}, options), { appType,
|
|
62
|
-
adsp,
|
|
75
|
+
return Object.assign(Object.assign({}, options), { appType, database: (_d = (_c = options.database) !== null && _c !== void 0 ? _c : detectDatabase(config)) !== null && _d !== void 0 ? _d : 'none', adsp,
|
|
63
76
|
projectName, buildOutputPath: (0, app_type_1.getBuildOutputPath)(config), registry, registryHost: registry.split('/')[0], registryOrg: registry.split('/').slice(1).join('/'), imageName, imageRef: `${registry}/${imageName}:sandbox`, sourceRepositoryUrl: repoSlug ? `https://github.com/${repoSlug}` : undefined });
|
|
64
77
|
});
|
|
65
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../../../../packages/nx-oc/src/generators/sandbox/sandbox.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../../../../packages/nx-oc/src/generators/sandbox/sandbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -216,6 +216,75 @@ describe('Sandbox Generator', () => {
|
|
|
216
216
|
expect(config.targets['sandbox'].options.database).toBe('mongo');
|
|
217
217
|
});
|
|
218
218
|
|
|
219
|
+
describe('database auto-detection (no --database flag)', () => {
|
|
220
|
+
function addServiceProject(host, extra: Record<string, unknown> = {}) {
|
|
221
|
+
addProjectConfiguration(host, 'test', {
|
|
222
|
+
root: 'apps/test',
|
|
223
|
+
projectType: 'application',
|
|
224
|
+
targets: {
|
|
225
|
+
build: {
|
|
226
|
+
executor: '@nx/webpack:webpack',
|
|
227
|
+
options: { compiler: 'tsc', target: 'node' },
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
...extra,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
it('detects postgres from the adsp:database tag', async () => {
|
|
235
|
+
const host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
236
|
+
addServiceProject(host, { tags: ['adsp:database:postgres'] });
|
|
237
|
+
await generator(host, options); // options has no database
|
|
238
|
+
expect(
|
|
239
|
+
readProjectConfiguration(host, 'test').targets['sandbox'].options.database
|
|
240
|
+
).toBe('postgres');
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
it('detects mongo from the adsp:database tag', async () => {
|
|
244
|
+
const host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
245
|
+
addServiceProject(host, { tags: ['adsp:database:mongo'] });
|
|
246
|
+
await generator(host, options);
|
|
247
|
+
expect(
|
|
248
|
+
readProjectConfiguration(host, 'test').targets['sandbox'].options.database
|
|
249
|
+
).toBe('mongo');
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
it('falls back to postgres from a drizzle db:migrate target (pre-tag projects)', async () => {
|
|
253
|
+
const host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
254
|
+
addServiceProject(host, {
|
|
255
|
+
targets: {
|
|
256
|
+
build: {
|
|
257
|
+
executor: '@nx/webpack:webpack',
|
|
258
|
+
options: { compiler: 'tsc', target: 'node' },
|
|
259
|
+
},
|
|
260
|
+
'db:migrate': { executor: 'nx:run-commands', options: {} },
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
await generator(host, options);
|
|
264
|
+
expect(
|
|
265
|
+
readProjectConfiguration(host, 'test').targets['sandbox'].options.database
|
|
266
|
+
).toBe('postgres');
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
it('the --database flag overrides detection', async () => {
|
|
270
|
+
const host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
271
|
+
addServiceProject(host, { tags: ['adsp:database:postgres'] });
|
|
272
|
+
await generator(host, { ...options, database: 'none' });
|
|
273
|
+
expect(
|
|
274
|
+
readProjectConfiguration(host, 'test').targets['sandbox'].options.database
|
|
275
|
+
).toBeUndefined(); // explicit none → no database key
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
it('leaves database unset when there is no signal', async () => {
|
|
279
|
+
const host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
280
|
+
addServiceProject(host);
|
|
281
|
+
await generator(host, options);
|
|
282
|
+
expect(
|
|
283
|
+
readProjectConfiguration(host, 'test').targets['sandbox'].options.database
|
|
284
|
+
).toBeUndefined();
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
|
|
219
288
|
it('registers the deployment Route redirect URI for a frontend client', async () => {
|
|
220
289
|
const host = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
221
290
|
addFrontendProject(host);
|