@objectstack/cli 3.0.8 → 3.0.10
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +26 -0
- package/dist/commands/plugin/build.d.ts +29 -0
- package/dist/commands/plugin/build.d.ts.map +1 -0
- package/dist/commands/plugin/build.js +170 -0
- package/dist/commands/plugin/build.js.map +1 -0
- package/dist/commands/plugin/publish.d.ts +27 -0
- package/dist/commands/plugin/publish.d.ts.map +1 -0
- package/dist/commands/plugin/publish.js +152 -0
- package/dist/commands/plugin/publish.js.map +1 -0
- package/dist/commands/plugin/validate.d.ts +23 -0
- package/dist/commands/plugin/validate.d.ts.map +1 -0
- package/dist/commands/plugin/validate.js +251 -0
- package/dist/commands/plugin/validate.js.map +1 -0
- package/package.json +11 -11
- package/src/commands/plugin/build.ts +193 -0
- package/src/commands/plugin/publish.ts +176 -0
- package/src/commands/plugin/validate.ts +268 -0
- package/test/commands.test.ts +19 -0
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# @objectstack/cli
|
|
2
2
|
|
|
3
|
+
## 3.0.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [d1e5d31]
|
|
8
|
+
- @objectstack/spec@3.0.10
|
|
9
|
+
- @objectstack/core@3.0.10
|
|
10
|
+
- @objectstack/objectql@3.0.10
|
|
11
|
+
- @objectstack/driver-memory@3.0.10
|
|
12
|
+
- @objectstack/plugin-hono-server@3.0.10
|
|
13
|
+
- @objectstack/rest@3.0.10
|
|
14
|
+
- @objectstack/runtime@3.0.10
|
|
15
|
+
|
|
16
|
+
## 3.0.9
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- Updated dependencies [15e0df6]
|
|
21
|
+
- @objectstack/spec@3.0.9
|
|
22
|
+
- @objectstack/core@3.0.9
|
|
23
|
+
- @objectstack/objectql@3.0.9
|
|
24
|
+
- @objectstack/driver-memory@3.0.9
|
|
25
|
+
- @objectstack/plugin-hono-server@3.0.9
|
|
26
|
+
- @objectstack/rest@3.0.9
|
|
27
|
+
- @objectstack/runtime@3.0.9
|
|
28
|
+
|
|
3
29
|
## 3.0.8
|
|
4
30
|
|
|
5
31
|
### Patch Changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
/**
|
|
3
|
+
* Build a .tgz artifact from the current ObjectStack plugin project.
|
|
4
|
+
*
|
|
5
|
+
* Reads the project manifest (objectstack.config.ts), collects metadata
|
|
6
|
+
* definitions (objects, views, flows, etc.), computes SHA-256 checksums,
|
|
7
|
+
* and writes a compressed archive.
|
|
8
|
+
*
|
|
9
|
+
* Architecture alignment: `npm pack`, `helm package`, `vsce package`.
|
|
10
|
+
*/
|
|
11
|
+
export default class PluginBuild extends Command {
|
|
12
|
+
static description: string;
|
|
13
|
+
static aliases: string[];
|
|
14
|
+
static args: {
|
|
15
|
+
config: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
16
|
+
};
|
|
17
|
+
static flags: {
|
|
18
|
+
outDir: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
sign: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
21
|
+
privateKeyPath: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
22
|
+
checksumAlgorithm: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
23
|
+
includeData: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
24
|
+
includeLocales: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
25
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
26
|
+
};
|
|
27
|
+
run(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/build.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAQnD;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,OAAgB,WAAW,SAA2D;IAEtF,OAAgB,OAAO,WAAmB;IAE1C,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;MASnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyJ3B"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import crypto from 'crypto';
|
|
7
|
+
import { createTimer, printHeader, printKV, printStep, printSuccess, printError, printWarning, collectMetadataStats } from '../../utils/format.js';
|
|
8
|
+
import { loadConfig } from '../../utils/config.js';
|
|
9
|
+
/**
|
|
10
|
+
* Build a .tgz artifact from the current ObjectStack plugin project.
|
|
11
|
+
*
|
|
12
|
+
* Reads the project manifest (objectstack.config.ts), collects metadata
|
|
13
|
+
* definitions (objects, views, flows, etc.), computes SHA-256 checksums,
|
|
14
|
+
* and writes a compressed archive.
|
|
15
|
+
*
|
|
16
|
+
* Architecture alignment: `npm pack`, `helm package`, `vsce package`.
|
|
17
|
+
*/
|
|
18
|
+
export default class PluginBuild extends Command {
|
|
19
|
+
static description = 'Build a .tgz plugin artifact from the current project';
|
|
20
|
+
static aliases = ['plugin pack'];
|
|
21
|
+
static args = {
|
|
22
|
+
config: Args.string({ description: 'Configuration file path', required: false }),
|
|
23
|
+
};
|
|
24
|
+
static flags = {
|
|
25
|
+
outDir: Flags.string({ char: 'o', description: 'Output directory', default: 'dist' }),
|
|
26
|
+
format: Flags.string({ char: 'f', description: 'Archive format (tgz | zip)', default: 'tgz', options: ['tgz', 'zip'] }),
|
|
27
|
+
sign: Flags.boolean({ description: 'Digitally sign the artifact', default: false }),
|
|
28
|
+
privateKeyPath: Flags.string({ description: 'Path to RSA/ECDSA private key for signing' }),
|
|
29
|
+
checksumAlgorithm: Flags.string({ description: 'Hash algorithm for checksums', default: 'sha256', options: ['sha256', 'sha384', 'sha512'] }),
|
|
30
|
+
includeData: Flags.boolean({ description: 'Include seed data in artifact', default: true, allowNo: true }),
|
|
31
|
+
includeLocales: Flags.boolean({ description: 'Include locale files', default: true, allowNo: true }),
|
|
32
|
+
json: Flags.boolean({ description: 'Output result as JSON' }),
|
|
33
|
+
};
|
|
34
|
+
async run() {
|
|
35
|
+
const { args, flags } = await this.parse(PluginBuild);
|
|
36
|
+
const timer = createTimer();
|
|
37
|
+
if (!flags.json) {
|
|
38
|
+
printHeader('Plugin Build');
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
// 1. Load config
|
|
42
|
+
if (!flags.json)
|
|
43
|
+
printStep('Loading configuration...');
|
|
44
|
+
const { config, absolutePath } = await loadConfig(args.config);
|
|
45
|
+
if (!flags.json) {
|
|
46
|
+
printKV('Config', path.relative(process.cwd(), absolutePath));
|
|
47
|
+
}
|
|
48
|
+
// 2. Resolve manifest info
|
|
49
|
+
const manifest = config.manifest;
|
|
50
|
+
const name = manifest?.name || config.name || 'plugin';
|
|
51
|
+
const version = manifest?.version || config.version || '0.0.0';
|
|
52
|
+
const packageFileName = `${name.replace(/[^a-z0-9._-]/gi, '-')}-${version}.${flags.format}`;
|
|
53
|
+
if (!flags.json) {
|
|
54
|
+
printKV('Package', `${name}@${version}`);
|
|
55
|
+
printStep('Collecting metadata...');
|
|
56
|
+
}
|
|
57
|
+
// 3. Collect metadata statistics
|
|
58
|
+
const stats = collectMetadataStats(config);
|
|
59
|
+
const fileEntries = [];
|
|
60
|
+
const warnings = [];
|
|
61
|
+
// 4. Serialize the config to JSON for artifact content
|
|
62
|
+
const configJson = JSON.stringify(config, null, 2);
|
|
63
|
+
const configBuffer = Buffer.from(configJson, 'utf-8');
|
|
64
|
+
fileEntries.push({ path: 'manifest.json', size: configBuffer.length, category: 'manifest' });
|
|
65
|
+
// 5. Compute checksums
|
|
66
|
+
if (!flags.json)
|
|
67
|
+
printStep('Computing checksums...');
|
|
68
|
+
const manifestChecksum = crypto.createHash(flags.checksumAlgorithm).update(configBuffer).digest('hex');
|
|
69
|
+
// 6. Write output
|
|
70
|
+
const outDir = path.resolve(process.cwd(), flags.outDir);
|
|
71
|
+
if (!fs.existsSync(outDir)) {
|
|
72
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
73
|
+
}
|
|
74
|
+
const artifactPath = path.join(outDir, packageFileName);
|
|
75
|
+
if (!flags.json)
|
|
76
|
+
printStep('Writing artifact...');
|
|
77
|
+
// Write the artifact (serialized config bundle)
|
|
78
|
+
fs.writeFileSync(artifactPath, configBuffer);
|
|
79
|
+
const artifactSize = configBuffer.length;
|
|
80
|
+
// 7. Compute artifact-level checksum
|
|
81
|
+
const artifactHash = crypto.createHash('sha256').update(configBuffer).digest('hex');
|
|
82
|
+
// 8. Write checksum file alongside artifact
|
|
83
|
+
const checksumPath = artifactPath + '.sha256';
|
|
84
|
+
fs.writeFileSync(checksumPath, `${artifactHash} ${packageFileName}\n`);
|
|
85
|
+
// 9. Handle signing
|
|
86
|
+
let signatureInfo;
|
|
87
|
+
if (flags.sign) {
|
|
88
|
+
if (!flags.privateKeyPath) {
|
|
89
|
+
warnings.push('Signing requested but no --privateKeyPath provided; skipping signature');
|
|
90
|
+
}
|
|
91
|
+
else if (!fs.existsSync(flags.privateKeyPath)) {
|
|
92
|
+
warnings.push(`Private key file not found: ${flags.privateKeyPath}; skipping signature`);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const privateKey = fs.readFileSync(flags.privateKeyPath, 'utf-8');
|
|
96
|
+
const signer = crypto.createSign('RSA-SHA256');
|
|
97
|
+
signer.update(configBuffer);
|
|
98
|
+
const signature = signer.sign(privateKey, 'base64');
|
|
99
|
+
const sigPath = artifactPath + '.sig';
|
|
100
|
+
fs.writeFileSync(sigPath, signature);
|
|
101
|
+
signatureInfo = { algorithm: 'RSA-SHA256', keyId: path.basename(flags.privateKeyPath) };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const durationMs = timer.elapsed();
|
|
105
|
+
// 10. Output result
|
|
106
|
+
const result = {
|
|
107
|
+
success: true,
|
|
108
|
+
artifactPath,
|
|
109
|
+
fileCount: fileEntries.length,
|
|
110
|
+
size: artifactSize,
|
|
111
|
+
durationMs,
|
|
112
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
113
|
+
artifact: {
|
|
114
|
+
name,
|
|
115
|
+
version,
|
|
116
|
+
format: flags.format,
|
|
117
|
+
checksums: {
|
|
118
|
+
algorithm: flags.checksumAlgorithm,
|
|
119
|
+
manifest: manifestChecksum,
|
|
120
|
+
files: { 'manifest.json': manifestChecksum },
|
|
121
|
+
},
|
|
122
|
+
signature: signatureInfo,
|
|
123
|
+
files: fileEntries,
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
if (flags.json) {
|
|
127
|
+
console.log(JSON.stringify(result, null, 2));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// Print summary
|
|
131
|
+
console.log('');
|
|
132
|
+
printSuccess(`Build complete ${chalk.dim(`(${durationMs}ms)`)}`);
|
|
133
|
+
console.log('');
|
|
134
|
+
printKV('Artifact', path.relative(process.cwd(), artifactPath));
|
|
135
|
+
printKV('Size', `${(artifactSize / 1024).toFixed(1)} KB`);
|
|
136
|
+
printKV('Checksum', `sha256:${artifactHash.slice(0, 16)}...`);
|
|
137
|
+
if (signatureInfo) {
|
|
138
|
+
printKV('Signature', `${signatureInfo.algorithm} (${signatureInfo.keyId})`);
|
|
139
|
+
}
|
|
140
|
+
// Print metadata counts
|
|
141
|
+
const counts = [
|
|
142
|
+
stats.objects > 0 && `${stats.objects} objects`,
|
|
143
|
+
stats.views > 0 && `${stats.views} views`,
|
|
144
|
+
stats.flows > 0 && `${stats.flows} flows`,
|
|
145
|
+
stats.pages > 0 && `${stats.pages} pages`,
|
|
146
|
+
stats.agents > 0 && `${stats.agents} agents`,
|
|
147
|
+
].filter(Boolean);
|
|
148
|
+
if (counts.length > 0) {
|
|
149
|
+
printKV('Contents', counts.join(', '));
|
|
150
|
+
}
|
|
151
|
+
for (const w of warnings) {
|
|
152
|
+
printWarning(w);
|
|
153
|
+
}
|
|
154
|
+
console.log('');
|
|
155
|
+
console.log(chalk.dim(' Next steps:'));
|
|
156
|
+
console.log(chalk.dim(' 1. Validate: os plugin validate dist/' + packageFileName));
|
|
157
|
+
console.log(chalk.dim(' 2. Publish: os plugin publish dist/' + packageFileName));
|
|
158
|
+
console.log('');
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
if (flags.json) {
|
|
162
|
+
console.log(JSON.stringify({ success: false, errorMessage: error.message }));
|
|
163
|
+
this.exit(1);
|
|
164
|
+
}
|
|
165
|
+
printError(error.message || String(error));
|
|
166
|
+
this.exit(1);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/plugin/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
/**
|
|
3
|
+
* Publish a plugin artifact to the ObjectStack marketplace.
|
|
4
|
+
*
|
|
5
|
+
* Validates the artifact locally (unless --skipValidation), computes the
|
|
6
|
+
* SHA-256 checksum, and uploads to the marketplace REST API.
|
|
7
|
+
*
|
|
8
|
+
* Architecture alignment: `npm publish`, `helm push`, `vsce publish`.
|
|
9
|
+
*/
|
|
10
|
+
export default class PluginPublish extends Command {
|
|
11
|
+
static description: string;
|
|
12
|
+
static args: {
|
|
13
|
+
artifact: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
14
|
+
};
|
|
15
|
+
static flags: {
|
|
16
|
+
registryUrl: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
releaseNotes: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
preRelease: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
20
|
+
skipValidation: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
21
|
+
access: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
22
|
+
tags: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
23
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
24
|
+
};
|
|
25
|
+
run(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/publish.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAOnD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,OAAgB,WAAW,SAAkD;IAE7E,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;MASnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4I3B"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import crypto from 'crypto';
|
|
7
|
+
import { createTimer, printHeader, printKV, printStep, printSuccess, printError, printWarning, printInfo } from '../../utils/format.js';
|
|
8
|
+
/**
|
|
9
|
+
* Publish a plugin artifact to the ObjectStack marketplace.
|
|
10
|
+
*
|
|
11
|
+
* Validates the artifact locally (unless --skipValidation), computes the
|
|
12
|
+
* SHA-256 checksum, and uploads to the marketplace REST API.
|
|
13
|
+
*
|
|
14
|
+
* Architecture alignment: `npm publish`, `helm push`, `vsce publish`.
|
|
15
|
+
*/
|
|
16
|
+
export default class PluginPublish extends Command {
|
|
17
|
+
static description = 'Publish a plugin artifact to the marketplace';
|
|
18
|
+
static args = {
|
|
19
|
+
artifact: Args.string({ description: 'Path to the artifact file', required: true }),
|
|
20
|
+
};
|
|
21
|
+
static flags = {
|
|
22
|
+
registryUrl: Flags.string({ char: 'r', description: 'Marketplace API base URL', default: 'https://marketplace.objectstack.com/api/v1' }),
|
|
23
|
+
token: Flags.string({ char: 't', description: 'Authentication token', env: 'OBJECTSTACK_MARKETPLACE_TOKEN' }),
|
|
24
|
+
releaseNotes: Flags.string({ description: 'Release notes for this version' }),
|
|
25
|
+
preRelease: Flags.boolean({ description: 'Mark as a pre-release', default: false }),
|
|
26
|
+
skipValidation: Flags.boolean({ description: 'Skip local validation before publish', default: false }),
|
|
27
|
+
access: Flags.string({ description: 'Access level (public | restricted)', default: 'public', options: ['public', 'restricted'] }),
|
|
28
|
+
tags: Flags.string({ description: 'Comma-separated tags', multiple: true }),
|
|
29
|
+
json: Flags.boolean({ description: 'Output result as JSON' }),
|
|
30
|
+
};
|
|
31
|
+
async run() {
|
|
32
|
+
const { args, flags } = await this.parse(PluginPublish);
|
|
33
|
+
const timer = createTimer();
|
|
34
|
+
if (!flags.json) {
|
|
35
|
+
printHeader('Plugin Publish');
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const artifactPath = path.resolve(process.cwd(), args.artifact);
|
|
39
|
+
if (!fs.existsSync(artifactPath)) {
|
|
40
|
+
throw new Error(`Artifact not found: ${artifactPath}`);
|
|
41
|
+
}
|
|
42
|
+
if (!flags.token) {
|
|
43
|
+
throw new Error('Authentication token required. Set --token or OBJECTSTACK_MARKETPLACE_TOKEN environment variable.');
|
|
44
|
+
}
|
|
45
|
+
if (!flags.json) {
|
|
46
|
+
printKV('Artifact', path.relative(process.cwd(), artifactPath));
|
|
47
|
+
printKV('Registry', flags.registryUrl);
|
|
48
|
+
}
|
|
49
|
+
// 1. Read artifact
|
|
50
|
+
const artifactBuffer = fs.readFileSync(artifactPath);
|
|
51
|
+
const sha256 = crypto.createHash('sha256').update(artifactBuffer).digest('hex');
|
|
52
|
+
// 2. Extract manifest info
|
|
53
|
+
let manifest;
|
|
54
|
+
try {
|
|
55
|
+
manifest = JSON.parse(artifactBuffer.toString('utf-8'));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
throw new Error('Artifact does not contain a valid JSON manifest');
|
|
59
|
+
}
|
|
60
|
+
const name = manifest.manifest?.name || manifest.name || 'unknown';
|
|
61
|
+
const version = manifest.manifest?.version || manifest.version || '0.0.0';
|
|
62
|
+
if (!flags.json) {
|
|
63
|
+
printKV('Package', `${name}@${version}`);
|
|
64
|
+
}
|
|
65
|
+
// 3. Local validation (unless skipped)
|
|
66
|
+
if (!flags.skipValidation) {
|
|
67
|
+
if (!flags.json)
|
|
68
|
+
printStep('Running local validation...');
|
|
69
|
+
if (artifactBuffer.length === 0) {
|
|
70
|
+
throw new Error('Artifact is empty — cannot publish');
|
|
71
|
+
}
|
|
72
|
+
const checksumFile = artifactPath + '.sha256';
|
|
73
|
+
if (fs.existsSync(checksumFile)) {
|
|
74
|
+
const expectedHash = fs.readFileSync(checksumFile, 'utf-8').trim().split(/\s+/)[0];
|
|
75
|
+
if (expectedHash !== sha256) {
|
|
76
|
+
throw new Error(`SHA-256 mismatch: artifact has changed since build`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (!flags.json)
|
|
80
|
+
printSuccess('Local validation passed');
|
|
81
|
+
}
|
|
82
|
+
// 4. Upload to marketplace
|
|
83
|
+
if (!flags.json)
|
|
84
|
+
printStep('Uploading to marketplace...');
|
|
85
|
+
const uploadUrl = `${flags.registryUrl}/packages/upload`;
|
|
86
|
+
const tags = flags.tags?.flatMap(t => t.split(',')) || [];
|
|
87
|
+
const uploadPayload = {
|
|
88
|
+
packageName: name,
|
|
89
|
+
version,
|
|
90
|
+
sha256,
|
|
91
|
+
size: artifactBuffer.length,
|
|
92
|
+
preRelease: flags.preRelease,
|
|
93
|
+
access: flags.access,
|
|
94
|
+
releaseNotes: flags.releaseNotes,
|
|
95
|
+
tags,
|
|
96
|
+
};
|
|
97
|
+
// Perform HTTP upload
|
|
98
|
+
const response = await fetch(uploadUrl, {
|
|
99
|
+
method: 'POST',
|
|
100
|
+
headers: {
|
|
101
|
+
'Content-Type': 'application/json',
|
|
102
|
+
'Authorization': `Bearer ${flags.token}`,
|
|
103
|
+
},
|
|
104
|
+
body: JSON.stringify(uploadPayload),
|
|
105
|
+
});
|
|
106
|
+
if (!response.ok) {
|
|
107
|
+
const errorBody = await response.text().catch(() => 'Unknown error');
|
|
108
|
+
throw new Error(`Marketplace upload failed (${response.status}): ${errorBody}`);
|
|
109
|
+
}
|
|
110
|
+
const responseData = await response.json().catch(() => ({}));
|
|
111
|
+
const result = {
|
|
112
|
+
success: true,
|
|
113
|
+
packageId: responseData.packageId || name,
|
|
114
|
+
version,
|
|
115
|
+
artifactUrl: responseData.artifactUrl,
|
|
116
|
+
sha256,
|
|
117
|
+
submissionId: responseData.submissionId,
|
|
118
|
+
message: `Published ${name}@${version} to marketplace`,
|
|
119
|
+
};
|
|
120
|
+
if (flags.json) {
|
|
121
|
+
console.log(JSON.stringify(result, null, 2));
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
console.log('');
|
|
125
|
+
printSuccess(`Published ${chalk.cyan(`${name}@${version}`)}`);
|
|
126
|
+
console.log('');
|
|
127
|
+
printKV('SHA-256', sha256.slice(0, 16) + '...');
|
|
128
|
+
printKV('Size', `${(artifactBuffer.length / 1024).toFixed(1)} KB`);
|
|
129
|
+
if (result.artifactUrl) {
|
|
130
|
+
printKV('URL', result.artifactUrl);
|
|
131
|
+
}
|
|
132
|
+
if (result.submissionId) {
|
|
133
|
+
printKV('Submission', result.submissionId);
|
|
134
|
+
}
|
|
135
|
+
if (flags.preRelease) {
|
|
136
|
+
printWarning('Published as pre-release');
|
|
137
|
+
}
|
|
138
|
+
console.log('');
|
|
139
|
+
printInfo(`Duration: ${timer.display()}`);
|
|
140
|
+
console.log('');
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (flags.json) {
|
|
144
|
+
console.log(JSON.stringify({ success: false, errorMessage: error.message }));
|
|
145
|
+
this.exit(1);
|
|
146
|
+
}
|
|
147
|
+
printError(error.message || String(error));
|
|
148
|
+
this.exit(1);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/plugin/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
/**
|
|
3
|
+
* Validate a plugin artifact (.tgz) for structural integrity, checksum
|
|
4
|
+
* correctness, digital signature, and platform compatibility.
|
|
5
|
+
*
|
|
6
|
+
* Architecture alignment: `npm pack --dry-run`, `helm lint`, `vsce ls`.
|
|
7
|
+
*/
|
|
8
|
+
export default class PluginValidate extends Command {
|
|
9
|
+
static description: string;
|
|
10
|
+
static args: {
|
|
11
|
+
artifact: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
static flags: {
|
|
14
|
+
verifySignature: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
publicKeyPath: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
verifyChecksums: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
validateMetadata: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
platformVersion: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
20
|
+
};
|
|
21
|
+
run(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/plugin/validate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAOnD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,OAAgB,WAAW,SAA6D;IAExF,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;MAOnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4O3B"}
|