package main import ( "backup-tool/s3helper" "context" "fmt" "log" "os" "os/exec" "github.com/joho/godotenv" ) func main() { err := godotenv.Load() if err != nil { log.Fatalf("error loading .env file: (%s)", err.Error()) } path, err := exec.LookPath("restic") if err != nil { log.Fatalf("could not find restic in PATH %s", err) } cmd := exec.Command(path, "backup", "--dry-run", "/media/piwigo") stdout, err := cmd.StdoutPipe() if err != nil { log.Fatalf("error connecting to stdout: %q: %s", cmd.String(), err) } err = cmd.Start() if err != nil { log.Fatalf("error running command: %s", err) } cmd = exec.Command(path, "forget", "--dry-run", "--keep-last", "7") stdout, err = cmd.StdoutPipe() if err != nil { log.Fatalf("error connecting to stdout: %s", err) } err = cmd.Start() if err != nil { log.Fatalf("error running command %q: %s", cmd.String(), err) } log.Print(stdout) if len(os.Args) > 1 { // only do this if we have been given a file to upload (for now) // TODO: have this tool take the backup of the DB itself b2Creds, err := getCredentials([]string{"B2_KEY_ID", "B2_APPLICATION_KEY"}) if err != nil { log.Fatalf("could not get B2 credentials: %s", err) } s3helper.UploadFile(context.Background(), b2Creds) } } func getCredentials(credNames []string) (map[string]string, error) { creds := map[string]string{} for _, name := range credNames { value := os.Getenv(name) if value == "" { return nil, fmt.Errorf("missing or empty ENV var: %s", name) } creds[name] = value } return creds, nil }