Hi Jason, Jason Conroy <jcon...@tscripta.net> writes:
> The gitea and forgejo client CLIs have an option called "dump-repo"[1] > which appears relevant. The call requires a hostname and user creds, > so > I don't think it's specifically a server-side tool. Unfortunately, it > tends to hammer the backend service with lots of API calls[2]. Also, > judging from the code[3], it seems to have no concept of incremental > operation: if the export fails for any reason (such as backend > timeout), > the client just deletes the partially-written archive. OK, sounds like brute-force approach. > More recently, Forgejo has been developing an on-disk format for data > dumps to/from various kinds of forges. It's called F3 ("Friendly Forge > Format") [4] and there exists a reference implementation[5] that can > write the archives and talk to forgejo backends. Its project page > states > that the tool is designed for "mirroring", which suggests that > efficient > incremental syncs might be possible. Nice! It looks like the right kind of tool. I wanted to give it a try so I ran “guix import go code.forgejo.org/f3/gof3/v3”, tweaked the result (file attached), but then I’m stuck with a build failure of go-github-com-davidmz-go-pageant-1.0.2. If Go-savvy people are reading this, your guidance is welcome! > P.S. Although my opinion as a lurker won't count for much, :) I > support > this GCD. Up-thread, some discussions on ease-of-use ("it takes N > steps > to do it this way, vs. N+2 steps that way") make the tacit assumption > that the user handles every step correctly. But in the real world > where > users make mistakes, I see value in a webservice-based workflow that > provides instantaneous and very visible feedback to users, as compared > to an asynchronous workflow that's driven by emails and several > loosely-coupled services. I agree. Thanks for sharing your views and your findings on backup/mirroring! Ludo’.
(define-module (gnu packages f3) #:use-module (guix) #:use-module (guix git-download) #:use-module (guix build-system go) #:use-module (gnu packages golang) #:use-module (gnu packages golang-build) #:use-module (gnu packages golang-check) #:use-module (gnu packages golang-xyz) #:use-module (gnu packages golang-web) #:use-module ((guix licenses) #:prefix license:)) (define-public go-github-com-42wim-httpsig (package (name "go-github-com-42wim-httpsig") (version "1.2.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/42wim/httpsig") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0r6q3g0ghccnvqsw7g3g18s710q8haq5vzpvhrb48vmbcj0pdyn8")))) (build-system go-build-system) (arguments (list #:import-path "github.com/42wim/httpsig")) (propagated-inputs (list go-golang-org-x-crypto)) (home-page "https://github.com/42wim/httpsig") (synopsis "httpsig") (description "This package implements HTTP request and response signing and verification. Supports the major MAC and asymmetric key signature algorithms. It has several safety restrictions: One, none of the widely known non-cryptographically safe algorithms are permitted; Two, the RSA SHA256 algorithms must be available in the binary (and it should, barring export restrictions); Finally, the library assumes either the Authorizationn or Signature headers are to be set (but not both).") (license license:bsd-3))) (define-public go-github-com-davidmz-go-pageant (package (name "go-github-com-davidmz-go-pageant") (version "1.0.2") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/davidmz/go-pageant") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0b333bnzi8wncakff7b890gg4md9pcbhs9fdv5bhh68r5pm2dz41")))) (build-system go-build-system) (arguments (list #:import-path "github.com/davidmz/go-pageant")) (propagated-inputs (list go-golang-org-x-crypto)) (home-page "https://github.com/davidmz/go-pageant") (synopsis #f) (description "Package pageant provides an interface to @code{PyTTY} pageant.exe utility. This package is windows-only.") (license license:expat))) (define-public go-github-com-santhosh-tekuri-jsonschema (package (name "go-github-com-santhosh-tekuri-jsonschema") (version "6.0.1") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/santhosh-tekuri/jsonschema") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "0681b359f30f9pkyi4rl1k0rq8w83mn25n323l4lis61f2d2kizy")))) (build-system go-build-system) (arguments (list #:import-path "github.com/santhosh-tekuri/jsonschema/v6" #:unpack-path "github.com/santhosh-tekuri/jsonschema")) (propagated-inputs (list go-golang-org-x-text go-github-com-dlclark-regexp2)) (home-page "https://github.com/santhosh-tekuri/jsonschema") (synopsis "jsonschema v6.0.0") (description "see @@url{https://pkg.go.dev/github.com/santhosh-tekuri/jsonschema/v6,godoc} for examples.") (license license:asl2.0))) (define-public go-gitlab-com-gitlab-org-api-client-go (package (name "go-gitlab-com-gitlab-org-api-client-go") (version "0.127.0") (source (origin (method git-fetch) (uri (git-reference (url "https://gitlab.com/gitlab-org/api/client-go.git") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1bhk18sazvgpii5ahpi9jn94pgy5kqw3qgsw1wbqfg04vjs4g4cf")))) (build-system go-build-system) (arguments (list #:go go-1.22 #:import-path "gitlab.com/gitlab-org/api/client-go")) (propagated-inputs (list go-golang-org-x-time go-golang-org-x-oauth2 go-go-uber-org-mock go-github-com-stretchr-testify go-github-com-hashicorp-go-retryablehttp go-github-com-hashicorp-go-cleanhttp go-github-com-google-go-querystring)) (home-page "https://gitlab.com/gitlab-org/api/client-go") (synopsis "GitLab client-go (former") (description "Copyright 2022, Daniela Filipe Bento.") (license license:asl2.0))) (define-public go-code-forgejo-org-f3-gof3 (package (name "go-code-forgejo-org-f3-gof3") (version "3.10.7") (source (origin (method git-fetch) (uri (git-reference (url "https://code.forgejo.org/f3/gof3.git") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "031hq66diwjiphdghcwm4fhlfmwbnxa1zsc4ccyhsgxn7c3svqzh")))) (build-system go-build-system) (arguments (list ;; #:go go-1.24 #:import-path "code.forgejo.org/f3/gof3/v3" #:unpack-path "code.forgejo.org/f3/gof3")) (propagated-inputs (list go-golang-org-x-crypto go-gitlab-com-gitlab-org-api-client-go go-github-com-urfave-cli-v2 go-github-com-stretchr-testify go-github-com-santhosh-tekuri-jsonschema go-github-com-hashicorp-go-version go-github-com-google-go-cmp go-github-com-davidmz-go-pageant go-github-com-42wim-httpsig)) (home-page "https://code.forgejo.org/f3/gof3") (synopsis "gof3") (description "As a CLI or as a library, @code{GoF3} provides a single operation: mirroring. The origin and destination are designated by the URL of a forge and a path to the resource. For instance, @@code{mirror --from-type forgejo --from https://code.forgejo.org/forgejo/lxc-helpers --to-type F3 --to /some/directory} will mirror a project in a local directory using the F3 format.") (license license:expat)))