Skip to content

Commit 428a0f9

Browse files
authored
Merge pull request #41 from supnate/msp-dev
MUSE-1253 add msp cli
2 parents b3b829e + 897af45 commit 428a0f9

4 files changed

Lines changed: 81 additions & 3 deletions

File tree

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,6 @@ build
120120
node_modules
121121
~
122122

123-
vite.config.*.timestamp-*
123+
vite.config.*.timestamp-*
124+
125+
.claude

workspace/packages/muse-cli/bin/muse.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,82 @@ program
830830
console.log(result.success ? chalk.green('Success.') : chalk.red('Failed.'));
831831
});
832832

833+
program
834+
.command('get-msp')
835+
.description('Show all MSP (Muse SDK Presets) from msp.yaml')
836+
.action(async () => {
837+
const msp = await muse.msp.getMsp();
838+
if (!msp) {
839+
console.log(chalk.yellow('No msp.yaml found.'));
840+
} else {
841+
console.log(chalk.cyan(JSON.stringify(msp, null, 2)));
842+
}
843+
});
844+
845+
program
846+
.command('add-preset')
847+
.description('Add a new preset to msp.yaml')
848+
.argument('<name>', 'The preset name.')
849+
.option('--extends <preset>', 'The parent preset to extend.')
850+
.option('--versions <versions...>', 'Package versions, e.g: @ebay/muse-core=1.0.45 @ebay/muse-cli=1.0.34 .')
851+
.action(async (name, options) => {
852+
const versions = options.versions
853+
? Object.fromEntries(options.versions.map((kv) => kv.split('=')))
854+
: {};
855+
const preset = { versions };
856+
if (options.extends) preset.extends = options.extends;
857+
await muse.msp.addPreset({ name, preset });
858+
console.log(chalk.cyan(`Preset ${name} added.`));
859+
});
860+
861+
program
862+
.command('delete-preset')
863+
.description('Delete a preset from msp.yaml')
864+
.argument('<name>', 'The preset name to delete.')
865+
.action(async (name) => {
866+
const rl = readline.createInterface({ input, output });
867+
const answer = await new Promise((resolve) =>
868+
rl.question(`Delete preset "${name}"? This cannot be undone. Confirm (yes/no) [Y] ? `, resolve),
869+
);
870+
rl.close();
871+
if (confirmAnswer(answer)) {
872+
await muse.msp.deletePreset({ name });
873+
console.log(chalk.cyan(`Preset ${name} deleted.`));
874+
}
875+
});
876+
877+
program
878+
.command('update-preset-packages')
879+
.description('Update package versions in msp.yaml across all presets (same major version only)')
880+
.option('--versions <versions...>', 'Package versions, e.g: @ebay/muse-core=1.0.46 @ebay/muse-cli=1.0.35 .')
881+
.action(async (options) => {
882+
const pkgs = options.versions
883+
? Object.fromEntries(
884+
options.versions.map((kv) => {
885+
const [pkg, version] = kv.split('=');
886+
return [pkg, { version }];
887+
}),
888+
)
889+
: {};
890+
await muse.msp.updatePackages({ pkgs });
891+
console.log(chalk.cyan('Packages updated in msp.yaml.'));
892+
});
893+
894+
program
895+
.command('sync-preset-latest')
896+
.description('Sync all packages in msp.yaml to their latest versions from the npm registry')
897+
.option(
898+
'--registry [registry]',
899+
'The npm registry to use. Defaults to https://registry.npmjs.org .',
900+
'https://registry.npmjs.org',
901+
)
902+
.action(async (options) => {
903+
console.log(chalk.cyan(`Syncing latest package versions from ${options.registry}...`));
904+
const msp = await muse.msp.syncLatest({ registry: options.registry });
905+
console.log(chalk.cyan('msp.yaml updated:'));
906+
console.log(chalk.cyan(JSON.stringify(msp, null, 2)));
907+
});
908+
833909
// let other plugins add their own cli program commands
834910
muse.plugin.invoke('museCli.processProgram', program, { commander, chalk, timeAgo });
835911

workspace/packages/muse-core/lib/msp/addPreset.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ module.exports = async (params = {}) => {
3737
};
3838

3939
try {
40-
msp[name] = ctx.preset;
40+
msp = { [name]: ctx.preset, ...msp };
4141
await asyncInvoke('museCore.msp.addPreset', ctx, params);
4242
await registry.setYaml('/msp.yaml', msp, msg || `Add preset ${name} by ${author}`);
4343
} catch (err) {

workspace/packages/muse-core/lib/msp/addPreset.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ describe('addPreset tests.', () => {
4848
});
4949

5050
const msp = await registry.getJsonByYaml('/msp.yaml');
51-
expect(Object.keys(msp)).toEqual(['default', 'muse-react']);
51+
expect(Object.keys(msp)).toEqual(['muse-react', 'default']);
5252
expect(msp['muse-react'].extends).toBe('default');
5353
});
5454

0 commit comments

Comments
 (0)