~ruther/guix-local

84dda5a9c0772b2507fab3209938ead9da2a3442 — Ludovic Courtès 9 years ago b1edfbc
pack: Use a fixed timestamp in Docker images.

* guix/docker.scm (build-docker-image): Add #:creation-time parameter.
Use SRFI-19 'date->string' instead of 'strftime' et al.
* guix/scripts/pack.scm (docker-image)[build]: Pass #:creation-time to
'build-docker-image'.
2 files changed, 10 insertions(+), 5 deletions(-)

M guix/docker.scm
M guix/scripts/pack.scm
M guix/docker.scm => guix/docker.scm +7 -3
@@ 24,6 24,7 @@
                #:select (delete-file-recursively
                          with-directory-excursion))
  #:use-module (guix build store-copy)
  #:use-module (srfi srfi-19)
  #:use-module (rnrs bytevectors)
  #:use-module (ice-9 match)
  #:export (build-docker-image))


@@ 83,15 84,18 @@
    (rootfs . ((type . "layers")
               (diff_ids . (,(layer-diff-id layer)))))))

(define* (build-docker-image image path #:key closure compressor)
(define* (build-docker-image image path
                             #:key closure compressor
                             (creation-time (current-time time-utc)))
  "Write to IMAGE a Docker image archive from the given store PATH.  The image
contains the closure of PATH, as specified in CLOSURE (a file produced by
#:references-graphs).  Use COMPRESSOR, a command such as '(\"gzip\" \"-9n\"),
to compress IMAGE."
to compress IMAGE.  Use CREATION-TIME, a SRFI-19 time-utc object, as the
creation time in metadata."
  (let ((directory "/tmp/docker-image")           ;temporary working directory
        (closure (canonicalize-path closure))
        (id (docker-id path))
        (time (strftime "%FT%TZ" (localtime (current-time))))
        (time (date->string (time-utc->date creation-time) "~4"))
        (arch (match (utsname:machine (uname))
                ("x86_64" "amd64")
                ("i686"   "386")

M guix/scripts/pack.scm => guix/scripts/pack.scm +3 -2
@@ 219,7 219,7 @@ with COMPRESSOR.  It can be passed to 'docker load'."
           (string-append #$guile-json "/share/guile/site/"
                          (effective-version)))

          (use-modules (guix docker))
          (use-modules (guix docker) (srfi srfi-19))

          (setenv "PATH"
                  (string-append #$tar "/bin:"


@@ 227,7 227,8 @@ with COMPRESSOR.  It can be passed to 'docker load'."

          (build-docker-image #$output #$profile
                              #:closure "profile"
                              #:compressor '#$(compressor-command compressor)))))
                              #:compressor '#$(compressor-command compressor)
                              #:creation-time (make-time time-utc 0 1)))))

  (gexp->derivation (string-append name ".tar."
                                   (compressor-extension compressor))