Compare commits

...

9 Commits

Author SHA1 Message Date
Nicco 76c8060919
Merge branch 'master' into feature/add-docker-cli 2024-02-15 14:25:44 +01:00
dependabot[bot] b3440cd87c
Bump golang from 1.21-alpine to 1.22-alpine (#355)
Bumps golang from 1.21-alpine to 1.22-alpine.

---
updated-dependencies:
- dependency-name: golang
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-15 14:24:17 +01:00
rdelaage 4848702929
Use options on exec command (#253)
Co-authored-by: Romain de Laage <romain.delaage@rdelaage.ovh>
2024-02-15 14:23:43 +01:00
Nicco b5604b8b9f
update deps (#353) 2024-02-09 14:18:24 +01:00
Alexander Zhang 24220f6b62
Fix broken link in docs (#350) 2024-02-09 14:18:06 +01:00
Niccolo Borgioli ced20801c1
bump version 2024-01-11 19:17:53 +01:00
Christoph Loy ce9140fa1e
Fix handling of `XDG_CONFIG_HOME` (#347) 2024-01-11 19:01:59 +01:00
Matthias Liffers 046c79fd15
Add curl to docker image (#344) 2024-01-11 18:56:35 +01:00
Skye J f8603425d1
Update installation.md to add AUR back (#348)
I have been maintaining the AUR package, so it is no longer deprecated.
2024-01-11 18:52:23 +01:00
11 changed files with 69 additions and 29 deletions

View File

@ -3,7 +3,7 @@ name: Main
on: on:
push: push:
tags: tags:
- "v*.*.*" - 'v*.*.*'
jobs: jobs:
docker: docker:
@ -40,7 +40,7 @@ jobs:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- uses: actions/setup-go@v3 - uses: actions/setup-go@v3
with: with:
go-version: "^1.20" go-version: '^1.21'
- name: Build - name: Build
run: go run build/build.go run: go run build/build.go
- name: Release - name: Release

View File

@ -1,4 +1,4 @@
FROM golang:1.20-alpine as builder FROM golang:1.22-alpine as builder
WORKDIR /app WORKDIR /app
COPY go.* . COPY go.* .
@ -6,8 +6,8 @@ RUN go mod download
COPY . . COPY . .
RUN go build RUN go build
FROM restic/restic:0.16.0 FROM restic/restic:0.16.4
RUN apk add --no-cache rclone bash docker-cli RUN apk add --no-cache rclone bash curl docker-cli
COPY --from=builder /app/autorestic /usr/bin/autorestic COPY --from=builder /app/autorestic /usr/bin/autorestic
ENTRYPOINT [] ENTRYPOINT []
CMD [ "autorestic" ] CMD [ "autorestic" ]

View File

@ -59,24 +59,7 @@ func initConfig() {
os.Exit(1) os.Exit(1)
} }
} else { } else {
configPaths := []string{"."} configPaths := getConfigPaths()
// Home
if home, err := homedir.Dir(); err == nil {
configPaths = append(configPaths, home)
}
// XDG_CONFIG_HOME
{
prefix, found := os.LookupEnv("XDG_CONFIG_HOME")
if !found {
if home, err := homedir.Dir(); err != nil {
prefix = filepath.Join(home, ".config")
}
}
xdgConfig := filepath.Join(prefix, "autorestic")
configPaths = append(configPaths, xdgConfig)
}
for _, cfgPath := range configPaths { for _, cfgPath := range configPaths {
viper.AddConfigPath(cfgPath) viper.AddConfigPath(cfgPath)
} }
@ -88,3 +71,22 @@ func initConfig() {
viper.AutomaticEnv() viper.AutomaticEnv()
} }
} }
func getConfigPaths() []string {
result := []string{"."}
if home, err := homedir.Dir(); err == nil {
result = append(result, home)
}
{
xdgConfigHome, found := os.LookupEnv("XDG_CONFIG_HOME")
if !found {
if home, err := homedir.Dir(); err == nil {
xdgConfigHome = filepath.Join(home, ".config")
}
}
xdgConfig := filepath.Join(xdgConfigHome, "autorestic")
result = append(result, xdgConfig)
}
return result
}

36
cmd/root_test.go Normal file
View File

@ -0,0 +1,36 @@
package cmd
import (
"github.com/mitchellh/go-homedir"
"os"
"path/filepath"
"slices"
"testing"
)
const xdgConfigHome = "XDG_CONFIG_HOME"
func assertContains(t *testing.T, array []string, element string) {
if !slices.Contains(array, element) {
t.Errorf("Expected %s to be contained in %s", element, array)
}
}
func TestConfigResolving(t *testing.T) {
t.Run("~/.config/autorestic is used if XDG_CONFIG_HOME is not set", func(t *testing.T) {
// Override env using testing so that env gets restored after test
t.Setenv(xdgConfigHome, "")
_ = os.Unsetenv("XDG_CONFIG_HOME")
configPaths := getConfigPaths()
homeDir, _ := homedir.Dir()
expectedConfigPath := filepath.Join(homeDir, ".config/autorestic")
assertContains(t, configPaths, expectedConfigPath)
})
t.Run("XDG_CONFIG_HOME is respected if set", func(t *testing.T) {
t.Setenv(xdgConfigHome, "/foo/bar")
configPaths := getConfigPaths()
assertContains(t, configPaths, filepath.Join("/", "foo", "bar", "autorestic"))
})
}

View File

@ -4,7 +4,7 @@
autorestic forget [-l, --location] [-a, --all] [--dry-run] [--prune] autorestic forget [-l, --location] [-a, --all] [--dry-run] [--prune]
``` ```
This will prune and remove old data form the backends according to the [keep policy you have specified for the location](/location/forget). This will prune and remove old data form the backends according to the [keep policy you have specified for the location](/location/options/forget).
The `--dry-run` flag will do a dry run showing what would have been deleted, but won't touch the actual data. The `--dry-run` flag will do a dry run showing what would have been deleted, but won't touch the actual data.

View File

@ -2,10 +2,11 @@
## Path ## Path
By default autorestic searches for a `.autorestic.yml` file in the current directory and your home folder. By default autorestic searches for a `.autorestic.yml` file in the current directory, your home folder and your XDG config folder (`~/.config/` by default):
- `./.autorestic.yml` - `./.autorestic.yml`
- `~/.autorestic.yml` - `~/.autorestic.yml`
- `~/.config/autorestic/.autorestic.yml`
You can also specify a custom file with the `-c path/to/some/config.yml` You can also specify a custom file with the `-c path/to/some/config.yml`

View File

@ -30,4 +30,4 @@ Fedora users can install the [autorestic](https://src.fedoraproject.org/rpms/aut
### AUR ### AUR
~~If you are on Arch there is an [AUR Package](https://aur.archlinux.org/packages/autorestic-bin/) (looking for maintainers).~~ - Deprecated If you are on Arch there is an [AUR Package](https://aur.archlinux.org/packages/autorestic-bin/)

2
go.mod
View File

@ -1,6 +1,6 @@
module github.com/cupcakearmy/autorestic module github.com/cupcakearmy/autorestic
go 1.20 go 1.21
require ( require (
github.com/blang/semver/v4 v4.0.0 github.com/blang/semver/v4 v4.0.0

View File

@ -143,6 +143,7 @@ func (b Backend) Exec(args []string) error {
return err return err
} }
options := ExecuteOptions{Envs: env} options := ExecuteOptions{Envs: env}
args = append(args, combineBackendOptions("exec", b)...)
_, out, err := ExecuteResticCommand(options, args...) _, out, err := ExecuteResticCommand(options, args...)
if err != nil { if err != nil {
colors.Error.Println(out) colors.Error.Println(out)

View File

@ -17,7 +17,7 @@ import (
"github.com/spf13/viper" "github.com/spf13/viper"
) )
const VERSION = "1.7.9" const VERSION = "1.7.11"
type OptionMap map[string][]interface{} type OptionMap map[string][]interface{}
type Options map[string]OptionMap type Options map[string]OptionMap

View File

@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
You may obtain a copy of the License at You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, distributed under the License is distributed on an "AS IS" BASIS,