fix(install): preserve user fleet data on re-seed + refresh active units (CRITICAL) (#632)
Co-authored-by: Jason Woltje <jason@diversecanvas.com> Co-committed-by: Jason Woltje <jason@diversecanvas.com>
This commit was merged in pull request #632.
This commit is contained in:
@@ -7,7 +7,9 @@ import {
|
||||
buildRelaunchCommands,
|
||||
readRosterAgentNames,
|
||||
runFrameworkReseed,
|
||||
refreshActiveFleetUnits,
|
||||
} from './update-checker.js';
|
||||
import { existsSync, readFileSync } from 'node:fs';
|
||||
|
||||
/**
|
||||
* F3-m3 / R13: `mosaic update` re-seeds the framework + (opt-in) relaunches
|
||||
@@ -83,3 +85,41 @@ describe('runFrameworkReseed', () => {
|
||||
rmSync(missing, { recursive: true, force: true });
|
||||
});
|
||||
});
|
||||
|
||||
describe('refreshActiveFleetUnits', () => {
|
||||
let root: string;
|
||||
let mosaicHome: string;
|
||||
let configHome: string;
|
||||
|
||||
beforeEach(() => {
|
||||
root = mkdtempSync(join(tmpdir(), 'mosaic-units-'));
|
||||
mosaicHome = join(root, 'mosaic');
|
||||
configHome = join(root, 'config');
|
||||
mkdirSync(join(mosaicHome, 'systemd', 'user'), { recursive: true });
|
||||
mkdirSync(join(configHome, 'systemd', 'user'), { recursive: true });
|
||||
// Freshly re-seeded units (new content).
|
||||
writeFileSync(join(mosaicHome, 'systemd', 'user', 'mosaic-agent@.service'), 'NEW\n');
|
||||
writeFileSync(join(mosaicHome, 'systemd', 'user', 'mosaic-tmux-holder.service'), 'NEW\n');
|
||||
});
|
||||
afterEach(() => rmSync(root, { recursive: true, force: true }));
|
||||
|
||||
it('refreshes active units when a fleet is already installed', () => {
|
||||
// Active dir already carries mosaic units (stale) → fleet is installed.
|
||||
writeFileSync(join(configHome, 'systemd', 'user', 'mosaic-agent@.service'), 'OLD\n');
|
||||
const res = refreshActiveFleetUnits(mosaicHome, {
|
||||
XDG_CONFIG_HOME: configHome,
|
||||
} as NodeJS.ProcessEnv);
|
||||
expect(res.refreshed).toContain('mosaic-agent@.service');
|
||||
expect(
|
||||
readFileSync(join(configHome, 'systemd', 'user', 'mosaic-agent@.service'), 'utf-8'),
|
||||
).toBe('NEW\n');
|
||||
});
|
||||
|
||||
it('is a no-op when no fleet is installed (active dir has no mosaic units)', () => {
|
||||
const res = refreshActiveFleetUnits(mosaicHome, {
|
||||
XDG_CONFIG_HOME: configHome,
|
||||
} as NodeJS.ProcessEnv);
|
||||
expect(res.refreshed).toEqual([]);
|
||||
expect(existsSync(join(configHome, 'systemd', 'user', 'mosaic-agent@.service'))).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user