mirror of
https://github.com/cupcakearmy/autorestic.git
synced 2026-04-11 16:17:08 +00:00
Compare commits
2 Commits
master
...
f0a954a72f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0a954a72f | ||
|
|
56545c207c |
23
.github/workflows/build.yml
vendored
23
.github/workflows/build.yml
vendored
@@ -1,19 +1,21 @@
|
||||
name: Release
|
||||
name: Main
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*.*.*"
|
||||
- 'v*.*.*'
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: docker/setup-qemu-action@v4
|
||||
- uses: docker/setup-buildx-action@v4
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
- name: Docker Labels
|
||||
id: meta
|
||||
uses: docker/metadata-action@v6
|
||||
uses: crazy-max/ghaction-docker-meta@v4
|
||||
with:
|
||||
images: cupcakearmy/autorestic
|
||||
tags: |
|
||||
@@ -21,12 +23,12 @@ jobs:
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v4
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v6
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
@@ -35,9 +37,10 @@ jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: jdx/mise-action@v3
|
||||
- run: mise run build
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: '^1.21'
|
||||
- name: Build
|
||||
run: go run build/build.go
|
||||
- name: Release
|
||||
|
||||
27
.github/workflows/ci.yml
vendored
27
.github/workflows/ci.yml
vendored
@@ -2,28 +2,23 @@ name: CI
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
MISE_EXPERIMENTAL: true
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: jdx/mise-action@v3
|
||||
- run: mise run test
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: '^1.21'
|
||||
- run: go test -v ./...
|
||||
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: jdx/mise-action@v3
|
||||
- run: mise run build
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-go@v3
|
||||
with:
|
||||
go-version: '^1.21'
|
||||
- run: go build -v .
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM golang:1.25-alpine as builder
|
||||
FROM golang:1.23-alpine as builder
|
||||
|
||||
WORKDIR /app
|
||||
COPY go.* .
|
||||
@@ -6,7 +6,7 @@ RUN go mod download
|
||||
COPY . .
|
||||
RUN go build
|
||||
|
||||
FROM restic/restic:0.17.3
|
||||
FROM restic/restic:0.17.1
|
||||
RUN apk add --no-cache rclone bash curl docker-cli
|
||||
COPY --from=builder /app/autorestic /usr/bin/autorestic
|
||||
ENTRYPOINT []
|
||||
|
||||
@@ -18,11 +18,9 @@ var backupCmd = &cobra.Command{
|
||||
err := lock.Lock()
|
||||
CheckErr(err)
|
||||
defer lock.Unlock()
|
||||
dry, _ := cmd.Flags().GetBool("dry-run")
|
||||
|
||||
selected, err := internal.GetAllOrSelected(cmd, false)
|
||||
CheckErr(err)
|
||||
|
||||
errors := 0
|
||||
for _, name := range selected {
|
||||
var splitted = strings.Split(name, "@")
|
||||
@@ -31,7 +29,7 @@ var backupCmd = &cobra.Command{
|
||||
specificBackend = splitted[1]
|
||||
}
|
||||
location, _ := internal.GetLocation(splitted[0])
|
||||
errs := location.Backup(false, dry, specificBackend)
|
||||
errs := location.Backup(false, specificBackend)
|
||||
for _, err := range errs {
|
||||
colors.Error.Printf("%s\n\n", err)
|
||||
errors++
|
||||
@@ -46,5 +44,4 @@ var backupCmd = &cobra.Command{
|
||||
func init() {
|
||||
rootCmd.AddCommand(backupCmd)
|
||||
internal.AddFlagsToCommand(backupCmd, false)
|
||||
backupCmd.Flags().Bool("dry-run", false, "do not write changes, show what would be affected")
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
v24
|
||||
v22.7.0
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
[settings]
|
||||
idiomatic_version_file_enable_tools = ["node", "pnpm"]
|
||||
@@ -5,11 +5,11 @@
|
||||
"start": "NEXT_TELEMETRY_DISABLED=1 next start"
|
||||
},
|
||||
"dependencies": {
|
||||
"next": "^14.2.35",
|
||||
"next": "^14.2.7",
|
||||
"nextra": "^2.13.4",
|
||||
"nextra-theme-docs": "^2.13.4",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1"
|
||||
},
|
||||
"packageManager": "pnpm@10.33.0"
|
||||
"packageManager": "pnpm@9.9.0"
|
||||
}
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
# Backup
|
||||
|
||||
```bash
|
||||
autorestic backup [-l, --location] [-a, --all] [--dry-run]
|
||||
autorestic backup [-l, --location] [-a, --all]
|
||||
```
|
||||
|
||||
Performs a backup of all locations if the `-a` flag is passed. To only backup some locations pass one or more `-l` or `--location` flags.
|
||||
|
||||
The `--dry-run` flag will do a dry run showing what would have been deleted, but won't touch the actual data.
|
||||
|
||||
|
||||
```bash
|
||||
# All
|
||||
autorestic backup -a
|
||||
|
||||
970
docs/pnpm-lock.yaml
generated
970
docs/pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
2
go.mod
2
go.mod
@@ -1,6 +1,6 @@
|
||||
module github.com/cupcakearmy/autorestic
|
||||
|
||||
go 1.26.1
|
||||
go 1.21
|
||||
|
||||
require (
|
||||
github.com/blang/semver/v4 v4.0.0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/bash
|
||||
set -e -o pipefail
|
||||
|
||||
shopt -s nocaseglob
|
||||
|
||||
OUT_FILE=/usr/local/bin/autorestic
|
||||
|
||||
@@ -188,34 +188,18 @@ func CheckConfig() error {
|
||||
if !CheckIfResticIsCallable() {
|
||||
return fmt.Errorf(`%s was not found. Install either with "autorestic install" or manually`, flags.RESTIC_BIN)
|
||||
}
|
||||
|
||||
cwd, _ := GetPathRelativeToConfig(".")
|
||||
for name, location := range c.Locations {
|
||||
location.name = name
|
||||
|
||||
// Hooks before location validation
|
||||
options := ExecuteOptions{
|
||||
Command: "bash",
|
||||
Dir: cwd,
|
||||
Envs: map[string]string{
|
||||
"AUTORESTIC_LOCATION": location.name,
|
||||
},
|
||||
}
|
||||
if err := location.ExecuteHooks(location.Hooks.PreValidate, options); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := location.validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
for name, backend := range c.Backends {
|
||||
backend.name = name
|
||||
if err := backend.validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for name, location := range c.Locations {
|
||||
location.name = name
|
||||
if err := location.validate(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +1,12 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func RunCron() error {
|
||||
c := GetConfig()
|
||||
var errs []error
|
||||
for name, l := range c.Locations {
|
||||
l.name = name
|
||||
if err := l.RunCron(); err != nil {
|
||||
errs = append(errs, err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if len(errs) > 0 {
|
||||
return fmt.Errorf("Encountered errors during cron process:\n%w", errors.Join(errs...))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
@@ -168,7 +167,7 @@ func (l Location) getLocationTags() string {
|
||||
return buildTag("location", l.name)
|
||||
}
|
||||
|
||||
func (l Location) Backup(cron bool, dry bool, specificBackend string) []error {
|
||||
func (l Location) Backup(cron bool, specificBackend string) []error {
|
||||
var errors []error
|
||||
var backends []string
|
||||
colors.PrimaryPrint(" Backing up location \"%s\" ", l.name)
|
||||
@@ -228,9 +227,6 @@ func (l Location) Backup(cron bool, dry bool, specificBackend string) []error {
|
||||
if cron {
|
||||
cmd = append(cmd, "--tag", buildTag("cron"))
|
||||
}
|
||||
if dry {
|
||||
cmd = append(cmd, "--dry-run")
|
||||
}
|
||||
cmd = append(cmd, "--tag", l.getLocationTags())
|
||||
backupOptions := ExecuteOptions{
|
||||
Envs: env,
|
||||
@@ -450,10 +446,7 @@ func (l Location) RunCron() error {
|
||||
now := time.Now()
|
||||
if now.After(next) {
|
||||
lock.SetCron(l.name, now.Unix())
|
||||
errs := l.Backup(true, false, "")
|
||||
if len(errs) > 0 {
|
||||
return fmt.Errorf("Failed to backup location \"%s\":\n%w", l.name, errors.Join(errs...))
|
||||
}
|
||||
l.Backup(true, "")
|
||||
} else {
|
||||
if !flags.CRON_LEAN {
|
||||
colors.Body.Printf("Skipping \"%s\", not due yet.\n", l.name)
|
||||
|
||||
14
mise.toml
14
mise.toml
@@ -1,14 +0,0 @@
|
||||
[tools]
|
||||
go = "latest"
|
||||
restic = "latest"
|
||||
|
||||
[tasks]
|
||||
build = { description = "Build the project", run = "go build -v ." }
|
||||
|
||||
test = { description = "Run tests", run = "go test -v ./..." }
|
||||
|
||||
coverage = { description = "Generate coverage report", run = "go test -coverprofile=coverage.out ./... && go tool cover -func=coverage.out && go tool cover -html=coverage.out -o coverage.html", depends = [
|
||||
"test"
|
||||
] }
|
||||
|
||||
clean = { run = "rm -f coverage.*", description = "Clean up coverage files" }
|
||||
Reference in New Issue
Block a user