Subject: bug#46038: guix 1.2.0 test failure: channels-news, one entry

From: Vagrant Cascadian <[email-masked]>
Date: Fri, 22 Jan 2021 08:56:46 -0800

I've uploaded guix 1.2.0 built against guile-2.2 to Debian, and while it
builds fine on the official buildd.debian.org infrastructure, on amd64
and arm64 the "channel-news, one entry" test from tests/channels.scm
fails on tests.reproducible-builds.org.

There are likely a few differences in the two build environments,
possibly including network access.

Does the "channel-news, one entry" test indirectly depend on network or
bootstrap binaries?

Could a difference in locale related variables affect the result of the
test (e.g. LANGUAGE=en:en_US vs. LANGUAGE unset, LC_ALL unset
vs. LC_ALL=C or LC_ALL=C.UTF-8)?

  https://tests.reproducible-builds.org/debian/rb-pkg/experimental/amd64/guix.html

test-name: channel-news, one entry
location: /build/1st/guix-1.2.0/tests/channels.scm:324
source:
+ (test-assert
+   "channel-news, one entry"
+   (with-temporary-git-repository
+     directory
+     `((add ".guix-channel"
+            ,(object->string
+               '(channel (version 0) (news-file "news.scm"))))
+       (commit "first commit")
+       (add "src/a.txt" "A")
+       (commit "second commit")
+       (tag "tag-for-first-news-entry")
+       (add "news.scm"
+            ,(lambda (repository)
+               (let ((previous
+                       (reference-name->oid repository "HEAD")))
+                 (object->string
+                   `(channel-news
+                      (version 0)
+                      (entry (commit ,(oid->string previous))
+                             (title (en "New file!") (eo "Nova dosiero!"))
+                             (body (en "Yeah, a.txt."))))))))
+       (commit "third commit")
+       (add "src/b.txt" "B")
+       (commit "fourth commit")
+       (add hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>
Initialized empty Git repository in /tmp/guix-directory.6SfxEu/.git/
[master (root-commit) 8b5d0e8] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 .guix-channel
[master b8dd467] second commit
 1 file changed, 1 insertion(+)
 create mode 100644 src/a.txt
[master 324d7bc] third commit
 1 file changed, 1 insertion(+)
 create mode 100644 news.scm
[master 2cd62e1] fourth commit
 1 file changed, 1 insertion(+)
 create mode 100644 src/b.txt
[master d0e63c3] fifth commit
 1 file changed, 1 insertion(+), 1 deletion(-)
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>
Initialized empty Git repository in /tmp/guix-directory.M2UpCv/.git/
[master (root-commit) f84a5c3] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
[master b1e63da] second commit
 1 file changed, 1 insertion(+)
 create mode 100644 b.scm
"news.scm"
+            ,(lambda (repository)
+               (let ((second
+                       (commit-id
+                         (find-commit repository "second commit")))
+                     (previous
+                       (reference-name->oid repository "HEAD")))
+                 (object->string
+                   `(channel-news
+                      (version 0)
+                      (entry (commit ,(oid->string previous))
+                             (title (en "Another file!"))
+                             (body (en "Yeah, b.txt.")))
+                      (entry (tag "tag-for-first-news-entry")
+                             (title (en "Old news.") (eo "Malnova?oj."))
+                             (body (en "For a.txt"))))))))
+       (commit "fifth commit"))
+     (with-repository
+       directory
+       repository
+       (define (find-commit* message)
+         (oid->string
+           (commit-id (find-commit repository message))))
+       (let ((channel
+               (channel
+                 (url (string-append "file://" directory))
+                 (name 'foo)))
+             (commit1 (find-commit* "first commit"))
+             (commit2 (find-commit* "second commit"))
+             (commit3 (find-commit* "third commit"))
+             (commit4 (find-commit* "fourth commit"))
+             (commit5 (find-commit* "fifth commit")))
+         (and (null? (channel-news-for-commit channel commit2))
+              (lset= string=?
+                     (map channel-news-entry-commit
+                          (channel-news-for-commit channel commit5))
+                     (list commit2 commit4))
+              (lset= equal?
+                     (map channel-news-entry-title
+                          (channel-news-for-commit channel commit5))
+                     '((("en" . "Another file!"))
+                       (("en" . "Old news.") ("eo" . "Malnova?oj."))))
+              (lset= string=?
+                     (map channel-news-entry-commit
+                          (channel-news-for-commit channel commit3))
+                     (list commit2))
+              (lset= string=?
+                     (map channel-news-entry-commit
+                          (channel-news-for-commit channel commit3 commit1))
+                     (list commit2))
+              (lset= string=?
+                     (map channel-news-entry-commit
+                          (channel-news-for-commit channel commit5 commit3))
+                     (list commit4))
+              (lset= string=?
+                     (map channel-news-entry-commit
+                          (channel-news-for-commit channel commit5 commit1))
+                     (list commit4 commit2))
+              (lset= equal?
+                     (map channel-news-entry-tag
+                          (channel-news-for-commit channel commit5 commit1))
+                     '(#f "tag-for-first-news-entry")))))))
actual-value: #f
result: FAIL

live well,
  vagrant