@insureco/cli 0.1.10 → 0.1.12
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/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +6 -52
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +40 -57
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/rollback.d.ts.map +1 -1
- package/dist/commands/rollback.js +10 -35
- package/dist/commands/rollback.js.map +1 -1
- package/dist/commands/sample.d.ts +2 -0
- package/dist/commands/sample.d.ts.map +1 -1
- package/dist/commands/sample.js +140 -12
- package/dist/commands/sample.js.map +1 -1
- package/dist/commands/versions.d.ts.map +1 -1
- package/dist/commands/versions.js +10 -56
- package/dist/commands/versions.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/builder.d.ts.map +1 -1
- package/dist/lib/builder.js +58 -12
- package/dist/lib/builder.js.map +1 -1
- package/dist/lib/watch.d.ts +26 -0
- package/dist/lib/watch.d.ts.map +1 -0
- package/dist/lib/watch.js +136 -0
- package/dist/lib/watch.js.map +1 -0
- package/dist/templates/nextjs-oauth/.dockerignore +6 -0
- package/dist/templates/nextjs-oauth/.env.example +12 -0
- package/dist/templates/nextjs-oauth/Dockerfile +51 -0
- package/dist/templates/nextjs-oauth/README.md +115 -0
- package/dist/templates/nextjs-oauth/catalog-info.yaml +17 -0
- package/dist/templates/nextjs-oauth/helm/Chart.yaml +6 -0
- package/dist/templates/nextjs-oauth/helm/templates/_helpers.tpl +49 -0
- package/dist/templates/nextjs-oauth/helm/templates/configmap.yaml +10 -0
- package/dist/templates/nextjs-oauth/helm/templates/deployment.yaml +56 -0
- package/dist/templates/nextjs-oauth/helm/templates/ingress.yaml +41 -0
- package/dist/templates/nextjs-oauth/helm/templates/service.yaml +15 -0
- package/dist/templates/nextjs-oauth/helm/values.yaml +69 -0
- package/dist/templates/nextjs-oauth/helm/{{name}}/Chart.yaml +9 -0
- package/dist/templates/nextjs-oauth/helm/{{name}}/templates/deployment.yaml +68 -0
- package/dist/templates/nextjs-oauth/helm/{{name}}/templates/service.yaml +17 -0
- package/dist/templates/nextjs-oauth/helm/{{name}}/values.yaml +51 -0
- package/dist/templates/nextjs-oauth/next.config.js +23 -0
- package/dist/templates/nextjs-oauth/package.json +30 -0
- package/dist/templates/nextjs-oauth/public/.gitkeep +0 -0
- package/dist/templates/nextjs-oauth/src/app/api/auth/callback/route.ts +77 -0
- package/dist/templates/nextjs-oauth/src/app/api/auth/login/route.ts +16 -0
- package/dist/templates/nextjs-oauth/src/app/api/auth/logout/route.ts +7 -0
- package/dist/templates/nextjs-oauth/src/app/api/auth/session/route.ts +42 -0
- package/dist/templates/nextjs-oauth/src/app/api/example/route.ts +63 -0
- package/dist/templates/nextjs-oauth/src/app/api/health/route.ts +10 -0
- package/dist/templates/nextjs-oauth/src/app/dashboard/page.tsx +92 -0
- package/dist/templates/nextjs-oauth/src/app/layout.tsx +18 -0
- package/dist/templates/nextjs-oauth/src/app/page.tsx +110 -0
- package/dist/templates/nextjs-oauth/src/lib/auth.ts +285 -0
- package/dist/templates/nextjs-oauth/src/middleware.ts +71 -0
- package/dist/templates/nextjs-oauth/tsconfig.json +26 -0
- package/dist/types/index.d.ts +9 -5
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEjE,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA2HzE;AAGD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCpG"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -5,6 +5,7 @@ import { loadLinkedService } from '../lib/config.js';
|
|
|
5
5
|
import { BuilderClient } from '../lib/builder.js';
|
|
6
6
|
import { KokoClient } from '../lib/api.js';
|
|
7
7
|
import { log, spinner, formatTable } from '../lib/output.js';
|
|
8
|
+
import { watchBuild, WatchError } from '../lib/watch.js';
|
|
8
9
|
export async function deployCommand(options) {
|
|
9
10
|
// Check if linked
|
|
10
11
|
const linkedService = await loadLinkedService();
|
|
@@ -99,7 +100,7 @@ export async function deployCommand(options) {
|
|
|
99
100
|
log.info('Watching build progress...');
|
|
100
101
|
log.dim('Press Ctrl+C to stop watching');
|
|
101
102
|
log.info('');
|
|
102
|
-
await watchBuild(builder, buildId);
|
|
103
|
+
await watchBuild(builder, buildId, { label: 'Build' });
|
|
103
104
|
}
|
|
104
105
|
else {
|
|
105
106
|
log.info('');
|
|
@@ -111,6 +112,10 @@ export async function deployCommand(options) {
|
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
114
|
catch (error) {
|
|
115
|
+
if (error instanceof WatchError) {
|
|
116
|
+
// watchBuild already printed diagnostics
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
114
119
|
sp.stop(false);
|
|
115
120
|
if (error instanceof Error) {
|
|
116
121
|
log.error(`Deploy failed: ${error.message}`);
|
|
@@ -118,57 +123,6 @@ export async function deployCommand(options) {
|
|
|
118
123
|
process.exit(1);
|
|
119
124
|
}
|
|
120
125
|
}
|
|
121
|
-
async function watchBuild(builder, buildId) {
|
|
122
|
-
const terminalStates = ['completed', 'failed'];
|
|
123
|
-
let lastStatus = '';
|
|
124
|
-
while (true) {
|
|
125
|
-
const result = await builder.getBuild(buildId);
|
|
126
|
-
if (!result.success || !result.data) {
|
|
127
|
-
log.error('Failed to get build status');
|
|
128
|
-
process.exit(1);
|
|
129
|
-
}
|
|
130
|
-
const build = result.data;
|
|
131
|
-
if (build.status !== lastStatus) {
|
|
132
|
-
lastStatus = build.status;
|
|
133
|
-
printBuildStatus(build);
|
|
134
|
-
}
|
|
135
|
-
if (terminalStates.includes(build.status)) {
|
|
136
|
-
log.info('');
|
|
137
|
-
if (build.status === 'completed') {
|
|
138
|
-
log.success('Build completed successfully!');
|
|
139
|
-
if (build.imageTag) {
|
|
140
|
-
log.dim(` Image: ${build.imageTag}`);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
log.error('Build failed');
|
|
145
|
-
if (build.error) {
|
|
146
|
-
log.dim(` Error: ${build.error}`);
|
|
147
|
-
}
|
|
148
|
-
log.info('');
|
|
149
|
-
log.info('View full logs:');
|
|
150
|
-
log.dim(` iec logs --build ${buildId}`);
|
|
151
|
-
process.exit(1);
|
|
152
|
-
}
|
|
153
|
-
break;
|
|
154
|
-
}
|
|
155
|
-
// Poll every 2 seconds
|
|
156
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
function printBuildStatus(build) {
|
|
160
|
-
const statusEmoji = {
|
|
161
|
-
queued: '\u23f3', // hourglass
|
|
162
|
-
cloning: '\ud83d\udce5', // inbox
|
|
163
|
-
building: '\ud83d\udd28', // hammer
|
|
164
|
-
pushing: '\ud83d\udce4', // outbox
|
|
165
|
-
deploying: '\ud83d\ude80', // rocket
|
|
166
|
-
completed: '\u2705', // check
|
|
167
|
-
failed: '\u274c', // x
|
|
168
|
-
};
|
|
169
|
-
const emoji = statusEmoji[build.status] || '\u2022';
|
|
170
|
-
log.info(`${emoji} ${build.status}`);
|
|
171
|
-
}
|
|
172
126
|
// List recent builds
|
|
173
127
|
export async function listBuildsCommand(options) {
|
|
174
128
|
const builder = await BuilderClient.create();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAUA,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAUD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FrE"}
|
package/dist/commands/push.js
CHANGED
|
@@ -6,6 +6,18 @@ import { tmpdir } from 'node:os';
|
|
|
6
6
|
import { loadLinkedService, loadAuth } from '../lib/config.js';
|
|
7
7
|
import { BuilderClient } from '../lib/builder.js';
|
|
8
8
|
import { log, spinner } from '../lib/output.js';
|
|
9
|
+
import { watchBuild, WatchError } from '../lib/watch.js';
|
|
10
|
+
function resolveEnvironment(options) {
|
|
11
|
+
if (options.prod)
|
|
12
|
+
return 'prod';
|
|
13
|
+
if (options.uat)
|
|
14
|
+
return 'uat';
|
|
15
|
+
if (options.sandbox)
|
|
16
|
+
return 'sandbox';
|
|
17
|
+
if (options.env)
|
|
18
|
+
return options.env;
|
|
19
|
+
return 'sandbox';
|
|
20
|
+
}
|
|
9
21
|
export async function pushCommand(options) {
|
|
10
22
|
// Check authentication
|
|
11
23
|
const auth = await loadAuth();
|
|
@@ -19,23 +31,21 @@ export async function pushCommand(options) {
|
|
|
19
31
|
log.error('Not linked to a service. Run "iec link" first.');
|
|
20
32
|
process.exit(1);
|
|
21
33
|
}
|
|
22
|
-
const {
|
|
34
|
+
const { serviceName } = linkedService;
|
|
35
|
+
const environment = resolveEnvironment(options);
|
|
23
36
|
const projectDir = process.cwd();
|
|
24
37
|
log.info(`Pushing ${serviceName}`);
|
|
25
|
-
log.dim(`
|
|
38
|
+
log.dim(` Environment: ${environment}`);
|
|
26
39
|
// Create tarball
|
|
27
40
|
const sp = spinner('Creating archive');
|
|
28
41
|
let archivePath;
|
|
29
42
|
let archiveSize;
|
|
30
|
-
let checksum;
|
|
31
43
|
try {
|
|
32
44
|
archivePath = await createTarball(projectDir);
|
|
33
45
|
const stats = await stat(archivePath);
|
|
34
46
|
archiveSize = stats.size;
|
|
35
|
-
checksum = await calculateChecksum(archivePath);
|
|
36
47
|
sp.stop(true);
|
|
37
48
|
log.dim(` Archive size: ${formatBytes(archiveSize)}`);
|
|
38
|
-
log.dim(` Checksum: ${checksum.substring(0, 12)}...`);
|
|
39
49
|
}
|
|
40
50
|
catch (error) {
|
|
41
51
|
sp.stop(false);
|
|
@@ -44,37 +54,47 @@ export async function pushCommand(options) {
|
|
|
44
54
|
}
|
|
45
55
|
process.exit(1);
|
|
46
56
|
}
|
|
47
|
-
// Upload to builder
|
|
48
|
-
const spUpload = spinner('Uploading
|
|
57
|
+
// Upload to builder (builder queues a build automatically)
|
|
58
|
+
const spUpload = spinner('Uploading and triggering build');
|
|
49
59
|
try {
|
|
50
60
|
const builder = await BuilderClient.create();
|
|
51
61
|
const archiveBuffer = await readFile(archivePath);
|
|
52
62
|
const result = await builder.push({
|
|
53
|
-
serviceId,
|
|
54
63
|
serviceName,
|
|
55
64
|
archive: archiveBuffer,
|
|
56
|
-
|
|
65
|
+
environment,
|
|
57
66
|
message: options.message || getLastCommitMessage(),
|
|
58
67
|
});
|
|
68
|
+
// Clean up temp file
|
|
69
|
+
execSync(`rm -f "${archivePath}"`, { stdio: 'ignore' });
|
|
59
70
|
if (!result.success || !result.data) {
|
|
60
71
|
spUpload.stop(false);
|
|
61
|
-
log.error(`
|
|
72
|
+
log.error(`Push failed: ${result.error?.message || 'Unknown error'}`);
|
|
62
73
|
process.exit(1);
|
|
63
74
|
}
|
|
64
75
|
spUpload.stop(true);
|
|
65
|
-
const {
|
|
66
|
-
log.success(`
|
|
76
|
+
const { buildId, version, message } = result.data;
|
|
77
|
+
log.success(`Build queued: ${buildId.substring(0, 8)}`);
|
|
78
|
+
log.dim(` Version: ${version}`);
|
|
67
79
|
log.dim(` ${message}`);
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
80
|
+
if (options.watch || options.deploy) {
|
|
81
|
+
log.info('');
|
|
82
|
+
log.info('Watching build progress...');
|
|
83
|
+
log.dim('Press Ctrl+C to stop watching');
|
|
84
|
+
try {
|
|
85
|
+
await watchBuild(builder, buildId, { label: 'Build' });
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (error instanceof WatchError) {
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
73
93
|
}
|
|
74
94
|
else {
|
|
75
95
|
log.info('');
|
|
76
|
-
log.info('To
|
|
77
|
-
log.dim(` iec
|
|
96
|
+
log.info('To watch progress:');
|
|
97
|
+
log.dim(` iec status --build ${buildId.substring(0, 8)}`);
|
|
78
98
|
}
|
|
79
99
|
}
|
|
80
100
|
catch (error) {
|
|
@@ -101,6 +121,7 @@ async function createTarball(projectDir) {
|
|
|
101
121
|
const exclusions = [
|
|
102
122
|
'--exclude=node_modules',
|
|
103
123
|
'--exclude=.git',
|
|
124
|
+
'--exclude=.next',
|
|
104
125
|
'--exclude=dist',
|
|
105
126
|
'--exclude=build',
|
|
106
127
|
'--exclude=.env',
|
|
@@ -130,42 +151,4 @@ function formatBytes(bytes) {
|
|
|
130
151
|
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
131
152
|
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
132
153
|
}
|
|
133
|
-
async function triggerDeploy(builder, serviceId, versionId, options) {
|
|
134
|
-
// Resolve environment
|
|
135
|
-
let environment = 'sandbox';
|
|
136
|
-
if (options.prod) {
|
|
137
|
-
environment = 'prod';
|
|
138
|
-
}
|
|
139
|
-
else if (options.uat) {
|
|
140
|
-
environment = 'uat';
|
|
141
|
-
}
|
|
142
|
-
else if (options.sandbox) {
|
|
143
|
-
environment = 'sandbox';
|
|
144
|
-
}
|
|
145
|
-
else if (options.env) {
|
|
146
|
-
environment = options.env;
|
|
147
|
-
}
|
|
148
|
-
log.info('');
|
|
149
|
-
log.info(`Deploying to ${environment}...`);
|
|
150
|
-
const sp = spinner('Triggering deployment');
|
|
151
|
-
const result = await builder.deployVersion(versionId, environment);
|
|
152
|
-
if (!result.success || !result.data) {
|
|
153
|
-
sp.stop(false);
|
|
154
|
-
log.error(`Deploy failed: ${result.error?.message || 'Unknown error'}`);
|
|
155
|
-
process.exit(1);
|
|
156
|
-
}
|
|
157
|
-
sp.stop(true);
|
|
158
|
-
log.success(`Deployment triggered: ${result.data.buildId.substring(0, 8)}`);
|
|
159
|
-
if (options.watch) {
|
|
160
|
-
log.info('');
|
|
161
|
-
log.info('Watching build progress...');
|
|
162
|
-
log.dim('Press Ctrl+C to stop watching');
|
|
163
|
-
// TODO: Implement build watching (reuse from deploy.ts)
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
log.info('');
|
|
167
|
-
log.info('To watch progress:');
|
|
168
|
-
log.dim(` iec status --build ${result.data.buildId}`);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
154
|
//# sourceMappingURL=push.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,wBAAsB,eAAe,CACnC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA2Ff"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { loadLinkedService } from '../lib/config.js';
|
|
2
2
|
import { BuilderClient } from '../lib/builder.js';
|
|
3
3
|
import { log, spinner, formatTable } from '../lib/output.js';
|
|
4
|
+
import { watchBuild, WatchError } from '../lib/watch.js';
|
|
4
5
|
export async function rollbackCommand(versionIdOrSteps, options) {
|
|
5
6
|
const builder = await BuilderClient.create();
|
|
6
7
|
// Check if linked
|
|
@@ -71,7 +72,15 @@ export async function rollbackCommand(versionIdOrSteps, options) {
|
|
|
71
72
|
log.info('');
|
|
72
73
|
log.info('Watching deployment progress...');
|
|
73
74
|
log.dim('Press Ctrl+C to stop watching');
|
|
74
|
-
|
|
75
|
+
try {
|
|
76
|
+
await watchBuild(builder, result.data.buildId, { label: 'Rollback' });
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error instanceof WatchError) {
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
75
84
|
}
|
|
76
85
|
else {
|
|
77
86
|
log.info('');
|
|
@@ -120,40 +129,6 @@ async function findVersionBySteps(builder, serviceId, environment, steps) {
|
|
|
120
129
|
}
|
|
121
130
|
return deployedVersions[steps] || null;
|
|
122
131
|
}
|
|
123
|
-
async function watchBuild(builder, buildId) {
|
|
124
|
-
const terminalStates = ['completed', 'failed', 'cancelled'];
|
|
125
|
-
let lastStatus = '';
|
|
126
|
-
while (true) {
|
|
127
|
-
const result = await builder.getBuild(buildId);
|
|
128
|
-
if (!result.success || !result.data) {
|
|
129
|
-
log.error('Failed to get build status');
|
|
130
|
-
process.exit(1);
|
|
131
|
-
}
|
|
132
|
-
const build = result.data;
|
|
133
|
-
if (build.status !== lastStatus) {
|
|
134
|
-
lastStatus = build.status;
|
|
135
|
-
log.info(`[${build.status.toUpperCase()}] ${build.status}`);
|
|
136
|
-
}
|
|
137
|
-
if (terminalStates.includes(build.status)) {
|
|
138
|
-
log.info('');
|
|
139
|
-
if (build.status === 'completed') {
|
|
140
|
-
log.success('Rollback completed successfully!');
|
|
141
|
-
}
|
|
142
|
-
else if (build.status === 'cancelled') {
|
|
143
|
-
log.warning('Rollback was cancelled');
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
log.error('Rollback failed');
|
|
147
|
-
if (build.error) {
|
|
148
|
-
log.dim(` Error: ${build.error}`);
|
|
149
|
-
}
|
|
150
|
-
process.exit(1);
|
|
151
|
-
}
|
|
152
|
-
break;
|
|
153
|
-
}
|
|
154
|
-
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
132
|
function formatTime(isoString) {
|
|
158
133
|
const date = new Date(isoString);
|
|
159
134
|
const now = new Date();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sample.d.ts","sourceRoot":"","sources":["../../src/commands/sample.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sample.d.ts","sourceRoot":"","sources":["../../src/commands/sample.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AA+LD,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAsEf"}
|
package/dist/commands/sample.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import { createInterface } from 'node:readline';
|
|
3
|
-
import {
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import { log, spinner } from '../lib/output.js';
|
|
4
5
|
import { scaffold, printFileTree, directoryExists } from '../lib/scaffold.js';
|
|
6
|
+
import { ForgejoClient, FORGEJO_ORG } from '../lib/forgejo.js';
|
|
7
|
+
import { BuilderClient } from '../lib/builder.js';
|
|
5
8
|
const TEMPLATE_DESCRIPTIONS = {
|
|
6
9
|
api: 'Express API with TypeScript, health endpoint, and example CRUD routes',
|
|
7
10
|
nextjs: 'Next.js 14+ app with App Router, standalone output, and API routes',
|
|
11
|
+
'nextjs-oauth': 'Next.js 14+ app with Bio-id OAuth2 authentication pre-configured',
|
|
8
12
|
crosspod: 'Two-service demo showing pod-to-pod communication with service auth',
|
|
9
13
|
worker: 'Background job processor using BullMQ and Redis',
|
|
10
14
|
};
|
|
@@ -21,26 +25,49 @@ function promptForInput(question) {
|
|
|
21
25
|
});
|
|
22
26
|
}
|
|
23
27
|
function determineTemplate(options) {
|
|
24
|
-
if (options.api)
|
|
28
|
+
if (options.api) {
|
|
29
|
+
if (options.withOauth) {
|
|
30
|
+
log.error('--with-oauth is only supported with --nextjs');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
25
33
|
return 'api';
|
|
34
|
+
}
|
|
26
35
|
if (options.nextjs)
|
|
27
|
-
return 'nextjs';
|
|
28
|
-
if (options.crosspod)
|
|
36
|
+
return options.withOauth ? 'nextjs-oauth' : 'nextjs';
|
|
37
|
+
if (options.crosspod) {
|
|
38
|
+
if (options.withOauth) {
|
|
39
|
+
log.error('--with-oauth is only supported with --nextjs');
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
29
42
|
return 'crosspod';
|
|
30
|
-
|
|
43
|
+
}
|
|
44
|
+
if (options.worker) {
|
|
45
|
+
if (options.withOauth) {
|
|
46
|
+
log.error('--with-oauth is only supported with --nextjs');
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
31
49
|
return 'worker';
|
|
50
|
+
}
|
|
32
51
|
return null;
|
|
33
52
|
}
|
|
34
53
|
function printTemplateHelp() {
|
|
35
54
|
log.info('Available templates:');
|
|
36
55
|
log.info('');
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
56
|
+
log.info(` --${'api'.padEnd(10)} ${TEMPLATE_DESCRIPTIONS.api}`);
|
|
57
|
+
log.info(` --${'nextjs'.padEnd(10)} ${TEMPLATE_DESCRIPTIONS.nextjs}`);
|
|
58
|
+
log.info(` --${'crosspod'.padEnd(10)} ${TEMPLATE_DESCRIPTIONS.crosspod}`);
|
|
59
|
+
log.info(` --${'worker'.padEnd(10)} ${TEMPLATE_DESCRIPTIONS.worker}`);
|
|
60
|
+
log.info('');
|
|
61
|
+
log.info('Options:');
|
|
62
|
+
log.info(' --with-oauth Add Bio-id OAuth2 authentication (--nextjs only)');
|
|
63
|
+
log.info(' --git Create git.insureco.io repo with auto-deploy webhook');
|
|
40
64
|
log.info('');
|
|
41
|
-
log.info('
|
|
65
|
+
log.info('Examples:');
|
|
66
|
+
log.info(' iec sample my-service --api');
|
|
67
|
+
log.info(' iec sample my-app --nextjs --with-oauth');
|
|
68
|
+
log.info(' iec sample my-api --api --git');
|
|
42
69
|
}
|
|
43
|
-
function printNextSteps(projectName, template) {
|
|
70
|
+
function printNextSteps(projectName, template, gitCreated) {
|
|
44
71
|
log.info('');
|
|
45
72
|
log.info('Next steps:');
|
|
46
73
|
log.dim(` cd ${projectName}`);
|
|
@@ -50,15 +77,106 @@ function printNextSteps(projectName, template) {
|
|
|
50
77
|
log.dim(' # Then deploy service-b');
|
|
51
78
|
log.dim(' cd ../service-b && iec link && iec deploy');
|
|
52
79
|
}
|
|
80
|
+
else if (template === 'nextjs-oauth') {
|
|
81
|
+
log.dim(` iec oauth create "${projectName}" "http://localhost:3000/api/auth/callback"`);
|
|
82
|
+
log.dim(' cp .env.example .env');
|
|
83
|
+
log.dim(' # Paste CLIENT_ID, CLIENT_SECRET into .env and generate a JWT_SECRET');
|
|
84
|
+
log.dim(' npm run dev # Start development server');
|
|
85
|
+
if (!gitCreated) {
|
|
86
|
+
log.dim(' iec register # Register service in Koko');
|
|
87
|
+
}
|
|
88
|
+
log.dim(' iec deploy # Deploy to sandbox');
|
|
89
|
+
}
|
|
53
90
|
else {
|
|
54
91
|
log.dim(' npm run dev # Start development server');
|
|
55
|
-
|
|
92
|
+
if (!gitCreated) {
|
|
93
|
+
log.dim(' iec link # Link for auto-deploy');
|
|
94
|
+
}
|
|
56
95
|
log.dim(' iec deploy # Deploy to sandbox');
|
|
57
96
|
}
|
|
58
97
|
log.info('');
|
|
59
98
|
log.info('Documentation:');
|
|
60
99
|
log.dim(' https://docs.tawa.insureco.io/guides/getting-started');
|
|
61
100
|
}
|
|
101
|
+
async function getWebhookUrl() {
|
|
102
|
+
const { loadConfig } = await import('../lib/config.js');
|
|
103
|
+
const config = await loadConfig();
|
|
104
|
+
return `${config.builder_url}/webhooks/forgejo`;
|
|
105
|
+
}
|
|
106
|
+
async function getWebhookSecret(serviceName) {
|
|
107
|
+
try {
|
|
108
|
+
const builderClient = await BuilderClient.create();
|
|
109
|
+
const result = await builderClient.getService(serviceName);
|
|
110
|
+
if (result.success && result.data) {
|
|
111
|
+
return result.data.webhookSecret;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Service may not be registered yet
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
async function createGitRepo(name, description, targetDir) {
|
|
120
|
+
const sp = spinner('Creating git.insureco.io/' + FORGEJO_ORG + '/' + name);
|
|
121
|
+
try {
|
|
122
|
+
const client = await ForgejoClient.create();
|
|
123
|
+
const repoResult = await client.createRepo({
|
|
124
|
+
name,
|
|
125
|
+
description,
|
|
126
|
+
private: true,
|
|
127
|
+
auto_init: false,
|
|
128
|
+
default_branch: 'main',
|
|
129
|
+
});
|
|
130
|
+
if (!repoResult.success) {
|
|
131
|
+
sp.stop(false);
|
|
132
|
+
log.warning('Failed to create repository: ' + (repoResult.error?.message || 'Unknown error'));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const repo = repoResult.data;
|
|
136
|
+
sp.stop(true);
|
|
137
|
+
// Add webhook
|
|
138
|
+
try {
|
|
139
|
+
const webhookUrl = await getWebhookUrl();
|
|
140
|
+
const webhookSecret = await getWebhookSecret(name);
|
|
141
|
+
const webhookResult = await client.createWebhook(name, {
|
|
142
|
+
type: 'forgejo',
|
|
143
|
+
config: {
|
|
144
|
+
url: webhookUrl,
|
|
145
|
+
content_type: 'json',
|
|
146
|
+
secret: webhookSecret || undefined,
|
|
147
|
+
},
|
|
148
|
+
events: ['push'],
|
|
149
|
+
active: true,
|
|
150
|
+
});
|
|
151
|
+
if (webhookResult.success) {
|
|
152
|
+
log.success('Auto-deploy webhook configured');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
log.warning('Failed to configure webhook (builder may not be available)');
|
|
157
|
+
}
|
|
158
|
+
// Add remote and push
|
|
159
|
+
try {
|
|
160
|
+
execSync(`git remote add origin ${repo.ssh_url}`, { cwd: targetDir, stdio: 'pipe' });
|
|
161
|
+
execSync('git push -u origin main', { cwd: targetDir, stdio: 'pipe' });
|
|
162
|
+
log.success('Pushed to ' + repo.ssh_url);
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
log.warning('Failed to push (check SSH key: iec git ssh-key)');
|
|
166
|
+
log.dim(' Remote added: ' + repo.ssh_url);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
sp.stop(false);
|
|
171
|
+
if (error instanceof Error && error.message.includes('Not authenticated')) {
|
|
172
|
+
log.warning('Not authenticated with git.insureco.io — skipping repo creation');
|
|
173
|
+
log.dim(' Run "iec login" first, then "iec git create ' + name + '"');
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
log.warning('Failed to create repository');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
62
180
|
export async function sampleCommand(projectName, options) {
|
|
63
181
|
try {
|
|
64
182
|
// Determine template type
|
|
@@ -69,6 +187,11 @@ export async function sampleCommand(projectName, options) {
|
|
|
69
187
|
printTemplateHelp();
|
|
70
188
|
process.exit(1);
|
|
71
189
|
}
|
|
190
|
+
// --git requires git init (can't skip)
|
|
191
|
+
if (options.git && options.skipGit) {
|
|
192
|
+
log.error('--git and --skip-git cannot be used together');
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
72
195
|
// Get project name if not provided
|
|
73
196
|
let name = projectName;
|
|
74
197
|
if (!name) {
|
|
@@ -100,9 +223,14 @@ export async function sampleCommand(projectName, options) {
|
|
|
100
223
|
skipGit: options.skipGit,
|
|
101
224
|
});
|
|
102
225
|
if (result.success) {
|
|
226
|
+
// Create Forgejo repo + webhook + push if --git
|
|
227
|
+
if (options.git) {
|
|
228
|
+
log.info('');
|
|
229
|
+
await createGitRepo(name, TEMPLATE_DESCRIPTIONS[template], targetDir);
|
|
230
|
+
}
|
|
103
231
|
log.info('');
|
|
104
232
|
printFileTree(result.files, name);
|
|
105
|
-
printNextSteps(name, template);
|
|
233
|
+
printNextSteps(name, template, options.git);
|
|
106
234
|
}
|
|
107
235
|
}
|
|
108
236
|
catch (error) {
|