// Package appexport provides per-app export/import via .fab bundles. // A .fab file is a tar.gz (optionally password-encrypted) containing an app's // config, database dump, and all user data — everything needed to restore // the app to its current state. package appexport // ExportStackProvider provides stack data without circular imports. // Implemented by exportAdapter in main.go (same pattern as backup.StackDataProvider). type ExportStackProvider interface { // GetStackDir returns the stack's directory path (e.g., /opt/docker/stacks/nextcloud). GetStackDir(name string) (string, bool) // GetStackComposePath returns the compose file path. GetStackComposePath(name string) (string, bool) // GetStackHDDMounts returns resolved HDD bind mount host paths for the stack. GetStackHDDMounts(name string) []string // GetStackHDDPath returns the raw HDD_PATH env var from app.yaml. GetStackHDDPath(name string) string // IsStackRunning returns true if the stack has running containers. IsStackRunning(name string) bool // StopStack stops the stack via docker compose down. StopStack(name string) error // StartStack starts the stack via docker compose up -d. StartStack(name string) error // GetStackDisplayName returns the human-readable name from .felhom.yml. GetStackDisplayName(name string) string // GetStackNeedsHDD returns true if the app requires HDD storage. GetStackNeedsHDD(name string) bool // GetDockerVolumes returns named Docker volume names from the compose file. GetDockerVolumes(name string) []string // IsStackDeployed returns true if the stack has a saved app.yaml config. IsStackDeployed(name string) bool // GetDecryptedEnv returns the decrypted env var map from app.yaml. GetDecryptedEnv(name string) map[string]string // --- Import-specific methods --- // GetStacksBaseDir returns the base directory where stacks live (e.g., /opt/docker/stacks). GetStacksBaseDir() string // SaveEncryptedAppConfig saves app.yaml with re-encrypted sensitive fields. // env is the plaintext env map from the bundle; encryption uses the current server key. SaveEncryptedAppConfig(stackDir string, env map[string]string) error // RefreshStacks rescans all stacks and refreshes container state. RefreshStacks() error // RemoveStackVolumes stops the stack and removes its named Docker volumes. RemoveStackVolumes(name string) error } // DrivePathInfo holds a registered storage path and its label. type DrivePathInfo struct { Path string Label string }