Compare commits

...

5 Commits

Author SHA1 Message Date
1c436369f0 check folder 2021-04-24 12:40:33 +02:00
6efcce07b7 show error and exit with bad code if not found 2021-04-23 23:53:57 +02:00
40988ef3b4 Update contrib.md 2021-04-23 17:53:48 +02:00
fad33fcdaa Merge pull request #51 from TheForcer/master
Fix typos in docs
2021-04-23 17:53:15 +02:00
Felix
8cf8a77558 Fix typos in docs 2021-04-23 17:45:02 +02:00
7 changed files with 52 additions and 19 deletions

View File

@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.0.5] - 2021-04-24
### Fixed
- Correct exit code on backup failure and better logging/output/feedback.
- Check if `from` key is an actual directory.
## [1.0.4] - 2021-04-23 ## [1.0.4] - 2021-04-23
### Added ### Added

View File

@@ -1,7 +1,10 @@
package cmd package cmd
import ( import (
"fmt"
"github.com/cupcakearmy/autorestic/internal" "github.com/cupcakearmy/autorestic/internal"
"github.com/cupcakearmy/autorestic/internal/colors"
"github.com/cupcakearmy/autorestic/internal/lock" "github.com/cupcakearmy/autorestic/internal/lock"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@@ -18,9 +21,17 @@ var backupCmd = &cobra.Command{
selected, err := internal.GetAllOrSelected(cmd, false) selected, err := internal.GetAllOrSelected(cmd, false)
CheckErr(err) CheckErr(err)
errors := 0
for _, name := range selected { for _, name := range selected {
location, _ := internal.GetLocation(name) location, _ := internal.GetLocation(name)
location.Backup(false) err := location.Backup(false)
if err != nil {
colors.Error.Println(err)
errors++
}
}
if errors > 0 {
CheckErr(fmt.Errorf("%d errors were found", errors))
} }
}, },
} }

View File

@@ -6,6 +6,6 @@ autorestic cron
This command is mostly intended to be triggered by an automated system like systemd or crontab. This command is mostly intended to be triggered by an automated system like systemd or crontab.
It will run cron jobs es [specified in the cron section](/locations/cron) of a specific location. It will run cron jobs as [specified in the cron section](/location/cron) of a specific location.
> :ToCPrevNext > :ToCPrevNext

View File

@@ -7,5 +7,6 @@ This amazing people helped the project!
- @sumnerboy12 - Typos - @sumnerboy12 - Typos
- @FuzzyMistborn - Typos - @FuzzyMistborn - Typos
- @ChanceM - Typos - @ChanceM - Typos
- @TheForcer - Typos
> :ToCPrevNext > :ToCPrevNext

View File

@@ -121,16 +121,20 @@ func (b Backend) Exec(args []string) error {
} }
options := ExecuteOptions{Envs: env} options := ExecuteOptions{Envs: env}
out, err := ExecuteResticCommand(options, args...) out, err := ExecuteResticCommand(options, args...)
if err != nil {
colors.Error.Println(out)
return err
}
if VERBOSE { if VERBOSE {
colors.Faint.Println(out) colors.Faint.Println(out)
} }
return err return nil
} }
func (b Backend) ExecDocker(l Location, args []string) error { func (b Backend) ExecDocker(l Location, args []string) (string, error) {
env, err := b.getEnv() env, err := b.getEnv()
if err != nil { if err != nil {
return err return "", err
} }
volume := l.getVolumeName() volume := l.getVolumeName()
path, _ := l.getPath() path, _ := l.getPath()
@@ -157,8 +161,5 @@ func (b Backend) ExecDocker(l Location, args []string) error {
} }
docker = append(docker, "restic/restic", "-c", "restic "+strings.Join(args, " ")) docker = append(docker, "restic/restic", "-c", "restic "+strings.Join(args, " "))
out, err := ExecuteCommand(options, docker...) out, err := ExecuteCommand(options, docker...)
if VERBOSE { return out, err
colors.Faint.Println(out)
}
return err
} }

View File

@@ -12,7 +12,7 @@ import (
"github.com/spf13/viper" "github.com/spf13/viper"
) )
const VERSION = "1.0.4" const VERSION = "1.0.5"
var CI bool = false var CI bool = false
var VERBOSE bool = false var VERBOSE bool = false

View File

@@ -49,6 +49,18 @@ func (l Location) validate(c *Config) error {
if l.From == "" { if l.From == "" {
return fmt.Errorf(`Location "%s" is missing "from" key`, l.name) return fmt.Errorf(`Location "%s" is missing "from" key`, l.name)
} }
if from, err := GetPathRelativeToConfig(l.From); err != nil {
return err
} else {
if stat, err := os.Stat(from); err != nil {
return err
} else {
if !stat.IsDir() {
return fmt.Errorf("\"%s\" is not valid directory for location \"%s\"", from, l.name)
}
}
}
if len(l.To) == 0 { if len(l.To) == 0 {
return fmt.Errorf(`Location "%s" has no "to" targets`, l.name) return fmt.Errorf(`Location "%s" has no "to" targets`, l.name)
} }
@@ -81,12 +93,13 @@ func ExecuteHooks(commands []string, options ExecuteOptions) error {
for _, command := range commands { for _, command := range commands {
colors.Body.Println("> " + command) colors.Body.Println("> " + command)
out, err := ExecuteCommand(options, "-c", command) out, err := ExecuteCommand(options, "-c", command)
if err != nil {
colors.Error.Println(out)
return err
}
if VERBOSE { if VERBOSE {
colors.Faint.Println(out) colors.Faint.Println(out)
} }
if err != nil {
return err
}
} }
colors.Body.Println("") colors.Body.Println("")
return nil return nil
@@ -161,16 +174,16 @@ func (l Location) Backup(cron bool) error {
switch t { switch t {
case TypeLocal: case TypeLocal:
out, err = ExecuteResticCommand(backupOptions, cmd...) out, err = ExecuteResticCommand(backupOptions, cmd...)
if VERBOSE {
colors.Faint.Println(out)
}
case TypeVolume: case TypeVolume:
err = backend.ExecDocker(l, cmd) out, err = backend.ExecDocker(l, cmd)
} }
if err != nil { if err != nil {
colors.Error.Println(out)
return err return err
} }
if VERBOSE {
colors.Faint.Println(out)
}
} }
// After hooks // After hooks
@@ -271,7 +284,7 @@ func (l Location) Restore(to, from string, force bool) error {
} }
err = backend.Exec([]string{"restore", "--target", to, "--path", path, "latest"}) err = backend.Exec([]string{"restore", "--target", to, "--path", path, "latest"})
case TypeVolume: case TypeVolume:
err = backend.ExecDocker(l, []string{"restore", "--target", ".", "--path", path, "latest"}) _, err = backend.ExecDocker(l, []string{"restore", "--target", ".", "--path", path, "latest"})
} }
if err != nil { if err != nil {
return err return err