@objectstack/cli 10.2.0 → 10.3.0

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.
@@ -1,17 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class Publish extends Command {
3
- static description: string;
4
- static args: {
5
- artifact: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
6
- };
7
- static flags: {
8
- server: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
- environment: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
- token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
- note: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
- branch: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
- };
15
- run(): Promise<void>;
16
- }
17
- //# sourceMappingURL=publish.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,OAAgB,WAAW,SAAsD;IAEjF,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;MAiCnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2F3B"}
@@ -1,135 +0,0 @@
1
- // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
- import { readFile } from 'node:fs/promises';
3
- import { resolve as resolvePath } from 'node:path';
4
- import { Args, Command, Flags } from '@oclif/core';
5
- import { printHeader, printKV, printSuccess, printError, printStep } from '../utils/format.js';
6
- export default class Publish extends Command {
7
- static description = 'Publish a compiled artifact to ObjectStack Cloud';
8
- static args = {
9
- artifact: Args.string({ description: 'Path to compiled artifact (default: dist/objectstack.json)', required: false }),
10
- };
11
- static flags = {
12
- server: Flags.string({
13
- char: 's',
14
- description: 'ObjectStack Cloud control-plane URL',
15
- env: 'OS_CLOUD_URL',
16
- default: 'http://localhost:4000',
17
- }),
18
- environment: Flags.string({
19
- char: 'e',
20
- description: 'Environment ID (required)',
21
- env: 'OS_ENVIRONMENT_ID',
22
- required: true,
23
- }),
24
- token: Flags.string({
25
- char: 't',
26
- description: 'API key for ObjectStack Cloud',
27
- env: 'OS_CLOUD_API_KEY',
28
- }),
29
- timeout: Flags.integer({
30
- description: 'Upload timeout in milliseconds (use a higher value on slow networks; 0 disables timeout)',
31
- env: 'OS_CLOUD_TIMEOUT_MS',
32
- default: 60_000,
33
- }),
34
- note: Flags.string({
35
- char: 'n',
36
- description: 'Optional human-readable note to attach to this revision',
37
- }),
38
- branch: Flags.string({
39
- char: 'b',
40
- description: 'Logical branch this publish belongs to (e.g. main, staging, feature-x). Default: main.',
41
- env: 'OS_PUBLISH_BRANCH',
42
- default: 'main',
43
- }),
44
- };
45
- async run() {
46
- const { args, flags } = await this.parse(Publish);
47
- printHeader('Publish Artifact');
48
- try {
49
- // 1. Locate the compiled artifact
50
- const artifactPath = args.artifact
51
- ? resolvePath(process.cwd(), args.artifact)
52
- : resolvePath(process.cwd(), 'dist/objectstack.json');
53
- printStep(`Loading artifact from ${artifactPath}...`);
54
- let artifactRaw;
55
- try {
56
- artifactRaw = await readFile(artifactPath, 'utf-8');
57
- }
58
- catch (err) {
59
- printError(`Cannot read artifact: ${err.message}. Run \`objectstack build\` first.`);
60
- this.exit(1);
61
- return;
62
- }
63
- const artifact = JSON.parse(artifactRaw);
64
- printSuccess(`Loaded artifact (${(artifactRaw.length / 1024).toFixed(1)} KB)`);
65
- // 2. POST to the control-plane publish endpoint
66
- const qsParams = new URLSearchParams();
67
- if (flags.note)
68
- qsParams.set('note', flags.note);
69
- if (flags.branch)
70
- qsParams.set('branch', flags.branch);
71
- const qs = qsParams.toString();
72
- const serverUrl = `${flags.server}/api/v1/cloud/environments/${flags.environment}/metadata${qs ? `?${qs}` : ''}`;
73
- printStep(`Publishing to ${serverUrl}...`);
74
- const response = await (async () => {
75
- const controller = new AbortController();
76
- const timer = flags.timeout > 0
77
- ? setTimeout(() => controller.abort(), flags.timeout)
78
- : undefined;
79
- try {
80
- return await fetch(serverUrl, {
81
- method: 'POST',
82
- headers: {
83
- 'Content-Type': 'application/json',
84
- ...(flags.token && { Authorization: `Bearer ${flags.token}` }),
85
- },
86
- body: artifactRaw,
87
- signal: controller.signal,
88
- });
89
- }
90
- catch (err) {
91
- if (err?.name === 'AbortError') {
92
- throw new Error(`Upload timed out after ${flags.timeout}ms. Use --timeout <ms> or set OS_CLOUD_TIMEOUT_MS to extend it (0 disables).`);
93
- }
94
- throw err;
95
- }
96
- finally {
97
- if (timer)
98
- clearTimeout(timer);
99
- }
100
- })();
101
- if (!response.ok) {
102
- let errMsg;
103
- try {
104
- const errBody = await response.json();
105
- errMsg = errBody?.error ?? response.statusText;
106
- }
107
- catch {
108
- errMsg = response.statusText;
109
- }
110
- printError(`Publish failed (${response.status}): ${errMsg}`);
111
- this.exit(1);
112
- return;
113
- }
114
- const result = await response.json();
115
- const data = result?.data ?? result;
116
- console.log('');
117
- printSuccess('Artifact published successfully');
118
- printKV(' Environment', flags.environment);
119
- printKV(' Branch', data?.branch ?? flags.branch);
120
- if (data?.commitId)
121
- printKV(' Commit', data.commitId);
122
- const checksumStr = typeof data?.checksum === 'string'
123
- ? data.checksum
124
- : (data?.checksum?.value ?? null);
125
- if (checksumStr)
126
- printKV(' Checksum', String(checksumStr).slice(0, 16));
127
- printKV(' Server', flags.server);
128
- }
129
- catch (error) {
130
- printError(error.message);
131
- this.exit(1);
132
- }
133
- }
134
- }
135
- //# sourceMappingURL=publish.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class Rollback extends Command {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- server: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
- environment: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
- commit: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
- token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- };
11
- run(): Promise<void>;
12
- }
13
- //# sourceMappingURL=rollback.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAG7C,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,WAAW,SAAkF;IAE7G,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;;MAuBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4C3B"}
@@ -1,77 +0,0 @@
1
- // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
- import { Command, Flags } from '@oclif/core';
3
- import { printHeader, printKV, printSuccess, printError, printStep } from '../utils/format.js';
4
- export default class Rollback extends Command {
5
- static description = 'Activate a previously published artifact revision (rollback or roll-forward)';
6
- static examples = [
7
- '<%= config.bin %> <%= command.id %> --commit 9ce1bd48dd70',
8
- 'OS_ENVIRONMENT_ID=proj_crm <%= config.bin %> <%= command.id %> --commit abcdef123456',
9
- ];
10
- static flags = {
11
- server: Flags.string({
12
- char: 's',
13
- description: 'ObjectStack Cloud control-plane URL',
14
- env: 'OS_CLOUD_URL',
15
- default: 'http://localhost:4000',
16
- }),
17
- environment: Flags.string({
18
- char: 'e',
19
- description: 'Environment ID (required)',
20
- env: 'OS_ENVIRONMENT_ID',
21
- required: true,
22
- }),
23
- commit: Flags.string({
24
- char: 'c',
25
- description: 'Commit ID (full or 12+ char prefix) of the revision to activate',
26
- required: true,
27
- }),
28
- token: Flags.string({
29
- char: 't',
30
- description: 'API key for ObjectStack Cloud',
31
- env: 'OS_CLOUD_API_KEY',
32
- }),
33
- };
34
- async run() {
35
- const { flags } = await this.parse(Rollback);
36
- printHeader('Rollback / Activate Revision');
37
- try {
38
- const url = `${flags.server}/api/v1/cloud/environments/${flags.environment}/revisions/${flags.commit}/activate`;
39
- printStep(`POST ${url}`);
40
- const response = await fetch(url, {
41
- method: 'POST',
42
- headers: {
43
- 'Content-Type': 'application/json',
44
- ...(flags.token && { Authorization: `Bearer ${flags.token}` }),
45
- },
46
- });
47
- if (!response.ok) {
48
- let errMsg;
49
- try {
50
- const errBody = await response.json();
51
- errMsg = errBody?.error ?? response.statusText;
52
- }
53
- catch {
54
- errMsg = response.statusText;
55
- }
56
- printError(`Activate failed (${response.status}): ${errMsg}`);
57
- this.exit(1);
58
- return;
59
- }
60
- const result = await response.json();
61
- const data = result?.data ?? result;
62
- console.log('');
63
- printSuccess('Revision activated');
64
- printKV(' Environment', flags.environment);
65
- if (data?.commitId)
66
- printKV(' Commit', data.commitId);
67
- if (data?.previousCommitId)
68
- printKV(' Previous', data.previousCommitId);
69
- printKV(' Server', flags.server);
70
- }
71
- catch (error) {
72
- printError(error.message);
73
- this.exit(1);
74
- }
75
- }
76
- }
77
- //# sourceMappingURL=rollback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"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"}