homeio
PublikFork dari doctor-io/homeio
maintenance-service.ts
import "server-only";
import { execFile } from "node:child_process";
import { promisify } from "node:util";
import { logServerAction } from "@/lib/server/logging/logger";
const execFileAsync = promisify(execFile);
export type DockerPruneResult = {
command: "images" | "volumes";
output: string;
};
async function runDockerPrune(
command: DockerPruneResult["command"],
args: string[],
) {
const { stdout, stderr } = await execFileAsync("docker", args);
const output = [stdout, stderr].filter((value) => value.trim().length > 0).join("\n").trim();
logServerAction({
layer: "service",
action: `docker.prune.${command}`,
status: "success",
message: `Pruned unused Docker ${command}`,
meta: {
args,
output,
},
});
return {
command,
output,
} satisfies DockerPruneResult;
}
export async function pruneDockerImages() {
return runDockerPrune("images", ["image", "prune", "-af"]);
}
export async function pruneDockerVolumes() {
return runDockerPrune("volumes", ["volume", "prune", "-f"]);
}