33 lines
878 B
Go
33 lines
878 B
Go
package backup
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
|
|
"git.misaka.ren/M1saka/docker_backup/internal/config"
|
|
"git.misaka.ren/M1saka/docker_backup/internal/storage"
|
|
)
|
|
|
|
// uploadToRemotes uploads a backup file to all configured remote backends.
|
|
func uploadToRemotes(ctx context.Context, remote *config.RemoteConfig, projectName, localPath string, logger *slog.Logger) error {
|
|
backends, err := storage.FromConfig(remote)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(backends) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var lastErr error
|
|
for _, b := range backends {
|
|
logger.Info("uploading to remote", "project", projectName, "file", localPath)
|
|
if err := b.Upload(ctx, projectName, localPath); err != nil {
|
|
logger.Warn("remote upload failed", "project", projectName, "error", err)
|
|
lastErr = err
|
|
continue
|
|
}
|
|
logger.Info("remote upload complete", "project", projectName)
|
|
}
|
|
|
|
return lastErr
|
|
} |