Skip to content

Commit af4be0b

Browse files
authored
fix(cli): persist auto-scale rules in JSON mode (#997)
1 parent b3805ef commit af4be0b

2 files changed

Lines changed: 36 additions & 12 deletions

File tree

‎packages/cli/src/commands/scale.test.ts‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,28 @@ describe('auto-scale rules', () => {
390390
expect(rules.targetCpuPercent).toBe(65);
391391
expect(rules.cooldownSeconds).toBe(300);
392392
});
393+
394+
it('persists rules when --json is used without --dry-run', async () => {
395+
const dir = makeTempDir();
396+
const previousHome = process.env.HOME;
397+
const previousUserProfile = process.env.USERPROFILE;
398+
process.env.HOME = dir;
399+
process.env.USERPROFILE = dir;
400+
401+
try {
402+
const auto = scaleCmd.commands.find(command => command.name() === 'auto');
403+
await auto?.parseAsync(['--min', '2', '--max', '4', '--json'], { from: 'user' });
404+
405+
const saved = JSON.parse(readFileSync(join(dir, '.sh1pt', 'auto-scale.json'), 'utf-8'));
406+
expect(saved.minInstances).toBe(2);
407+
expect(saved.maxInstances).toBe(4);
408+
} finally {
409+
if (previousHome === undefined) delete process.env.HOME;
410+
else process.env.HOME = previousHome;
411+
if (previousUserProfile === undefined) delete process.env.USERPROFILE;
412+
else process.env.USERPROFILE = previousUserProfile;
413+
}
414+
});
393415
});
394416

395417
// ---------------------------------------------------------------------------

‎packages/cli/src/commands/scale.ts‎

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -559,25 +559,27 @@ scaleCmd
559559
updatedAt: new Date().toISOString(),
560560
};
561561

562-
if (opts.json) {
563-
console.log(JSON.stringify({ rules }, null, 2));
564-
return;
562+
if (!opts.json) {
563+
console.log(kleur.bold('\n📊 Auto-Scale Rules'));
564+
console.log(kleur.dim('─'.repeat(52)));
565+
console.log(`${kleur.cyan('Min instances:'.padEnd(20))} ${min}`);
566+
console.log(`${kleur.cyan('Max instances:'.padEnd(20))} ${max}`);
567+
console.log(`${kleur.cyan('Target CPU:'.padEnd(20))} ${targetCpu}%`);
568+
console.log(`${kleur.cyan('Cooldown:'.padEnd(20))} ${cooldown}s (${(cooldown / 60).toFixed(1)} min)`);
569+
console.log(kleur.dim('─'.repeat(52)));
565570
}
566571

567-
console.log(kleur.bold('\n📊 Auto-Scale Rules'));
568-
console.log(kleur.dim('─'.repeat(52)));
569-
console.log(`${kleur.cyan('Min instances:'.padEnd(20))} ${min}`);
570-
console.log(`${kleur.cyan('Max instances:'.padEnd(20))} ${max}`);
571-
console.log(`${kleur.cyan('Target CPU:'.padEnd(20))} ${targetCpu}%`);
572-
console.log(`${kleur.cyan('Cooldown:'.padEnd(20))} ${cooldown}s (${(cooldown / 60).toFixed(1)} min)`);
573-
console.log(kleur.dim('─'.repeat(52)));
574-
575572
if (opts.dryRun) {
576-
console.log(kleur.dim('Dry-run — rules not saved.'));
573+
if (opts.json) console.log(JSON.stringify({ rules }, null, 2));
574+
else console.log(kleur.dim('Dry-run — rules not saved.'));
577575
return;
578576
}
579577

580578
saveAutoScaleRules(rules);
579+
if (opts.json) {
580+
console.log(JSON.stringify({ rules }, null, 2));
581+
return;
582+
}
581583
console.log(kleur.green('✅ Auto-scale rules saved.'));
582584
console.log(kleur.dim(`Config file: ${AUTO_SCALE_FILE}`));
583585
console.log(kleur.dim('sh1pt cloud will poll metrics and scale up/down based on these rules.'));

0 commit comments

Comments
 (0)