diff options
-rw-r--r-- | forge/build/git.scm | 23 | ||||
-rw-r--r-- | forge/forge.scm | 57 |
2 files changed, 43 insertions, 37 deletions
diff --git a/forge/build/git.scm b/forge/build/git.scm index e699822..2e3dc41 100644 --- a/forge/build/git.scm +++ b/forge/build/git.scm @@ -18,7 +18,7 @@ ;;; <https://www.gnu.org/licenses/>. (define-module (forge build git) - #:use-module ((guix build git) #:prefix guix-build:) + #:use-module (rnrs exceptions) #:use-module (guix build utils) #:use-module (guix store) #:use-module (guix utils) @@ -34,16 +34,21 @@ ;;; Code: -(define* (download-git-to-store store name url commit #:key (git-command "git")) - "Download COMMIT from git repository from URL to STORE under NAME -and return store path." +(define (download-git-to-store store name url branch) + "Download BRANCH of git repository from URL to STORE under NAME and +return store path. git and certificates should be in the environment." (call-with-temporary-directory (lambda (directory) - (unless (with-output-to-port (current-error-port) - (lambda () - (guix-build:git-fetch url commit directory - #:git-command git-command))) - (error "Error fetching git repository" url commit)) + (with-directory-excursion directory + (guard (condition ((invoke-error? condition) + (format (current-error-port) + "git-fetch: '~a~{ ~a~}' failed with exit code ~a~%" + (invoke-error-program condition) + (invoke-error-arguments condition) + (invoke-error-exit-status condition)) + (exit #f))) + (invoke "git" "clone" "--quiet" "--depth" "1" "--branch" branch url ".")) + (delete-file-recursively ".git")) (add-to-store store name #t "sha256" directory)))) (define latest-git-checkout diff --git a/forge/forge.scm b/forge/forge.scm index 11a1e92..d3bb879 100644 --- a/forge/forge.scm +++ b/forge/forge.scm @@ -22,6 +22,7 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (ice-9 match) + #:use-module ((gnu packages certs) #:select (nss-certs)) #:use-module (gnu packages ci) #:use-module ((gnu packages gnupg) #:select (guile-gcrypt)) #:use-module ((gnu packages guile) #:select (guile-3.0 guile-zlib)) @@ -198,35 +199,35 @@ derivation to run." (guix profiles)) #:select? import-module?) (with-extensions (list guile-gcrypt guile-zlib) - #~(begin - (use-modules (forge build git) - (guix derivations) - (guix gexp) - (guix monads) - (guix store) - (rnrs exceptions)) + (with-packages (list git-minimal nss-certs) + #~(begin + (use-modules (forge build git) + (guix derivations) + (guix gexp) + (guix monads) + (guix store) + (rnrs exceptions)) - (parameterize ((%daemon-socket-uri #$guix-daemon-uri)) - (with-store store - (guard (condition ((store-protocol-error? condition) - (exit #f))) - (format (current-error-port) - "Built ~a successfully~%" - (run-with-store store - (mlet* %store-monad ((git-checkout (latest-git-checkout #$git-checkout-name - #$git-repository - #$git-branch - #:git-command #$(file-append git-minimal "/bin/git"))) - (tests-drv (gexp->derivation #$derivation-name - (#$gexp-producer git-checkout) - #:guile-for-build (read-derivation-from-file - #$(raw-derivation-file - (with-store store - (package-derivation store guile-3.0)))) - #:substitutable? #f))) - (mbegin %store-monad - (built-derivations (list tests-drv)) - (return (derivation->output-path tests-drv))))))))))))) + (parameterize ((%daemon-socket-uri #$guix-daemon-uri)) + (with-store store + (guard (condition ((store-protocol-error? condition) + (exit #f))) + (format (current-error-port) + "Built ~a successfully~%" + (run-with-store store + (mlet* %store-monad ((git-checkout (latest-git-checkout #$git-checkout-name + #$git-repository + #$git-branch)) + (tests-drv (gexp->derivation #$derivation-name + (#$gexp-producer git-checkout) + #:guile-for-build (read-derivation-from-file + #$(raw-derivation-file + (with-store store + (package-derivation store guile-3.0)))) + #:substitutable? #f))) + (mbegin %store-monad + (built-derivations (list tests-drv)) + (return (derivation->output-path tests-drv)))))))))))))) (define forge-service-type (service-type |