summaryrefslogtreecommitdiff
path: root/guix/scripts
Commit message (Collapse)AuthorAge
* pack: Add support for the deb format.Maxim Cournoyer2021-06-29
| | | | | | | | | | | * .dir-locals.el (scheme-mode)[gexp->derivation]: Define indentation rule. * guix/scripts/pack.scm (debian-archive): New procedure. (%formats): Register the new deb format. (show-formats): Add it to the usage string. * tests/pack.scm (%ar-bootstrap): New variable. (deb archive with symlinks): New test. * doc/guix.texi (Invoking guix pack): Document it. * NEWS: Add news entry.
* pack: Prevent duplicate files in tar archives.Maxim Cournoyer2021-06-29
| | | | | | | | | | | | | | Tar translate duplicate files in the archive into hard links. These can cause problems, as not every tool support them; for example dpkg doesn't. * gnu/system/file-systems.scm (reduce-directories): New procedure. (file-prefix?): Lift the restriction on file prefix. The procedure can be useful for comparing relative file names. Adjust doc. (file-name-depth): New procedure, extracted from ... (btrfs-store-subvolume-file-name): ... here. * guix/scripts/pack.scm (self-contained-tarball/builder): Use reduce-directories. * tests/file-systems.scm ("reduce-directories"): New test.
* pack: Improve naming of the packs store file names.Maxim Cournoyer2021-06-29
| | | | | | | | | | | Instead of just naming them by their pack type, add information from the package(s) they contain to make it easier to differentiate them. * guix/scripts/pack.scm (define-with-source): New macro. (manifest->friendly-name): Extract procedure from ... (docker-image): ... here, now defined via the above macro. Adjust REPOSITORY argument value accordingly. (guix-pack): Derive NAME using MANIFEST->FRIENDLY-NAME.
* pack: Fix typo.Maxim Cournoyer2021-06-29
| | | | * guix/scripts/pack.scm (self-contained-tarball/builder): Fix typo.
* pack: Factorize base tar options.Maxim Cournoyer2021-06-29
| | | | | | | | * guix/docker.scm (%tar-determinism-options): Move to a new module and rename to `tar-base-options'. Adjust references accordingly. * guix/build/pack.scm: New file. * Makefile.am (MODULES): Register it. * guix/scripts/pack.scm (self-contained-tarball/builder): Use it.
* pack: Extract builder code from self-contained-tarball.Maxim Cournoyer2021-06-29
| | | | | | | | | This is made to allow reusing it for the debian-archive pack format, added in a subsequent commit. * guix/scripts/pack.scm (self-contained-tarball/builder): New procedure, containing the build code extracted from self-contained-tarball. (self-contained-tarball): Use the above procedure.
* weather: Handle zero requested store items gracefully.Maxime Devos2021-06-29
| | | | | | | | | | | | | | This can happen if the weather information of a package is requested for an unsupported system. For example, try "guix weather icecat --system=aarch64-linux". * guix/scripts/weather.scm (report-server-coverage): Do not divide by zero when zero store items are requested from a server. Fixes: <https://issues.guix.gnu.org/49263> Reported-By: Jack Hill <jackhill@jackhill.us> Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
* Revert "guix build: Autoload (gnu packages)."Ludovic Courtès2021-06-29
| | | | | | This reverts commit fd62b4cf88578ebd8f42ccda94831a254425a329, which would lead 'GUIX_PACKAGE_PATH' to be ignored for instance when using 'guix build -f file.scm', as shown by 'tests/guix-build.sh'.
* guix build: Autoload (gnu packages).Ludovic Courtès2021-06-29
| | | | * guix/scripts/build.scm: Autoload (gnu packages).
* pull: Use SRFI-71 instead of SRFI-11.Ludovic Courtès2021-06-29
| | | | * guix/scripts/pull.scm (display-new/upgraded-packages): Use SRFI-71 'let'.
* pull: Autoload (gnu ...) modules.Ludovic Courtès2021-06-29
| | | | | | This reduces startup time for 'guix pull --help' and similar. * guix/scripts/pull.scm: Autoload (gnu ...) modules.
* guix substitute: Adjust comment about GnuTLS bug.Ludovic Courtès2021-06-25
| | | | | * guix/scripts/substitute.scm (call-with-cached-connection): Adjust comment.
* reconfigure: Use 'formatted-message'.Ludovic Courtès2021-06-25
| | | | | | * guix/scripts/system/reconfigure.scm (ensure-forward-reconfigure): Use 'formatted-message'. * guix/scripts/deploy.scm (deploy-machine*): Handle it.
* deploy: Leave on hard error.Ludovic Courtès2021-06-25
| | | | | | | | Previously, the error message would be displayed, followed by a backtrace ending in &non-continuable. * guix/scripts/deploy.scm (deploy-machine*): Call 'leave' rather than 'report-error' when C is a &message.
* profiles: Add 'load-profile'.Ludovic Courtès2021-06-18
| | | | | | | | | * guix/profiles.scm (%precious-variables): New variable. (purify-environment, load-profile): New procedures. * guix/scripts/environment.scm (%precious-variables) (purify-environment, create-environment): Remove. (launch-environment): Call 'load-profile' instead of 'create-environment'. * tests/profiles.scm ("load-profile"): New test.
* Start enabling substitutes from bordeaux.guix.gnu.org.Christopher Baines2021-06-18
| | | | | | | | | | | | In addition to substitutes from ci.guix.gnu.org. There are more changes that can be made in the future, but these changes seem like a good start. * config-daemon.ac (guix_substitute_urls): Add https://bordeaux.guix.gnu.org. * guix/scripts/substitute.scm (%default-substitute-urls): Add http://bordeaux.guix.gnu.org. * guix/store.scm (%default-substitute-urls): Add bordeaux.guix.gnu.org. * doc/guix.texi: Adjust accordingly. * doc/contributing.texi: Adjust accordingly.
* pack: Fix the system value passed to build-docker-image.Maxim Cournoyer2021-06-16
| | | | | | | | | | | | | | | | | | | | | Before this change, the system value would be passed as x86_64 when using a i686-linux emulated system, e.g.: $ guix environment --system=i686-linux --ad-hoc guile -- \ guile -c '(display (utsname:machine (uname))) (newline)' x86_64 This change uses the Guile builtin %host-type variable, which doesn't have this problem: $ guix environment --system=i686-linux --ad-hoc guile -- \ guile -c '(display %host-type) (newline)' i686-unknown-linux-gnu * guix/scripts/pack.scm (docker-image)[#:system] Use %host-type as a fall-back when target is not defined. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
* guix package: Do not say "nothing to do" upon rollback & co.Ludovic Courtès2021-06-13
| | | | | | | | Previously, "guix package --switch-generations=4" or similar would print "nothing to do". * guix/scripts/package.scm (process-actions): Do not warn about "nothing to do" when one of %ACTIONS is requested.
* scripts: substitute: Cache connection when looking for narinfos.Mathieu Othacehe2021-06-06
| | | | | | | | | | | | The process-substitution procedure is opening two distinct connections. The first one when looking for narinfo by calling lookup-narinfo and the other one when fetching nar files. Cache the connection when looking for narinfos so that process-substitution only opens one connection. * guix/scripts/substitute.scm (lookup-narinfo): Cache connection by using open-connection-for-uri/cached.
* import: Add CHICKEN egg importer.Xinglu Chen2021-06-03
| | | | | | | | | | | | * guix/import/egg.scm: New file. * guix/scripts/import/egg.scm: New file. * tests/egg.scm: New file. * Makefile.am (MODULES, SCM_TESTS): Register them. * po/guix/POTFILES.in: Likewise. * guix/scripts/import.scm (importers): Add egg importer. * doc/guix.texi (Invoking guix import, Invoking guix refresh): Document it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* maint: Require Guile 3.0.Ludovic Courtès2021-06-01
| | | | | | | | | | | | * configure.ac: Require Guile 3.0. * doc/guix.texi (Requirements): Adjust accordingly. * gnu/packages/package-management.scm (guile2.2-guix): Remove. * guix/lint.scm (exception-with-kind-and-args?): Remove 'cond-expand'. * guix/scripts/deploy.scm (deploy-machine*): Likewise. * guix/store.scm (call-with-store): Likewise. * guix/swh.scm (http-get*, http-post*): Likewise. * guix/ui.scm (without-compiler-optimizations, guard*) (call-with-error-handling): Likewise.
* publish: Add keep-alive support when sending nar.Mathieu Othacehe2021-06-01
| | | | | | | | | | | | | | | | The default Guile web server implementation supports the keep alive mechanism. However, in our custom http-write implementation, the connection is unconditionally close after sending nar files. To prevent that, when supported, add the client port to the server poll set so that further requests can be handled without closing the connection. * guix/scripts/publish.scm (nar-response-port): Rename it into ... (nar-compressed-port): ... this procedure. Operate directly on a given PORT. (http-write): Add keep-alive support when sending nar files. * guix/scripts/substitute.scm (process-substitution): Pass the download size to the progress-report-port procedure so that it doesn't block reading from the input port when keep-alive is supported.
* publish: Preserve the request connection header.Mathieu Othacehe2021-06-01
| | | | | | | | | | The Guile web server is reading the response connection header to decide whether to close the connection. However, as the request connection header is not forwarded to the response, this mechanism cannot work. * guix/scripts/publish.scm (add-extra-headers): New procedure. (make-request-handler): Use it to forward the request connection header to the response.
* guix build: Emit "nothing to do" warning only when needed.Ludovic Courtès2021-05-28
| | | | | | | This is a followup to 681af1fb78a735b51dc811aed770b2948212c3fc. * guix/scripts/build.scm (guix-build): Emit "nothing to do" warning only when both DRV and ITEMS are null.
* guix package: Do not warn about "missing arguments" when there's nothing to do.Ludovic Courtès2021-05-28
| | | | | | | | | | In some cases, running "guix upgrade" can trigger this warning, and "missing arguments" is misleading then. Reported by flatwhatson on #guix. * guix/scripts/package.scm (process-actions): Change warning to "nothing to do".
* scripts: Commands warn when passed zero arguments.Ludovic Courtès2021-05-28
| | | | | | | | | | | | | | | | This is a followup to 3f8326237df780404c172ef4127195cc20becd66. * guix/scripts/archive.scm (export-from-store): Warn then FILES is empty. * guix/scripts/build.scm (guix-build): Likewise. * guix/scripts/copy.scm (warn-if-empty): New procedure. (send-to-remote-host, retrieve-from-remote-host): Call it. * guix/scripts/edit.scm (guix-edit): Warn when SPECS is empty. * guix/scripts/environment.scm (guix-environment): Warn when MANIFEST has zero entries. * guix/scripts/graph.scm (guix-graph): Warn then ITEMS is empty. * guix/scripts/package.scm (process-actions): Warn when FILES and TRANS are both empty.
* deploy: Error out when the FILE argument is missing.Ludovic Courtès2021-05-28
| | | | * guix/scripts/deploy.scm (guix-deploy): Error out when FILE is false.
* scripts: discover: Report Avahi errors.Mathieu Othacehe2021-05-22
| | | | | | Fixes: <https://issues.guix.gnu.org/48561>. * guix/scripts/discover (guix-discover): Report Avahi errors.
* scripts: challenge: Fix regression.Mathieu Othacehe2021-05-20
| | | | | | | | | | This is a follow-up of 3cde5231aa78aa5e31b27888cd78ee0b250a7a1c that fixes the challenge test. When dealing with uncompressed NAR, the file size is false. Propagate it to progress-reporter/file as it used to be the case. * guix/scripts/challenge.scm (call-with-nar): Accept false size.
* publish: Add '--negative-ttl'.Ludovic Courtès2021-05-16
| | | | | | | | | * guix/scripts/publish.scm (show-help, %options): Add '--negative-ttl'. (render-narinfo, render-narinfo/cached, make-request-handler): Add #:negative-ttl and honor it. (run-publish-server): Add #:narinfo-negative-ttl and honor it. (guix-publish): Honor '--negative-ttl'. * tests/publish.scm ("negative TTL", "no negative TTL"): New tests.
* import: go: Fix goproxy option argument's format.Zheng Junjie2021-05-14
| | | | | | | | | | | | Commit a8b927a562 Added new procedure go-module-available-versions use 'string-append' to GOPROXY, but 'string->symbol' let GOPROXY is a symbol (it must be a string), which would lead to wrong-type-arg errors in the 'string-append' procedure. * guix/scripts/import/go.scm (%options)[goproxy]: Remove call to 'string->symbol'. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* challenge: Be defensive in the size passed to the progress reporter.Ludovic Courtès2021-05-13
| | | | | | | | | Possibly fixes <https://bugs.gnu.org/48045>. Reported by Bone Baboon <bone.baboon@disroot.org>. * guix/scripts/challenge.scm (call-with-nar): Rename second value returned by 'http-fetch' to match reality. Change second argument to 'progress-reporter/file'.
* Merge branch 'version-1.3.0'Maxim Cournoyer2021-05-11
|\
| * describe: Gracefully handle profiles that lack provenance info.Ludovic Courtès2021-05-09
| | | | | | | | | | | | | | | | | | | | | | | | | | Fixes <https://bugs.gnu.org/48313>. Previously, 'current-channels' would return the empty list when 'current-profile' is true but the profile lacks provenance info. * guix/describe.scm (current-channels)[build-time-metadata]: New procedure. Call it when 'manifest-entry-channel' returns #f for all of ENTRIES. * guix/scripts/describe.scm (guix-describe): When PROFILE is true, pass third argument to 'display-profile-info'.
| * http-client, substitute: Gracefully handle GnuTLS EAGAIN/EINTR.Ludovic Courtès2021-04-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Partly fixes <https://bugs.gnu.org/47867>. Reported by Florian Pelz <pelzflorian@pelzflorian.de>. In GnuTLS up to 3.7.1 included, GNUTLS_E_AGAIN and GNUTLS_E_INTERRUPTED are not handled by 'write_to_session_record_port' and could be thrown at the caller. This patch works around that by dropping connections altogether and restarting when this happens. * guix/http-client.scm (false-if-networking-error): Swallow ERROR/AGAIN and ERROR/INTERRUPTED. * guix/scripts/substitute.scm (call-with-cached-connection): Likewise.
| * import: Remove Nix importer.Ludovic Courtès2021-04-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This importer has suffered from bitrot and no longer works with current Nix and Nixpkgs. See <https://bugs.gnu.org/32339> and <https://bugs.gnu.org/36255>. * guix/import/snix.scm, guix/scripts/import/nix.scm, tests/snix.scm: Remove. * Makefile.am (MODULES, SCM_TESTS): Remove them. * guix/scripts/import.scm (importers): Remove "nix". * build-aux/test-env.in: Remove NIXPKGS variable. * configure.ac: Remove '--with-nixpkgs' option. * doc/guix.texi (Invoking guix import): Remove bit about "guix import nix". * etc/completion/fish/guix.fish: Likewise.
* | guix: scripts system: Increase the size for generating Docker container images.Roel Janssen2021-05-10
| | | | | | | | * guix/scripts/system.scm: Override the default of 256.
* | weather: '--display-missing' shows the system type of missing items.Ludovic Courtès2021-05-08
| | | | | | | | | | | | * guix/scripts/weather.scm (store-item-system): New procedure. (report-server-coverage): Use it to print the system type of each missing item.
* | download: Use Disarchive as a last resort.Timothy Sample2021-04-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a fixed version of 66b14dccdd0d83c875ce3a8d50ceab8b6f0a3ce2, which was reverted in e74250c3c535b75dd2225a26df51febb7ed94654. * guix/download.scm (%disarchive-mirrors): New variable. (%disarchive-mirror-file): New variable. (built-in-download): Add 'disarchive-mirrors' keyword argument and pass its value along to the 'builtin:download' derivation. (url-fetch): Pass '%disarchive-mirror-file' to 'built-in-download'. * guix/scripts/perform-download.scm (perform-download): Read Disarchive mirrors from the environment and pass them to 'url-fetch'. * guix/build/download.scm (disarchive-fetch/any): New procedure. (url-fetch): Add 'disarchive-mirrors' keyword argument, use it to make a list of URIs, and use the new procedure to fetch the file if all other methods fail. * build-aux/build-self.scm (build-program)[select?]: Exclude '(guix build download)'. * guix/self.scm (compiled-guix)[*core-modules*]: Add 'guile-json' to the list of extensions.
* | Revert "download: Use Disarchive as a last resort."Timothy Sample2021-04-28
| | | | | | | | | | This reverts commit 66b14dccdd0d83c875ce3a8d50ceab8b6f0a3ce2, which broke 'guix pull'.
* | download: Use Disarchive as a last resort.Timothy Sample2021-04-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * guix/download.scm (%disarchive-mirrors): New variable. (%disarchive-mirror-file): New variable. (built-in-download): Add 'disarchive-mirrors' keyword argument and pass its value along to the 'builtin:download' derivation. (url-fetch): Pass '%disarchive-mirror-file' to 'built-in-download'. * guix/scripts/perform-download.scm (perform-download): Read Disarchive mirrors from the environment and pass them to 'url-fetch'. * guix/build/download.scm (disarchive-fetch/any): New procedure. (url-fetch): Add 'disarchive-mirrors' keyword argument, use it to make a list of URIs, and use the new procedure to fetch the file if all other methods fail.
* | http-client, substitute: Gracefully handle GnuTLS EAGAIN/EINTR.Ludovic Courtès2021-04-24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Partly fixes <https://bugs.gnu.org/47867>. Reported by Florian Pelz <pelzflorian@pelzflorian.de>. In GnuTLS up to 3.7.1 included, GNUTLS_E_AGAIN and GNUTLS_E_INTERRUPTED are not handled by 'write_to_session_record_port' and could be thrown at the caller. This patch works around that by dropping connections altogether and restarting when this happens. * guix/http-client.scm (false-if-networking-error): Swallow ERROR/AGAIN and ERROR/INTERRUPTED. * guix/scripts/substitute.scm (call-with-cached-connection): Likewise.
* | import: Remove Nix importer.Ludovic Courtès2021-04-20
|/ | | | | | | | | | | | | | | | This importer has suffered from bitrot and no longer works with current Nix and Nixpkgs. See <https://bugs.gnu.org/32339> and <https://bugs.gnu.org/36255>. * guix/import/snix.scm, guix/scripts/import/nix.scm, tests/snix.scm: Remove. * Makefile.am (MODULES, SCM_TESTS): Remove them. * guix/scripts/import.scm (importers): Remove "nix". * build-aux/test-env.in: Remove NIXPKGS variable. * configure.ac: Remove '--with-nixpkgs' option. * doc/guix.texi (Invoking guix import): Remove bit about "guix import nix". * etc/completion/fish/guix.fish: Likewise.
* scripts: system: Default to -v3 when building a system.Mark H Weaver2021-04-11
| | | | | | | This is a followup to 8f9052d5434a3a11e7b4ff14d6b0090256e08aa4. * guix/scripts/system.scm (verbosity-level): Change the default from 2 to 3 when building a system.
* import: go: Append version to symbol name in the pinned version mode.Maxim Cournoyer2021-04-09
| | | | | | | | | | | | | | | | | | | This allows importing packages with complicated version specific dependency chains without the package symbol names colliding. * doc/guix.texi (Invoking guix import): Document the --pin-versions option. Mention that a specific version can be imported. Remove the experimental warning. * guix/import/go.scm (go-module->guix-package-name)[version]: Add optional argument. Rewrite the character translation in terms of string-map. (go-module->guix-package): Conditionally use dependencies whose symbol include their version, based no the value of the PIN-VERSIONS? argument. * guix/import/utils.scm (package->definition): Add a new case where the full version string is appended to the package symbol. * guix/scripts/import.scm (guix-import): Correctly print forms starting with '(define-public [...]'. * guix/scripts/import/go.scm (guix-import-go): Conditionally include the version in the package symbols defined.
* import: go: Add an option to use pinned versions.Maxim Cournoyer2021-04-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The ability to pin versions is handy when having to deal to packages that bootstrap themselves through a chain of former versions. Not using pinned versions in these case could introduce dependency cycles. * guix/build-system/go.scm (guix) (%go-version-rx): Rename to... (%go-pseudo-version-rx): ... this. Simplify the regular expression, which in turns makes it more robust. * guix/build-system/go.scm (go-version->git-ref): Adjust following the above rename. (go-pseudo-version?): New predicate. (go-module-latest-version): Rename to ... (go-module-version-string): ... this. Rename goproxy-url argument to just goproxy. Add a VERSION keyword argument, update docstring and adjust to have it used. (go-module-available-versions): New procedure. (%go.mod-require-directive-rx): Document regexp. (parse-go.mod): Harmonize the way dependencies are recorded to a list of lists rather than a list of pairs, as done for other importers. Rewrite to directly pass multiple values rather than a record object. Filter the replaced modules in a functional style. (go-module->guix-package): Add docstring. [version, pin-versions?]: New arguments. Rename the GOPROXY-URL argument to GOPROXY. Adjust to the new returned value of fetch-go.mod, which is a string. Fail when the provided version doesn't exist. Return a list dependencies and their versions when in pinned versions mode, else just the dependencies. (go-module-recursive-import)[version, pin-versions?]: New arguments. Honor the new arguments and guard against network errors. * guix/scripts/import/go.scm (%default-options): Register a default value for the goproxy argument. (show-help): Document that a version can be specified. Remove the --version argument and add a --pin-versions argument. (%options)[version]: Remove option. [pin-versions]: Add option. (guix-import-go): Adjust so the version provided from the module name is honored, along the new pin-versions? argument. * tests/go.scm: Adjust and add new tests.
* daemon: 'guix substitute' replies on FD 4.Ludovic Courtès2021-04-09
| | | | | | | | | | | | | | | | | | | | | | | This avoids the situation where error messages would unintentionally go to stderr and be wrongfully interpreted as a reply by the daemon. Fixes <https://bugs.gnu.org/46362>. This is a followup to ee3226e9d54891c7e696912245e4904435be191c. * guix/scripts/substitute.scm (display-narinfo-data): Add 'port' parameter and honor it. (process-query): Likewise. (process-substitution): Likewise. (%error-to-file-descriptor-4?, with-redirected-error-port): Remove. (%reply-file-descriptor): New variable. (guix-substitute): Remove use of 'with-redirected-error-port'. Define 'reply-port' and pass it to 'process-query' and 'process-substitution'. * nix/libstore/build.cc (SubstitutionGoal::handleChildOutput): Swap 'builderOut' and 'fromAgent'. * nix/libstore/local-store.cc (LocalStore::getLineFromSubstituter): Likewise. * tests/substitute.scm <top level>: Set '%reply-file-descriptor' rather than '%error-to-file-descriptor-4?'.
* scripts: show: Replace 'args-fold*' by 'parse-command-line'.zimoun2021-04-01
| | | | | | | * guix/scripts/show.scm (define-command): Replace 'args-fold*' by 'parse-command-line'. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* scripts: search: Replace 'args-fold*' by 'parse-command-line'.zimoun2021-04-01
| | | | | | | * guix/scripts/search.scm (define-command): Replace 'args-fold*' by 'parse-command-line'. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* scripts: repl: Replace 'args-fold*' by 'parse-command-line'.zimoun2021-04-01
| | | | | | | * guix/scripts/repl.scm (define-command): Replace 'args-fold*' by 'parse-command-line'. Signed-off-by: Ludovic Courtès <ludo@gnu.org>