refactor(restic): split each command into its own file refactor: add missing await before promise expects <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes * **Tests** * Improved async assertion handling across test suites for enhanced test reliability * Expanded test coverage for backup, restore, and other core operations * **Refactor** * Reorganized internal utility structure for improved code maintainability * **Chores** * Updated linting configuration and TypeScript dependencies <!-- end of auto-generated comment: release notes by coderabbit.ai -->
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import type { RepositoryConfig } from "~/schemas/restic";
|
|
import { config as appConfig } from "~/server/core/config";
|
|
import { logger } from "~/server/utils/logger";
|
|
import { safeExec } from "~/server/utils/spawn";
|
|
import { addCommonArgs } from "../helpers/add-common-args";
|
|
import { buildEnv } from "../helpers/build-env";
|
|
import { buildRepoUrl } from "../helpers/build-repo-url";
|
|
import { cleanupTemporaryKeys } from "../helpers/cleanup-temporary-keys";
|
|
import { keyAdd } from "./key-add";
|
|
|
|
export const init = async (config: RepositoryConfig, organizationId: string, options?: { timeoutMs?: number }) => {
|
|
const repoUrl = buildRepoUrl(config);
|
|
|
|
logger.info(`Initializing restic repository at ${repoUrl}...`);
|
|
|
|
const env = await buildEnv(config, organizationId);
|
|
|
|
const args = ["init", "--repo", repoUrl];
|
|
addCommonArgs(args, env, config);
|
|
|
|
const res = await safeExec({ command: "restic", args, env, timeout: options?.timeoutMs ?? 60000 });
|
|
await cleanupTemporaryKeys(env);
|
|
|
|
if (res.exitCode !== 0) {
|
|
logger.error(`Restic init failed: ${res.stderr}`);
|
|
return { success: false, error: res.stderr };
|
|
}
|
|
|
|
logger.info(`Restic repository initialized: ${repoUrl}`);
|
|
|
|
if (appConfig.resticHostname) {
|
|
const keyResult = await keyAdd(config, organizationId, {
|
|
host: appConfig.resticHostname,
|
|
timeoutMs: options?.timeoutMs,
|
|
});
|
|
|
|
if (!keyResult.success) {
|
|
logger.warn(`Repository initialized but failed to add key with hostname: ${keyResult.error}`);
|
|
}
|
|
}
|
|
|
|
return { success: true, error: null };
|
|
};
|