Feature/sdk improvements (#2879)

* sdk improvements

* subcontainer fixes, disable wifi on migration if not in use, filterable interfaces
This commit is contained in:
Aiden McClelland
2025-04-18 14:11:13 -06:00
committed by GitHub
parent dcfbaa9243
commit 2c65033c0a
19 changed files with 426 additions and 136 deletions

View File

@@ -1,7 +1,7 @@
import * as T from "../../../base/lib/types"
import * as child_process from "child_process"
import * as fs from "fs/promises"
import { asError, StorePath } from "../util"
import { Affine, asError, StorePath } from "../util"
export const DEFAULT_OPTIONS: T.SyncOptions = {
delete: true,
@@ -15,12 +15,18 @@ export type BackupSync<Volumes extends string> = {
restoreOptions?: Partial<T.SyncOptions>
}
export type BackupEffects = T.Effects & Affine<"Backups">
export class Backups<M extends T.SDKManifest> {
private constructor(
private options = DEFAULT_OPTIONS,
private restoreOptions: Partial<T.SyncOptions> = {},
private backupOptions: Partial<T.SyncOptions> = {},
private backupSet = [] as BackupSync<M["volumes"][number]>[],
private preBackup = async (effects: BackupEffects) => {},
private postBackup = async (effects: BackupEffects) => {},
private preRestore = async (effects: BackupEffects) => {},
private postRestore = async (effects: BackupEffects) => {},
) {}
static withVolumes<M extends T.SDKManifest = never>(
@@ -93,6 +99,7 @@ export class Backups<M extends T.SDKManifest> {
}
async createBackup(effects: T.Effects) {
await this.preBackup(effects as BackupEffects)
for (const item of this.backupSet) {
const rsyncResults = await runRsync({
srcPath: item.dataPath,
@@ -116,6 +123,7 @@ export class Backups<M extends T.SDKManifest> {
await fs.writeFile("/media/startos/backup/dataVersion.txt", dataVersion, {
encoding: "utf-8",
})
await this.postBackup(effects as BackupEffects)
return
}