[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#30572] [PATCH 1/7] tests: Add tests for "guix pack".
From: |
Ludovic Courtès |
Subject: |
[bug#30572] [PATCH 1/7] tests: Add tests for "guix pack". |
Date: |
Thu, 08 Mar 2018 22:05:41 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.3 (gnu/linux) |
Howdy,
Chris Marusich <address@hidden> skribis:
> address@hidden (Ludovic Courtès) writes:
>
>>> +# Use --dry-run because it takes too long to actually build everything.
>>> +GUIX_BUILD_OPTIONS="--no-substitutes --dry-run"
>>> +export GUIX_BUILD_OPTIONS
>>> +
>>> +# Build a tarball.
>>> +guix pack coreutils
>>
>> It would be ideal if we could actually build something, but built
>> something cheap.
>>
>> The way we do that in those tests is by:
>>
>> 1. Using the ‘guile-bootstrap’ package as an example, under the
>> assumption that it’s already available, does not require
>> networking, and is built in one or two seconds.
>>
>> 2. Using ‘--bootstrap’ or a similar option so that the derivations use
>> ‘guile-bootstrap’ instead of ‘guile-final’, for the same reason.
>>
>> See for instance tests/guix-package.sh.
>>
>> Would you be willing to try something along these lines?
>
> That's a good idea! I tried it (see attached patch). Unfortunately,
> even after adding a --bootstrap option, "guix pack" tries to build many
> things, so tests/guix-pack.sh takes hours to run the first time you try
> it (it ran for 2 hours on my laptop and then failed because gcc failed
> to build for unrelated reasons):
[...]
> It's quicker after the first time, but it's a hefty one-time cost.
>
> I think so many things need to be built because "guix pack" creates the
> pack using a gexp that uses packages. For example, instead of executing
> "tar" by looking it up in the current environment (e.g. via system*), it
> builds the "tar" package and executes the resulting "tar" program in the
> gexp that creates the pack. Therefore, even though we do use
> guile-bootstrap to run the gexp, Guix still need to build tar and all of
> its dependencies, so the test takes hours to run. Can we do better?
Ah indeed, I hadn’t thought about tar.
We could arrange for ‘--bootstrap’ to use:
(search-bootstrap-binary "tar")
instead of the ‘tar’ package. We could do the same for ‘xz’. (You’d
need a ‘trivial-build-system’ package that copies these two binaries in
$out/bin.)
How does that sound?
> Maybe we could move tests like these to a "long-running" test target
> (e.g., "make check-long-running"). I think this could work, but I would
> much rather just write tests that run quickly.
We could do that but let’s see if we can avoid it for now. :-)
> Maybe we could rewrite "guix pack" so that it uses system* to run tar.
I’d rather not hinder reproducibility “just” for a test.
> Finally, maybe we could stick with running the tests in "dry-run" mode.
> I'm in favor of this idea, but obviously I'm a little biased. :-)
Well, that would work too, indeed. :-)
> From 72e672e795fe8f4d67f7e1805ba8b88c874f3fb1 Mon Sep 17 00:00:00 2001
> From: Chris Marusich <address@hidden>
> Date: Tue, 20 Feb 2018 02:17:54 +0100
> Subject: [PATCH 1/7] tests: Add tests for "guix pack".
>
> * guix/scripts/pack.scm (%options): Add the --bootstrap option.
> (show-help): Document it.
> (guix-pack): Honor it.
> * doc/guix.texi (Invoking guix pack): Document the new --bootstrap
> option.
> * tests/guix-pack.sh: New file.
> * Makefile.am (SH_TESTS): Add guix-pack.sh.
> * gnu/packages/package-management.scm (guix) <inputs>: Add util-linux.
[...]
> +# Build a tarball with a symlink.
> +the_pack="$(guix pack --bootstrap -S /opt/gnu/bin=bin guile-bootstrap)"
In general we use backticks instead of $(…) to stick to POSIX shells.
> +# Build a tarball pack of cross-compiled software.
> +guix pack --bootstrap --target=arm-unknown-linux-gnueabihf guile-bootstrap
This one is a little bit too costly (plus it wouldn’t work because
guile-bootstrap is not actually cross-compilable), so I’d suggest add
‘--dry-run’ and removing ‘-bootstrap’. :-)
HTH!
Ludo’.