89 Commits
Author SHA1 Message Date
Andreas Wachter 64e81c3b14 added lfs to s3 (#437) 2026-09-11 13:27:53 +02:00
Danny Sauer 55882ef63e fix(github): use App installation token for destination pushes (#433)
Pass the resolved destination credential through GetOrCreate to the push helper. Cover App and configured tokens on github.com and Enterprise Server, API failures, and the backup call chain.
2026-09-09 18:34:52 +02:00
Andreas Wachter 97c0b60a0c add failure heartbeats and status-aware notifications (#431) 2026-09-09 18:06:21 +02:00
Ben Burwood 11eb3ff76b Implement OpenGist Source (#430)
* Implement OpenGist Source

* Fix Lint Issues

* Fix gitlab test lint error

* global gickup UserAgent

* Fix package name lint

* fix go package name
2026-09-09 18:05:42 +02:00
gdm257 9fc59f0c48 Support WebDAV destination (#359)
* feat(destination): add WebDAV destination

Add a stdlib-only WebDAV destination mirroring the s3/azureblob flow:
bare-clone into a temp dir, optional zip, upload via HTTP PUT with Basic
auth, and prune stale remote files via PROPFIND/DELETE.

- types: WebDAVRepo struct, Destination.WebDAV field, Count()
- webdav: new package (UploadDirToWebDAV, DeleteObjectsNotInRepo)
- main: dispatch loop on par with azureblob
- conf.example.yml + gickup_spec.json: document the new destination

* feat: auto retry


Auto retry network errors and some situations.

Servers that disable Depth: infinity (Sabre/DAV, Nextcloud and others
answer 400/403/501) failed listing and could not prune stale files.
Try infinity once, fall back to recursive PROPFIND walk on rejection.

* refactor: use gowebdav client

Classify retry errors and make backoff interruptible.
2026-08-18 19:54:39 +02:00
Yorgos SaslisandAndreas Wachter 66eaf7bd2c Adds Radicle destination (#413)
* Adds Radicle destination

This destination allows mirroring repositories into the storage of a local
[Radicle](https://radicle.network) node.

Requires `git` + Radicle Command Line Interface (CLI) tools installed,
i.e. `rad` and `git-remote-rad` binaries. See https://radicle.network/install .

The repository is initialized with `rad init` on the first run and pushed
through the `git-remote-rad` helper afterwards, so the refs are signed with
the key of the Radicle profile.

Because every backup run works on a fresh temporary clone, each run has to
find the Repository ID (RID) created for an upstream on an earlier run:
every mirror records its upstream URL in a "dev.gickup" extension of the
signed Radicle identity document `payload`, and the storage is scanned for a
repository whose recorded source matches and whose refs are signed by this
profile's key — comparable to the existence lookups the forge destinations
make against their APIs, just against local storage. (Local-first, For The Win!)

Unlike other forge destinations we cannot use go-git for pushing,
because Radicle repositories are only reachable through the `git-remote-rad`
remote helper, which go-git does not support. All storage-touching
operations therefore shell out to the system `git` and `rad` binaries, so
identity creation and signed-refs handling stay inside the Radicle tooling.

Signed-off-by: Yorgos Saslis <yorgos.work@proton.me>

* fixup! Adds Radicle destination

Signed-off-by: Yorgos Saslis <yorgos.work@proton.me>

* fixup! Adds Radicle destination

Signed-off-by: Yorgos Saslis <yorgos.work@proton.me>

---------

Signed-off-by: Yorgos Saslis <yorgos.work@proton.me>
Co-authored-by: Andreas Wachter <andreas.wachter@buddyspencer.monster>
2026-07-29 15:41:13 +02:00
Andreas Wachter 029f4e9fb4 extend ~ to home directory (#404) 2026-06-22 09:45:16 +02:00
Bernat MutandAndreas Wachter d5caefb310 Feature/discussion 391 add GitHub app support (#396)
* feat: Add GitHub App support for authentication in configuration and code

* feat: Enhance GitHub App support by updating repository fetching logic and authentication method

* test: Update dependencies, enhance configuration handling, and add GitHub client tests

- Updated dependencies in go.sum to latest versions for improved stability and security.
- Added a defer statement to close the configuration file in readConfigFile function to prevent resource leaks.
- Implemented unit tests for GenRepo's HasAppAuth method to validate authentication conditions.
- Created new tests for the GitHub client to verify behavior with and without authentication tokens, including handling of invalid and missing private key files.

* feat: Exclude G101 gosec warning for github/github_test.go

* fixed go.mod and go.sum

---------

Co-authored-by: Andreas Wachter <andreas.wachter@buddyspencer.monster>
2026-06-16 14:12:59 +02:00
Bernat Mut fa7816143d feat: Add support for S3 AWS Credentials Chain (#394)
* feat: Add support for S3 static credentials configuration

- Updated S3Repo struct to include UseStaticCreds field
- Refactored credential retrieval logic in UploadDirToS3 and DeleteObjectsNotInRepo functions
- Added tests for S3Repo and credential retrieval functions

* docs: add changes for use_static_creds

* fix: lint issues

* fix: exclude gosec sanitized file path
2026-06-02 21:10:28 +02:00
Sjors Holtrop 49e1a956ce S3 dest: Tag backup objects with original repo's URL (#377)
* beginning of user tags implementation

* make s3 src URL tagging configurable

* fix formatting

* actually fix formatting
2026-04-16 07:11:36 +02:00
Andreas Wachter e6999418e2 Fix linting (#372) 2026-04-05 21:39:20 +02:00
Gary Thomas cfd1b6ea04 Implement azure blob destination with SAS url 2025-10-26 22:04:44 +00:00
Andreas Wachter 3f831c33b3 Revert "upgraded go-git to v6 (#340)"
This reverts commit 6f2bfc2419.
2025-07-24 06:55:34 +02:00
Andreas Wachter 6f2bfc2419 upgraded go-git to v6 (#340) 2025-07-03 09:06:48 +02:00
Andreas Wachter 158bcc1b5c switch from gopkg.in/yaml.v3 to github.com/goccy/go-yaml (#330)
* switch from https://github.com/go-yaml/yaml to https://github.com/goccy/go-yaml

* change to ubuntu latest

* update lint
2025-06-06 12:57:52 +02:00
yubazhandy.bazhenov 97c26eef7b add backup creation date directory in s3 (#320)
* add backup creation date directory in s3

* fix var name

---------

Co-authored-by: y.bazhenov <y.bazhenov@arenadata.io>
2025-04-29 18:40:04 +02:00
Sjors Holtrop 533b98ba0c Make S3 backups bare (#316) 2025-04-28 11:58:00 +02:00
Sjors Holtrop 36fd4fa6c0 Improve error output. Make empty-remote a warning instead of an error (#310) 2025-04-03 00:32:13 +09:00
Andreas Wachter 377378ce3a add Apprise (#309)
* added apprise

* fixed yaml type, check for / at the end of url

* return error message

* adapted example config and gickup_spec

* re-format spec

* Revert "re-format spec"

This reverts commit b938a0587e.

* fix spec
2025-04-02 11:29:40 +02:00
Sjors Holtrop 00d278094a add support for specifying storageclass for S3 dest (#307) 2025-04-01 08:13:42 +02:00
Andreas Wachter 69ddf8b24a the token for s3 is not always needed, for example in minio (#306) 2025-03-26 09:13:46 +01:00
Sjors Holtrop 6be0214ee3 add zip support for s3 destination (#304) 2025-03-25 19:16:01 +01:00
sjorsholtrop-ritense 57a38a4d8f Fix bitbucket source, add temp token support to s3 dest (#302) 2025-03-23 15:05:12 +01:00
Andreas Wachter 976b457a5c added exit code when an error occured (#289) 2025-01-05 08:52:11 +01:00
Andreas Wachter 3cd914a4e1 Add s3 (#259)
* added s3 add destination

* read environment variables for s3 buckets

* adapted example config

* added debug message

* added s3 add destination

* read environment variables for s3 buckets

* adapted example config

* added debug message
2024-08-26 13:46:16 +02:00
Andreas Wachter 0e76cf9481 enable push to gitlab (#233) 2024-04-16 13:34:05 +02:00
Andreas Wachter 6a293dd625 implemented mirror using gickup and not giteas mirror function (#225)
* implemented mirror using gickup and not giteas mirror function

* added "mirror" to gogs

* push to gogs

* mirror is now a struct

* move deprecation notice, no need to spam
2024-04-15 07:10:49 +02:00
Andreas Wachter 61d5070f50 fixed some backup path issues and reload issues (#220)
* fixed some backup path issues and reload issues

* removed all chdirs
2024-04-04 07:31:28 +02:00
Andreas Wachter 54feabae23 check if config is null (#223) 2024-04-03 16:32:55 +02:00
Andreas Wachter dca5a55a8a add cron to all files if necessary (#211) 2024-02-27 07:01:04 +01:00
Andreas Wachter 8de9d0f16f added git lfs for mirrors (#204)
* added git lfs for mirrors

* added openssh-client to ubuntu image

* working push on all branches

* fetch after clone and before pull to get all branches

* checkout all branches is not needed

* fix fetch
2024-02-19 08:42:35 +01:00
Andreas Wachter 76bcf763aa Issue 200 (#203)
* force fetch

* do not fetch

* log push

* log clone too
2024-01-29 12:31:36 +01:00
Andreas Wachter acbb331450 get gitlab user (#201) 2024-01-25 07:40:36 +01:00
Andreas Wachter d1568d4545 Reload config (#199)
* reload on config changes

* handle prometheus metrics

* compare config structs

* create seperate object for logging
2024-01-09 14:43:51 +01:00
Andreas Wachter a70f9c939f Revert "Reload config (#196)" (#198)
This reverts commit 61cac5dda6.
2024-01-09 14:33:28 +01:00
Andreas Wachter 61cac5dda6 Reload config (#196)
* reload on config changes

* handle prometheus metrics

* compare config structs
2024-01-04 12:54:12 +01:00
Andreas Wachter fecb4040e6 added sublogger to gitea (#178)
* added sublogger to gitea

* implemented the rest of the subloggers
2023-10-04 10:55:24 +02:00
Andreas Wachter f8ad43bb29 Multiple branches (#165)
* added github mirror functionality

* create temporary directory to clone into

* added onedev as destination

* added sourcehut

* add new examples

* added push of all branches, autocreation of repos on sourcehut

* push everything

* sourcehut visibility fix
2023-08-16 14:04:59 +02:00
Andreas Wachter f468f48ba1 mirror functions (#164)
* added github mirror functionality

* create temporary directory to clone into

* added onedev as destination

* added sourcehut

* add new examples
2023-08-15 18:13:21 +02:00
Andreas Wachter 2e75d80540 Push notification not on all runs (#152)
* added gotify and ntfy to notify

* added new example config

* use push config in all configs
2023-05-16 09:39:46 +02:00
Andreas Wachter b2da20028e added gotify and ntfy to notify (#147) 2023-05-02 16:40:56 +02:00
Andreas Wachter 3009366b05 set warning if no destinations are configured 2023-03-03 07:26:35 +01:00
Andreas Wachter 3d125133ef implement filters for github (#137)
* implement filters for github

* add filter to exclude archived repositories

* add filter for gitea/forgejo

* gogs filter option

* fix error log

* include gitlab filters

* fix logging

* parse duration

* filters for onedev and sourcehut

* adapted conf.example.yml
2023-02-20 16:05:01 +01:00
Andreas Wachter f61574bf9c improved prometheus metrics (#134)
* improved prometheus metrics

* change RepoTime to gauge

* fix gitea, only set metrics if ran
2023-02-10 06:07:11 +01:00
Andreas Wachter 2ec9d55f82 added visibility, new create org options and wiki support (#128)
* added visibility, new create org options and wiki support

* added gogs

* log error instead of fatal
2022-12-09 15:45:13 +01:00
Andreas Wachter fa2dfd4434 Sourcehut (#123)
* added createorg to gogs

* added sourcehut capabilities

* fix variable names

* added sourcehut to readme
2022-11-16 08:09:33 +01:00
Andreas Wachter 527e740ed7 check if config is nil (#118) 2022-10-18 10:34:11 +02:00
Andreas Wachter 041a5a88b7 handle multiple configs (#114)
* handle multiple configs

* upgrade golangci_lint_version

* SnakeCase and replaces ioutil with os
2022-10-03 19:20:19 +02:00
Andreas Wachter 6461754630 added onedev functionality (#111)
* added onedev functionality

* go mod tidy
2022-08-11 21:31:03 +02:00
Andreas Wachter 3ae5a3a463 backup any repo (#110)
* added any module

* update dependencies

* clone local repos too

* fixed the separator and adjusted example config and README.md

* go mod tidy

* ran gofumpt and goimports

* cleaned up a bit and implemented timeformat as environment variable
2022-07-18 13:59:20 +02:00