aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSarah Morgensen <iskarian@mgsn.dev>2021-09-19 22:20:49 -0700
committerLeo Famulari <leo@famulari.name>2021-12-24 16:32:25 -0500
commitc90f73f8164a209884471f1c41948d0556e6c39e (patch)
tree47f5af64b0113ee6b6f997a0e3ffb723ab7ac5bc
parentd0050ea8ad1c32d94cf5ba6725a0fc961bb23f38 (diff)
downloadguix-c90f73f8164a209884471f1c41948d0556e6c39e.tar
guix-c90f73f8164a209884471f1c41948d0556e6c39e.tar.gz
build-system/go: Initialize build cache from input packages.
* guix/build/go-build-system.com (setup-go-environment): Set GOCACHE to a location within the build directory. Union "/var/cache/go/build" input directories to initialize the cache. Generate "trim.txt" within the cache, with the current time. Signed-off-by: Leo Famulari <leo@famulari.name>
-rw-r--r--guix/build/go-build-system.scm26
1 files changed, 23 insertions, 3 deletions
diff --git a/guix/build/go-build-system.scm b/guix/build/go-build-system.scm
index 4768ee8562..7f25e05d0d 100644
--- a/guix/build/go-build-system.scm
+++ b/guix/build/go-build-system.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
;;; Copyright © 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -138,9 +139,28 @@ of the package being built and its dependencies, and GOBIN, which determines
where executables (\"commands\") are installed to. This phase is sometimes used
by packages that use (guix build-system gnu) but have a handful of Go
dependencies, so it should be self-contained."
- ;; The Go cache is required starting in Go 1.12. We don't actually use it but
- ;; we need it to be a writable directory.
- (setenv "GOCACHE" "/tmp/go-cache")
+ (define (search-input-directories dir)
+ (filter directory-exists?
+ (map (match-lambda
+ ((name . directory)
+ (string-append directory "/" dir)))
+ inputs)))
+
+ ;; Seed the Go build cache with the build caches from input packages.
+ (let ((cache (string-append (getcwd) "/go-build")))
+ (setenv "GOCACHE" cache)
+ (union-build cache
+ (search-input-directories "/var/cache/go/build")
+ ;; Creating all directories isn't that bad, because there are
+ ;; only ever 256 of them.
+ #:create-all-directories? #t
+ #:log-port (%make-void-port "w"))
+
+ ;; Tell Go that the cache was recently trimmed, so it doesn't try to.
+ (call-with-output-file (string-append cache "/trim.txt")
+ (lambda (port)
+ (format port "~a" (current-time)))))
+
;; Using the current working directory as GOPATH makes it easier for packagers
;; who need to manipulate the unpacked source code.
(setenv "GOPATH" (getcwd))