@camera.ui/cli 0.0.49 → 0.0.51
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/LICENSE.md +1 -1
- package/README.md +10 -1
- package/dist/commands/artifacts.d.ts +9 -0
- package/dist/commands/artifacts.js +116 -0
- package/dist/commands/artifacts.js.map +1 -0
- package/dist/commands/bundle.d.ts +34 -1
- package/dist/commands/bundle.js +402 -57
- package/dist/commands/bundle.js.map +1 -1
- package/dist/commands/create.js +140 -93
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/publish.js +95 -39
- package/dist/commands/publish.js.map +1 -1
- package/dist/index.js +13 -4
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +24 -5
- package/dist/utils/banners.d.ts +3 -1
- package/dist/utils/banners.js +15 -11
- package/dist/utils/banners.js.map +1 -1
- package/dist/utils/logger.d.ts +12 -24
- package/dist/utils/logger.js +57 -83
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/parser.d.ts +11 -4
- package/dist/utils/parser.js +27 -185
- package/dist/utils/parser.js.map +1 -1
- package/dist/utils/templates.d.ts +13 -1
- package/dist/utils/templates.js +148 -68
- package/dist/utils/templates.js.map +1 -1
- package/dist/utils/utils.js +13 -11
- package/dist/utils/utils.js.map +1 -1
- package/dist/utils/versions.js +1 -2
- package/dist/utils/versions.js.map +1 -1
- package/package.json +29 -43
- package/templates/base/README.md +2 -2
- package/templates/base/SECURITY.md +1 -1
- package/templates/base/package.json +2 -3
- package/templates/base/updates.config.js +1 -1
- package/templates/go/go.mod +5 -0
- package/templates/go/postinstall.js +85 -0
- package/templates/go/src/main.go +51 -0
- package/templates/python/requirements.txt +1 -1
- package/templates/python/ruff.toml +2 -2
- package/templates/python/src/main.py +299 -28
- package/templates/typescript/contract.ts +36 -0
- package/templates/typescript/eslint.config.js +13 -3
- package/templates/typescript/package.eslint.json +2 -2
- package/templates/typescript/package.json +4 -4
- package/templates/typescript/src/index.ts +96 -27
- package/templates/typescript/src/sensor.ts +207 -0
- package/CHANGELOG.md +0 -8
- package/CONTRIBUTING.md +0 -1
- package/scripts/chmod.js +0 -17
- package/templates/base/cameraui.config.js +0 -10
- package/templates/base/eslint.config.js +0 -64
- package/templates/base/src/index.js +0 -41
package/dist/commands/create.js
CHANGED
|
@@ -1,15 +1,47 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { SensorType } from '@camera.ui/sdk';
|
|
2
|
+
import { confirm, isCancel, multiselect, select, text } from '@clack/prompts';
|
|
2
3
|
import { existsSync } from 'node:fs';
|
|
3
4
|
import { rm, writeFile } from 'node:fs/promises';
|
|
4
5
|
import { resolve } from 'node:path';
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
6
|
+
import pc from 'picocolors';
|
|
7
|
+
import { showCancel, showIntro, showOutro } from '../utils/banners.js';
|
|
8
|
+
import * as log from '../utils/logger.js';
|
|
7
9
|
import { isQualifiedPluginIdentifier, PLUGIN_IDENTIFIER, transformDisplaName } from '../utils/pluginName.js';
|
|
8
|
-
import { createBaseFiles, createCodeQualityConfig, createMyPyConfig, createPackageJson, createPythonRequirements, createSourceFiles, createTsConfig, } from '../utils/templates.js';
|
|
10
|
+
import { createBaseFiles, createCodeQualityConfig, createContractFile, createGoFiles, createMyPyConfig, createPackageJson, createPythonRequirements, createSourceFiles, createTsConfig, } from '../utils/templates.js';
|
|
9
11
|
import { ensureDir } from '../utils/utils.js';
|
|
12
|
+
/**
|
|
13
|
+
* Sensor options for the CLI prompts.
|
|
14
|
+
*
|
|
15
|
+
* Note: This list should stay in sync with the SDK's SensorType enum.
|
|
16
|
+
* When adding new sensor types to the SDK, update this list accordingly.
|
|
17
|
+
*/
|
|
18
|
+
const SENSOR_OPTIONS = [
|
|
19
|
+
{ value: SensorType.Motion, label: 'Motion Detection' },
|
|
20
|
+
{ value: SensorType.Object, label: 'Object Detection' },
|
|
21
|
+
{ value: SensorType.Audio, label: 'Audio Detection' },
|
|
22
|
+
{ value: SensorType.Face, label: 'Face Detection' },
|
|
23
|
+
{ value: SensorType.LicensePlate, label: 'License Plate' },
|
|
24
|
+
{ value: SensorType.Contact, label: 'Contact Sensor' },
|
|
25
|
+
{ value: SensorType.Classifier, label: 'Classifier' },
|
|
26
|
+
{ value: SensorType.Light, label: 'Light Control' },
|
|
27
|
+
{ value: SensorType.Siren, label: 'Siren Control' },
|
|
28
|
+
{ value: SensorType.Switch, label: 'Switch Control' },
|
|
29
|
+
{ value: SensorType.PTZ, label: 'PTZ Control' },
|
|
30
|
+
{ value: SensorType.SecuritySystem, label: 'Security System' },
|
|
31
|
+
{ value: SensorType.Doorbell, label: 'Doorbell' },
|
|
32
|
+
{ value: SensorType.Battery, label: 'Battery' },
|
|
33
|
+
];
|
|
34
|
+
function handleCancel(value) {
|
|
35
|
+
if (isCancel(value)) {
|
|
36
|
+
showCancel('Operation cancelled');
|
|
37
|
+
process.exit(0);
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
10
41
|
export async function createProject(projectName) {
|
|
42
|
+
showIntro();
|
|
11
43
|
if (!projectName) {
|
|
12
|
-
|
|
44
|
+
log.error('Project name is required');
|
|
13
45
|
process.exit(1);
|
|
14
46
|
}
|
|
15
47
|
if (!isQualifiedPluginIdentifier(projectName)) {
|
|
@@ -19,116 +51,131 @@ export async function createProject(projectName) {
|
|
|
19
51
|
try {
|
|
20
52
|
const exists = existsSync(targetDir);
|
|
21
53
|
if (exists) {
|
|
22
|
-
const
|
|
23
|
-
type: 'select',
|
|
24
|
-
name: 'action',
|
|
54
|
+
const action = handleCancel(await select({
|
|
25
55
|
message: `Target directory "${projectName}" already exists. Pick an action:`,
|
|
26
|
-
|
|
27
|
-
{
|
|
28
|
-
{
|
|
56
|
+
options: [
|
|
57
|
+
{ value: 'overwrite', label: 'Overwrite' },
|
|
58
|
+
{ value: 'cancel', label: 'Cancel' },
|
|
29
59
|
],
|
|
30
|
-
});
|
|
31
|
-
if (action === 'cancel'
|
|
32
|
-
|
|
33
|
-
process.exit(
|
|
34
|
-
}
|
|
35
|
-
if (action === 'overwrite') {
|
|
36
|
-
logger.info(`Removing existing directory: ${projectName}`);
|
|
37
|
-
await rm(targetDir, { recursive: true, force: true });
|
|
60
|
+
}));
|
|
61
|
+
if (action === 'cancel') {
|
|
62
|
+
showCancel('Operation cancelled');
|
|
63
|
+
process.exit(0);
|
|
38
64
|
}
|
|
65
|
+
log.info(`Removing existing directory: ${projectName}`);
|
|
66
|
+
await rm(targetDir, { recursive: true, force: true });
|
|
39
67
|
}
|
|
40
68
|
}
|
|
41
69
|
catch (err) {
|
|
42
|
-
|
|
70
|
+
log.error(`Error checking directory: ${err.message}`);
|
|
43
71
|
process.exit(1);
|
|
44
72
|
}
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
type: (prev) => (prev === 'python' ? 'select' : null),
|
|
64
|
-
name: 'pythonVersion',
|
|
73
|
+
const displayName = handleCancel(await text({
|
|
74
|
+
message: 'Display name:',
|
|
75
|
+
placeholder: transformDisplaName(projectName),
|
|
76
|
+
defaultValue: transformDisplaName(projectName),
|
|
77
|
+
}));
|
|
78
|
+
const language = handleCancel(await select({
|
|
79
|
+
message: 'Select programming language:',
|
|
80
|
+
options: [
|
|
81
|
+
{ value: 'typescript', label: 'TypeScript', hint: 'recommended' },
|
|
82
|
+
{ value: 'python', label: 'Python' },
|
|
83
|
+
{ value: 'go', label: 'Go' },
|
|
84
|
+
],
|
|
85
|
+
}));
|
|
86
|
+
let pythonVersion;
|
|
87
|
+
if (language === 'python') {
|
|
88
|
+
pythonVersion = handleCancel(await select({
|
|
65
89
|
message: 'Select Python version:',
|
|
66
|
-
|
|
67
|
-
{
|
|
68
|
-
{
|
|
69
|
-
{ title: '3.12', value: '3.12' },
|
|
70
|
-
],
|
|
71
|
-
onRender(kleur) {
|
|
72
|
-
this.message = kleur.cyan('Select Python version:');
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
type: 'toggle',
|
|
77
|
-
name: 'quality',
|
|
78
|
-
message: (prev, values) => `Add ${values.language === 'python' ? 'ruff' : 'ESLint & Prettier'} for code quality?`,
|
|
79
|
-
initial: true,
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
type: 'multiselect',
|
|
83
|
-
name: 'pluginType',
|
|
84
|
-
message: 'Select plugin type(s):',
|
|
85
|
-
choices: [
|
|
86
|
-
{ title: 'Hub', value: 'hub' },
|
|
87
|
-
{ title: 'Motion Detection', value: 'motionDetection' },
|
|
88
|
-
{ title: 'Object Detection', value: 'objectDetection' },
|
|
89
|
-
{ title: 'Audio Detection', value: 'audioDetection' },
|
|
90
|
-
{ title: 'PTZ', value: 'ptz' },
|
|
90
|
+
options: [
|
|
91
|
+
{ value: '3.11', label: '3.11' },
|
|
92
|
+
{ value: '3.12', label: '3.12' },
|
|
91
93
|
],
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
const quality = language === 'go'
|
|
97
|
+
? true
|
|
98
|
+
: handleCancel(await confirm({
|
|
99
|
+
message: `Add ${language === 'python' ? 'ruff' : 'ESLint & Prettier'} for code quality?`,
|
|
100
|
+
initialValue: true,
|
|
101
|
+
}));
|
|
102
|
+
// Plugin role determines which sensor type questions to ask
|
|
103
|
+
const role = handleCancel(await select({
|
|
104
|
+
message: "What is your plugin's role?",
|
|
105
|
+
options: [
|
|
106
|
+
{ value: 'provider', label: 'Provider', hint: 'creates and controls sensors' },
|
|
107
|
+
{ value: 'consumer', label: 'Consumer/Hub', hint: 'receives sensor data from other plugins' },
|
|
108
|
+
{ value: 'both', label: 'Both', hint: 'provides sensors and consumes from others' },
|
|
109
|
+
],
|
|
110
|
+
}));
|
|
111
|
+
let provides = [];
|
|
112
|
+
let consumes = [];
|
|
113
|
+
if (role === 'provider' || role === 'both') {
|
|
114
|
+
provides = handleCancel(await multiselect({
|
|
115
|
+
message: `Which sensor types will your plugin PROVIDE? ${pc.dim('(space to select)')}`,
|
|
116
|
+
options: SENSOR_OPTIONS,
|
|
117
|
+
required: false,
|
|
118
|
+
}));
|
|
97
119
|
}
|
|
120
|
+
if (role === 'consumer' || role === 'both') {
|
|
121
|
+
consumes = handleCancel(await multiselect({
|
|
122
|
+
message: `Which sensor types will your plugin CONSUME? ${pc.dim('(space to select)')}`,
|
|
123
|
+
options: SENSOR_OPTIONS,
|
|
124
|
+
required: false,
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
const options = {
|
|
128
|
+
displayName,
|
|
129
|
+
language,
|
|
130
|
+
pythonVersion,
|
|
131
|
+
quality,
|
|
132
|
+
role,
|
|
133
|
+
provides,
|
|
134
|
+
consumes,
|
|
135
|
+
};
|
|
98
136
|
try {
|
|
99
137
|
await ensureDir(targetDir);
|
|
100
|
-
|
|
101
|
-
await createBaseFiles(targetDir, projectName,
|
|
102
|
-
|
|
103
|
-
const packageJson = await createPackageJson(projectName,
|
|
138
|
+
log.success(`Created project directory: ${projectName}`);
|
|
139
|
+
await createBaseFiles(targetDir, projectName, options);
|
|
140
|
+
log.success('Created base files');
|
|
141
|
+
const packageJson = await createPackageJson(projectName, options);
|
|
104
142
|
await writeFile(resolve(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2));
|
|
105
|
-
|
|
106
|
-
|
|
143
|
+
log.success('Created package.json');
|
|
144
|
+
// Always create tsconfig.json (needed for contract.ts compilation)
|
|
145
|
+
await createTsConfig(targetDir, options);
|
|
146
|
+
log.success('Created tsconfig.json');
|
|
147
|
+
// Always create contract.ts at root level
|
|
148
|
+
await createContractFile(targetDir, options);
|
|
149
|
+
log.success('Created contract.ts');
|
|
150
|
+
if (options.language === 'python') {
|
|
107
151
|
await createPythonRequirements(targetDir);
|
|
108
|
-
|
|
152
|
+
log.success('Created requirements.txt');
|
|
109
153
|
await createMyPyConfig(targetDir);
|
|
110
|
-
|
|
154
|
+
log.success('Created mypy configuration');
|
|
155
|
+
}
|
|
156
|
+
if (options.language === 'go') {
|
|
157
|
+
await createGoFiles(targetDir, projectName);
|
|
158
|
+
log.success('Created Go files');
|
|
111
159
|
}
|
|
112
|
-
if (
|
|
113
|
-
await
|
|
114
|
-
|
|
160
|
+
if (options.quality) {
|
|
161
|
+
await createCodeQualityConfig(targetDir, options);
|
|
162
|
+
log.success('Created code quality configuration');
|
|
115
163
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
164
|
+
await createSourceFiles(targetDir, options);
|
|
165
|
+
log.success('Created source files');
|
|
166
|
+
const nextSteps = [`${pc.bold(pc.cyan(`cd ${projectName}`))}`, `${pc.bold(pc.cyan('npm install'))}`];
|
|
167
|
+
if (options.language === 'python') {
|
|
168
|
+
nextSteps.push(`${pc.bold(pc.cyan('pip install -r requirements.txt'))}`);
|
|
169
|
+
nextSteps.push(`${pc.bold(pc.cyan('pip install -r requirements.dev.txt'))}`);
|
|
119
170
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
console.log('\nNext steps:');
|
|
123
|
-
console.log(chalk.cyan(` cd ${projectName}`));
|
|
124
|
-
console.log(chalk.cyan(' npm install'));
|
|
125
|
-
if (answers.language === 'python') {
|
|
126
|
-
console.log(chalk.cyan(' pip install -r requirements.txt'));
|
|
127
|
-
console.log(chalk.cyan(' pip install -r requirements.dev.txt'));
|
|
171
|
+
if (options.language === 'go') {
|
|
172
|
+
nextSteps.push(`${pc.bold(pc.cyan('cd src && go mod tidy'))}`);
|
|
128
173
|
}
|
|
174
|
+
nextSteps.push(`${pc.bold(pc.cyan('npm run bundle'))}`);
|
|
175
|
+
showOutro(`${pc.green('Done!')} Next steps:\n\n ${nextSteps.join('\n ')}`);
|
|
129
176
|
}
|
|
130
177
|
catch (err) {
|
|
131
|
-
|
|
178
|
+
log.buildError(err);
|
|
132
179
|
process.exit(1);
|
|
133
180
|
}
|
|
134
181
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/publish.js
CHANGED
|
@@ -1,52 +1,56 @@
|
|
|
1
|
+
import { isCancel, select, text } from '@clack/prompts';
|
|
1
2
|
import { exec, spawn } from 'node:child_process';
|
|
2
|
-
import { readFileSync } from 'node:fs';
|
|
3
|
-
import { writeFile } from 'node:fs/promises';
|
|
3
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
4
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
4
5
|
import { resolve } from 'node:path';
|
|
5
6
|
import { promisify } from 'node:util';
|
|
6
|
-
import prompts from 'prompts';
|
|
7
7
|
import semver from 'semver';
|
|
8
|
-
import {
|
|
8
|
+
import { showCancel, showIntro, showOutro } from '../utils/banners.js';
|
|
9
|
+
import * as log from '../utils/logger.js';
|
|
9
10
|
const execAsync = promisify(exec);
|
|
11
|
+
function handleCancel(value) {
|
|
12
|
+
if (isCancel(value)) {
|
|
13
|
+
showCancel('Operation cancelled');
|
|
14
|
+
process.exit(0);
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
10
18
|
function validateBundle() {
|
|
11
19
|
try {
|
|
12
20
|
const bundlePath = resolve(process.cwd(), 'bundle');
|
|
13
21
|
const packagePath = resolve(bundlePath, 'package.json');
|
|
14
22
|
const bundleZipPath = resolve(bundlePath, 'bundle.zip');
|
|
15
23
|
try {
|
|
16
|
-
|
|
17
|
-
if (!packageJson['camera.ui']?.bundled) {
|
|
18
|
-
logger.error('Bundle not found. Please run "npm run bundle" first.');
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
24
|
+
readFileSync(packagePath);
|
|
21
25
|
}
|
|
22
26
|
catch {
|
|
23
|
-
|
|
27
|
+
log.error('package.json not found in bundle. Please run "npm run bundle" first.');
|
|
24
28
|
return false;
|
|
25
29
|
}
|
|
26
30
|
try {
|
|
27
31
|
readFileSync(bundleZipPath);
|
|
28
32
|
}
|
|
29
33
|
catch {
|
|
30
|
-
|
|
34
|
+
log.error('bundle.zip not found. Please run "npm run bundle" first.');
|
|
31
35
|
return false;
|
|
32
36
|
}
|
|
33
37
|
return true;
|
|
34
38
|
}
|
|
35
39
|
catch (error) {
|
|
36
|
-
|
|
40
|
+
log.error(`Validation failed: ${error.message}`);
|
|
37
41
|
return false;
|
|
38
42
|
}
|
|
39
43
|
}
|
|
40
44
|
async function validateVersion(name, version) {
|
|
41
45
|
if (!semver.valid(version)) {
|
|
42
|
-
|
|
46
|
+
log.error('Invalid version format. Please use semver (e.g. 1.0.0)');
|
|
43
47
|
return false;
|
|
44
48
|
}
|
|
45
49
|
try {
|
|
46
50
|
const { stdout } = await execAsync(`npm view ${name} versions --json`);
|
|
47
51
|
const versions = JSON.parse(stdout);
|
|
48
52
|
if (versions.includes(version)) {
|
|
49
|
-
|
|
53
|
+
log.error(`Version ${version} already exists`);
|
|
50
54
|
return false;
|
|
51
55
|
}
|
|
52
56
|
return true;
|
|
@@ -76,8 +80,9 @@ async function spawnPromise(command, args, cwd) {
|
|
|
76
80
|
});
|
|
77
81
|
}
|
|
78
82
|
export async function publishProject(options) {
|
|
83
|
+
showIntro();
|
|
79
84
|
if (!options.alpha && !options.beta && !options.latest) {
|
|
80
|
-
|
|
85
|
+
log.error('Please specify a version to publish: --alpha, --beta, --latest');
|
|
81
86
|
process.exit(1);
|
|
82
87
|
}
|
|
83
88
|
if (!validateBundle()) {
|
|
@@ -87,40 +92,91 @@ export async function publishProject(options) {
|
|
|
87
92
|
const pJson = JSON.parse(readFileSync(pJsonPath, 'utf-8'));
|
|
88
93
|
const { name, version } = pJson;
|
|
89
94
|
const tag = options.alpha ? 'alpha' : options.beta ? 'beta' : options.latest ? 'latest' : 'latest';
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (
|
|
107
|
-
|
|
95
|
+
// Non-interactive mode (CI): publish exactly the version baked into
|
|
96
|
+
// bundle/package.json — no prompts. The version is the single source of
|
|
97
|
+
// truth (set by the release tag), so there's nothing to confirm.
|
|
98
|
+
const targetVersion = options.yes
|
|
99
|
+
? version
|
|
100
|
+
: handleCancel(await text({
|
|
101
|
+
message: 'Version:',
|
|
102
|
+
placeholder: version,
|
|
103
|
+
defaultValue: version,
|
|
104
|
+
validate: (value) => {
|
|
105
|
+
if (!semver.valid(value)) {
|
|
106
|
+
return 'Invalid version format. Please use semver (e.g. 1.0.0)';
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
},
|
|
110
|
+
}));
|
|
111
|
+
if (!semver.valid(targetVersion)) {
|
|
112
|
+
log.error(`Invalid version in bundle/package.json: ${targetVersion}`);
|
|
108
113
|
process.exit(1);
|
|
109
114
|
}
|
|
115
|
+
// Validate version doesn't already exist
|
|
116
|
+
const versionValid = await validateVersion(name, targetVersion);
|
|
117
|
+
if (!versionValid) {
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
const action = options.yes
|
|
121
|
+
? 'publish'
|
|
122
|
+
: handleCancel(await select({
|
|
123
|
+
message: `Publishing ${name}@${targetVersion} (${tag}). Pick an action:`,
|
|
124
|
+
options: [
|
|
125
|
+
{ value: 'publish', label: 'Publish' },
|
|
126
|
+
{ value: 'cancel', label: 'Cancel' },
|
|
127
|
+
],
|
|
128
|
+
}));
|
|
129
|
+
if (action === 'cancel') {
|
|
130
|
+
showCancel('Operation cancelled');
|
|
131
|
+
process.exit(0);
|
|
132
|
+
}
|
|
110
133
|
if (action === 'publish') {
|
|
111
134
|
try {
|
|
112
|
-
|
|
135
|
+
log.info('Updating package version...');
|
|
113
136
|
pJson.version = targetVersion;
|
|
137
|
+
// `--access public` is required for the first publish of a scoped
|
|
138
|
+
// package and harmless afterwards, so it's always passed. `--provenance`
|
|
139
|
+
// additionally emits an OIDC-signed provenance attestation (CI only).
|
|
140
|
+
const extraArgs = ['--access', 'public', ...(options.provenance ? ['--provenance'] : [])];
|
|
141
|
+
// Publish platform packages first
|
|
142
|
+
const platformsDir = resolve(process.cwd(), 'bundle', 'platforms');
|
|
143
|
+
if (existsSync(platformsDir)) {
|
|
144
|
+
const platformDirs = readdirSync(platformsDir, { withFileTypes: true })
|
|
145
|
+
.filter((d) => d.isDirectory())
|
|
146
|
+
.map((d) => d.name);
|
|
147
|
+
if (platformDirs.length > 0) {
|
|
148
|
+
log.info('Publishing platform packages...');
|
|
149
|
+
for (const dir of platformDirs) {
|
|
150
|
+
const platformDir = resolve(platformsDir, dir);
|
|
151
|
+
const platformPkgPath = resolve(platformDir, 'package.json');
|
|
152
|
+
const platformPkgContent = await readFile(platformPkgPath, 'utf-8');
|
|
153
|
+
const platformPkg = JSON.parse(platformPkgContent);
|
|
154
|
+
// Update version to match target version
|
|
155
|
+
platformPkg.version = targetVersion;
|
|
156
|
+
await writeFile(platformPkgPath, JSON.stringify(platformPkg, null, 2));
|
|
157
|
+
log.info(` Publishing ${platformPkg.name}@${targetVersion}...`);
|
|
158
|
+
process.env.SAFE_PUBLISH = 'true';
|
|
159
|
+
await spawnPromise('npm', ['publish', '--tag', tag, ...extraArgs], platformDir);
|
|
160
|
+
log.success(` Published ${platformPkg.name}@${targetVersion}`);
|
|
161
|
+
}
|
|
162
|
+
// Update optionalDependencies versions in main package
|
|
163
|
+
if (pJson.optionalDependencies) {
|
|
164
|
+
for (const dep of Object.keys(pJson.optionalDependencies)) {
|
|
165
|
+
pJson.optionalDependencies[dep] = targetVersion;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
114
170
|
await writeFile(pJsonPath, JSON.stringify(pJson, null, 2));
|
|
115
|
-
|
|
171
|
+
log.info('Publishing to npm...');
|
|
116
172
|
process.env.SAFE_PUBLISH = 'true';
|
|
117
|
-
const args = ['publish', '--tag', tag];
|
|
173
|
+
const args = ['publish', '--tag', tag, ...extraArgs];
|
|
118
174
|
await spawnPromise('npm', args, resolve(process.cwd(), 'bundle'));
|
|
119
|
-
|
|
175
|
+
showOutro(`Successfully published ${name}@${targetVersion}`);
|
|
120
176
|
}
|
|
121
177
|
catch (error) {
|
|
122
|
-
|
|
123
|
-
|
|
178
|
+
log.error('Failed to publish package');
|
|
179
|
+
log.error(error.message);
|
|
124
180
|
process.exit(1);
|
|
125
181
|
}
|
|
126
182
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from 'commander';
|
|
3
|
+
import { artifactsCommand } from './commands/artifacts.js';
|
|
3
4
|
import { buildProject } from './commands/bundle.js';
|
|
4
5
|
import { createProject } from './commands/create.js';
|
|
5
6
|
import { publishProject } from './commands/publish.js';
|
|
6
|
-
import { initBanner } from './utils/banners.js';
|
|
7
7
|
import pJson from './utils/pjson.js';
|
|
8
8
|
const program = new Command();
|
|
9
|
-
initBanner();
|
|
10
9
|
program.name('cui').version(pJson.version);
|
|
11
10
|
program
|
|
12
11
|
.command('bundle')
|
|
13
12
|
.description('Bundle the project')
|
|
14
|
-
.
|
|
15
|
-
|
|
13
|
+
.option('-t, --target <goos-goarch>', 'Restrict the Go build to a single target (e.g. linux-amd64) — used by CI matrix jobs')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
await buildProject({ target: options.target });
|
|
16
|
+
});
|
|
17
|
+
program
|
|
18
|
+
.command('artifacts')
|
|
19
|
+
.description('Aggregate per-platform binaries downloaded from CI matrix jobs into a publish-ready bundle (Go plugins only)')
|
|
20
|
+
.option('-d, --dir <path>', 'Directory containing downloaded artifacts (default: ./artifacts)')
|
|
21
|
+
.action(async (options) => {
|
|
22
|
+
await artifactsCommand({ dir: options.dir });
|
|
16
23
|
});
|
|
17
24
|
program
|
|
18
25
|
.command('create <project-name>')
|
|
@@ -26,6 +33,8 @@ program
|
|
|
26
33
|
.option('-a, --alpha', 'Publish an alpha version')
|
|
27
34
|
.option('-b, --beta', 'Publish a beta version')
|
|
28
35
|
.option('-l, --latest', 'Publish a latest version')
|
|
36
|
+
.option('-y, --yes', 'Non-interactive: publish the version in bundle/package.json without prompts (CI)')
|
|
37
|
+
.option('--provenance', 'Publish with npm provenance (--provenance --access public); requires OIDC in CI')
|
|
29
38
|
.action(async (options) => {
|
|
30
39
|
await publishProject(options);
|
|
31
40
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAErC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAE3C,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,4BAA4B,EAAE,sFAAsF,CAAC;KAC5H,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;IAC7C,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,8GAA8G,CAAC;KAC3H,MAAM,CAAC,kBAAkB,EAAE,kEAAkE,CAAC;KAC9F,MAAM,CAAC,KAAK,EAAE,OAAyB,EAAE,EAAE;IAC1C,MAAM,gBAAgB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;KACjD,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,cAAc,EAAE,0BAA0B,CAAC;KAClD,MAAM,CAAC,WAAW,EAAE,kFAAkF,CAAC;KACvG,MAAM,CAAC,cAAc,EAAE,iFAAiF,CAAC;KACzG,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|