Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions apps/server/src/storageCleanup.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1814,6 +1814,42 @@ describe("storage cleanup reports and local file policies", () => {
}),
),
);
it.live.each([
{ linked: "home", outcome: "removed", reason: "Removed 1 rotated logs" },
{ linked: "logs folder", outcome: "kept", reason: "No expired files" },
] as const)(
"rotated logs behind a symlinked $linked are $outcome",
({ linked, outcome, reason }) =>
runCleanupTest(
Effect.gen(function* () {
const fs = yield* FileSystem.FileSystem;
const config = yield* ServerConfig.ServerConfig;
const disk = yield* fs.realPath(yield* fs.makeTempDirectoryScoped());
yield* fs.makeDirectory(`${disk}/real/logs`, { recursive: true });
if (linked === "home") {
yield* fs.symlink(`${disk}/real`, `${disk}/home`);
} else {
yield* fs.makeDirectory(`${disk}/home`);
yield* fs.symlink(`${disk}/real/logs`, `${disk}/home/logs`);
}
yield* fs.writeFileString(`${disk}/real/logs/server.log.1`, "log");
yield* fs.utimes(`${disk}/real/logs/server.log.1`, 1, 1);
const { service, enableFiles, disable } = yield* cleanupFixture().pipe(
Effect.provideService(ServerConfig.ServerConfig, {
...config,
logsDir: `${disk}/home/logs`,
}),
);
disable();
enableFiles();
const report = yield* service.runNow;
expect(report.entries.filter((entry) => entry.kind === "logs")).toMatchObject([
{ outcome, reason },
]);
expect(yield* fs.exists(`${disk}/real/logs/server.log.1`)).toBe(outcome === "kept");
}),
),
);
it.live("reports git failures without aborting the remaining categories", () =>
runCleanupTest(
Effect.gen(function* () {
Expand Down
4 changes: 3 additions & 1 deletion apps/server/src/storageCleanup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1059,8 +1059,10 @@ const make = Effect.gen(function* () {
removed: { files: number; bytes: number },
) {
if (days === null || !(yield* fs.exists(root))) return removed;
// A symlinked parent (a linked T3 home) is fine; a symlinked folder is not.
const realRoot = yield* fs.realPath(root);
if (realRoot !== path.resolve(root)) return removed;
const realParent = yield* fs.realPath(path.dirname(root));
if (realRoot !== path.join(realParent, path.basename(root))) return removed;
const visit = Effect.fn("StorageCleanup.visitFiles")(function* (
directory: string,
): Effect.fn.Return<void, PlatformError | ServerSettingsError> {
Expand Down
Loading