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

From: Vagrant Cascadian <[email-masked]>
Date: Sat, 01 May 2021 19:23:17 -0700

On 2021-01-22, Vagrant Cascadian wrote:
> 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

Still basically the same story with 1.3.0rc1, in some cases this test
fails, but I haven't consistently figured out what triggers it.

> 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