360 Commits
Author SHA1 Message Date
KismetDev 611f638070 Pass git credentials through a credential helper instead of http.extraHeader (#443)
git lfs adds http.extraHeader to object downloads, which already carry an
Authorization header from the LFS batch response. gitlab.com rejects the
duplicate header with 400, so no LFS objects were downloaded since #425.
2026-09-16 07:53:56 +02:00
Andreas Wachter ef37e12c6c added test and fixed the "-C" parameter (#441) v0.10.47 2026-09-13 08:33:56 +02:00
Ryan 3697a140ec Add Winget to distribution packages in README (#440) 2026-09-13 08:32:59 +02:00
Andreas Wachter 64e81c3b14 added lfs to s3 (#437) v0.10.46 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
Danny Sauer 109cc1eda4 fix(sourcehut): keep logging context local to each operation (#435) 2026-09-09 18:34:36 +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
Om Lahore 1774a02416 Check the error when listing GitLab descendant groups (#429)
Both ScanAndCollect calls dropped their error. ScanAndCollect returns
whatever it managed to collect alongside the error, so a failed or
partial ListDescendantGroups left subgroups short without saying so, and
the include/exclude org maps were built from an incomplete list. For
includeorgs that silently drops repos from the backup set.

The GetGroup call seven lines above each of these already logs and
continues on error, so this matches the surrounding code.
2026-09-01 10:11:28 +02:00
Ryan 03eae3beb3 Add Scoop to distribution packages in README (#428) 2026-08-30 16:10:48 +02:00
Andreas Wachter cba438309e add a backdown for gists too (#427) 2026-08-28 16:18:36 +02:00
Andreas Wachter 002be7a6e8 fixed lfs partial backup (#426) 2026-08-28 15:52:10 +02:00
Dmitriy Prikhodko 7d810a4a1b Fix GitHub App authentication for LFS-backed local mirrors (#425)
* fix: use fresh GitHub App auth for LFS mirror updates

* fix: satisfy lint checks
2026-08-19 09:46:36 +02:00
Ryan ed581d75d9 fix GitLab mirroring visibility, URL parsing, and ref pushes (#423) 2026-08-18 20:34:43 +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
Thomas Christlieb c4d33b44f9 Fix 415 pruning old folders does count non repo folders (#420)
* slightly refactor prune function for testing

* add tests for pruning function

* fix keep-Logic: All timestamp-prefixed-Folders will be grouped into one generation to keep.
Fixes #415
Side effect: This will delete all folders `<timestamp>.<anything>` in the repo directory, not only `timestamp.issues`

* correct tests for CI, fix typo

* add test for no pruning needed
2026-08-10 18:46:27 +02:00
dependabot[bot] a7689baf63 Bump github.com/go-git/go-git/v5 from 5.19.1 to 5.19.2 (#422)
Bumps [github.com/go-git/go-git/v5](https://github.com/go-git/go-git) from 5.19.1 to 5.19.2.
- [Release notes](https://github.com/go-git/go-git/releases)
- [Changelog](https://github.com/go-git/go-git/blob/main/HISTORY.md)
- [Commits](https://github.com/go-git/go-git/compare/v5.19.1...v5.19.2)

---
updated-dependencies:
- dependency-name: github.com/go-git/go-git/v5
  dependency-version: 5.19.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 18:41:09 +02:00
Thomas ChristliebandThomas Christlieb 2a2fd35ae3 fix #414: path.Dir() does not work on windows-style paths. (#418)
Co-authored-by: Thomas Christlieb <thomas.christlieb@aptean.com>
2026-07-30 09:55:27 +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
Michael HerberthandMichael Herberth dfee42bf30 Add configurable GitHub Enterprise URL support (#411)
Co-authored-by: Michael Herberth <michael.herberth@sarstedt.com>
2026-07-24 20:54:45 +02:00
dependabot[bot] 88d9c3981f Bump golang.org/x/crypto from 0.51.0 to 0.52.0 (#410)
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.51.0 to 0.52.0.
- [Commits](https://github.com/golang/crypto/compare/v0.51.0...v0.52.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.52.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-15 21:18:51 +02:00
Jonathan Van Eenwyk 7dc1fa0d72 fix: gitlab organization filtering not including nested subgroups (#409)
Gitlab supports nesting subgroups up to 20 levels deep. However, these
two filters were actually applied to projects in the provided
organization/group as well as projects in any immediate subgroup, but
not to projects in more deeply nested subgroups. Presumably, the
original intention of these filters was that the entire
organization/group would be either included or excluded, not only
projects in the group and its immediate subgroups.

Fix by using ListDescendantGroups() to get all descendant/nested groups.
Also, use gitlab.ScanAndCollect() to handle paginated results.
2026-07-08 07:58:58 +02:00
Andreas Wachter e585cdea3e updated documentation (#405) v0.10.45 2026-06-22 10:59:37 +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
Hildebrand Soethoudt c8a812e5c3 Rework of BitBucket authentication (#402)
* Rework of the BitBucket source authentication:

* Renamed 'user' to 'organization' as it better reflects the bitbucket architecture
* Added email config field, used fetch the workspace repo list with API token auth
* Added error log line in case workspace repo list fetch fails
* go-bitbucket version bump to 0.10.0

* fixed linting error

* ran go mod tidy to cleanup unused deps
2026-06-12 08:23:29 +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
Jan Loewe ee95e89de5 Fix unintentional data loss when zip is false and keep greater than or one (#399) 2026-06-02 21:00:20 +02:00
dependabot[bot] 5d3622e30f Bump github.com/go-git/go-git/v5 from 5.19.0 to 5.19.1 (#397)
Bumps [github.com/go-git/go-git/v5](https://github.com/go-git/go-git) from 5.19.0 to 5.19.1.
- [Release notes](https://github.com/go-git/go-git/releases)
- [Changelog](https://github.com/go-git/go-git/blob/main/HISTORY.md)
- [Commits](https://github.com/go-git/go-git/compare/v5.19.0...v5.19.1)

---
updated-dependencies:
- dependency-name: github.com/go-git/go-git/v5
  dependency-version: 5.19.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-01 16:35:45 +02:00
Bernat Mut 617acfda96 chore: bump action versions in workflows to latest stable releases (#395)
* chore: bump action versions in workflows to latest stable releases

* fix: add revive var-naming exclusion for zip_test.go

* fix: correct formatting and structure in .goreleaser.yml

* fix: ensure fetch-depth is set for actions/checkout in workflow

* fix: update GoReleaser conditions for tag-based releases in workflow
2026-05-18 11:17:28 +02:00
Andreas Wachter 97c1d192bd fixed exclude org race condition (#393) v0.10.44 2026-05-14 19:11:11 +02:00
Andreas Wachter d3fd3e4717 go mod tidy v0.10.43 2026-05-13 10:10:42 +02:00
Hildebrand Soethoudt 5f03e6cfa6 updated ktrysmt/go-bitbucket dependency to v0.9.100, that includes the BitBucket API deprecation fix as part of release v0.9.96 (#389) 2026-05-13 10:04:32 +02:00
dependabot[bot] 17c2361e3d Bump github.com/go-git/go-git/v5 from 5.18.0 to 5.19.0 (#387) 2026-05-11 18:14:58 +02:00
Andreas Wachter 3369a9fa37 fix gitlab format issue (#386) v0.10.42 2026-05-04 12:15:38 +02:00
Andreas Wachter b34eae7ec8 updated ktrysmt/go-bitbucket v0.10.41 2026-04-25 09:56:52 +02:00
ShalokShalom f8e569f780 Add Forgejo/Codeberg (#382) 2026-04-20 17:19:40 +02:00
Andreas Wachter 019c2fdee7 update go 2026-04-20 10:24:20 +02:00
Andreas Wachter 9daf4cef3d updated bitbucket and gitlab code, updated dependencies (#381) 2026-04-20 10:18:02 +02:00
dependabot[bot] 9f4d798ee1 Bump github.com/go-git/go-git/v5 from 5.17.1 to 5.18.0 (#379) v0.10.40 2026-04-18 13:57:57 +02:00
Andreas Wachter 1ba40c996d unify docker.yml (#378) 2026-04-16 18:59:53 +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 036923b810 added email header to ntfy (#376) 2026-04-09 07:30:36 +02:00
Andreas Wachter de4f262e1f add additional tests (#374)
* add additional tests

* fix linter
2026-04-08 16:32:34 +02:00
Andreas Wachter 4bbe669b71 fix findings from 372 (#373) 2026-04-06 11:34:05 +02:00
Andreas Wachter e6999418e2 Fix linting (#372) 2026-04-05 21:39:20 +02:00
Andreas Wachter 8214115952 Merge pull request #369 from cooperspencer/update_sourcehut
do not use the api anymore but switch to graphql
2026-04-05 19:33:34 +02:00
Andreas Wachter ff10d30ed3 Merge pull request #368 from cooperspencer/dependabot/go_modules/github.com/go-git/go-git/v5-5.17.1
Bump github.com/go-git/go-git/v5 from 5.16.5 to 5.17.1
2026-03-31 13:49:33 +02:00
Andreas Wachter 45c03a96f1 do not use the api anymore but switch to graphql 2026-03-31 13:40:49 +02:00
dependabot[bot] 2fb0bc23f0 Bump github.com/go-git/go-git/v5 from 5.16.5 to 5.17.1
Bumps [github.com/go-git/go-git/v5](https://github.com/go-git/go-git) from 5.16.5 to 5.17.1.
- [Release notes](https://github.com/go-git/go-git/releases)
- [Commits](https://github.com/go-git/go-git/compare/v5.16.5...v5.17.1)

---
updated-dependencies:
- dependency-name: github.com/go-git/go-git/v5
  dependency-version: 5.17.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-30 17:15:46 +00:00