summaryrefslogtreecommitdiff
path: root/guix/lint.scm
AgeCommit message (Collapse)Author
2021-07-13lint: Check for leading whitespace in description.Brice Waegeneire
* guix/lint.scm (check-description-style): Check for leading whitespace. * tests/lint.scm: ("description: leading whitespace"): New test.
2021-07-07lint: Lint usages of 'wrap-program' without a "bash" input.Maxime Devos
When using 'wrap-program', "bash" (or "bash-minimal") should be in inputs. Otherwise, when cross-compiling, 'wrap-program' will use a native bash instead of the cross bash and the 'patch-shebangs' won't be able to correct this. Tobias Geerinckx-Rice is added to the copyright lines because a part of the "straw-viewer" package definition is included. This linter detects 365 problematic package definitions at time of writing. * guix/lint.scm (report-wrap-program-error): New procedure. (check-wrapper-inputs): New linter. (%local-checkers)[wrapper-inputs]: Add the new linter. ("explicit #:sh argument to 'wrap-program' is acceptable") ("'check-wrapper-inputs' detects 'wrap-program' without \"bash\" in inputs") ("'check-wrapper-inputs' detects 'wrap-qt-program' without \"bash\" in inputs") ("\"bash\" in 'inputs' satisfies 'check-wrapper-inputs'") ("\"bash-minimal\" in 'inputs' satisfies 'check-wrapper-inputs'") ("'cut' doesn't hide bad usages of 'wrap-program'") ("bogus phase specifications don't crash the linter"): New tests. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2021-07-07lint: Define some procedures for analysing code in phases.Maxime Devos
* guix/lint.scm (check-optional-tests): Extract logic for extracting the phases from a package to ... (find-phase-deltas): ... here, and ... (report-bogus-phase-deltas): ... here. (check-optional-tests)[check-check-procedure]: Extract code for extracting the procedure body to ... (find-procedure-body) ... here. (find-phase-procedure): New procedure. (report-bogus-phase-procedure): New procedure. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2021-06-30lint: Verify if #:tests? is respected in the 'check' phase.Maxime Devos
There have been a few patches to the mailing list lately not respecting this, and this linter detects 630 package definitions that could be modified to support the --without-tests package transformation. * guix/lint.scm (check-optional-tests): New linter. (%local-checkers)[optional-tests]: Add it. * tests/lint.scm (package-with-phase-changes): New procedure. ("optional-tests: no check phase") ("optional-tests: check hase respects #:tests?") ("optional-tests: check phase ignores #:tests?") ("optional-tests: do not crash when #:phases is invalid") ("optional-tests: allow G-exps (no warning)") ("optional-tests: allow G-exps (warning)") ("optional-tests: complicated 'check' phase") ("optional-tests: 'check' phase is not first phase"): New tests. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2021-06-24lint: 'github-url' checker gracefully handles networking errors.Ludovic Courtès
Fixes <https://bugs.gnu.org/49114>. Reported by Tobias Geerinckx-Rice <me@tobias.gr>. * guix/lint.scm (call-with-networking-fail-safe, with-networking-fail-safe): Move higher in the file. * guix/lint.scm (check-github-url): Wrap call to 'follow-redirects-to-github' in 'with-networking-fail-safe'.
2021-06-24lint: 'with-networking-fail-safe' handles 'gnutls-error' exceptions.Ludovic Courtès
* guix/lint.scm (call-with-networking-fail-safe): Add clause for 'gnutls-error'.
2021-06-18lint: check-patch-headers: Recognize Git diffs.Ludovic Courtès
* guix/lint.scm (check-patch-headers): Add "diff --git " prefix.
2021-06-08lint: Check for trailing whitespace in description.Xinglu Chen
* guix/lint.scm (check-description-style): Check for trailing whitespace. * tests/lint.scm: ("description: trailing whitespace"): New test. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-06-08lint: Check for trailing whitespace in synopsis.Xinglu Chen
* guix/lint.scm (check-synopsis-style): Check for trailing whitespace. * tests/lint.scm ("synopsis: contains trailing whitespace"): New test. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-06-06lint: tests-true: Check if tests are enabled when cross-compiling.Maxime Devos
* guix/lint.scm (check-tests-true): New linter. (%local-checkers)[tests-true]: Add it. * tests/lint.scm ("tests-true: #:tests? must not be set to #t") ("tests-true: absent #:tests? is acceptable") ("tests-true: #:tests? #f is acceptable") ("tests-true: #:tests? #t acceptable when compiling natively"): Test it. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2021-06-01ui, lint: Simplify exception handling in Guile 3 style.Ludovic Courtès
* guix/lint.scm (check-derivation)[try]: Remove "catch #t" wrapping. * guix/ui.scm (call-with-error-handling): Remove "catch 'system-error" and move 'system-error handling to the &exception-with-kind-and-args clause.
2021-06-01maint: Require Guile 3.0.Ludovic Courtès
* 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.
2021-05-22lint: archival: Lookup content in Disarchive database.Ludovic Courtès
* guix/lint.scm (lookup-disarchive-spec): New procedure. (check-archival): When 'lookup-content' returns #f, call 'lookup-disarchive-spec'. Call 'lookup-directory' on the result of 'lookup-directory'. * guix/download.scm (%disarchive-mirrors): Make public. * tests/lint.scm ("archival: missing content"): Set '%disarchive-mirrors'. ("archival: content unavailable but disarchive available"): New test.
2021-04-16lint: Warn about underscores in package names.Xinglu Chen
As per section '16.4.2 Package Naming' in the manual, use hyphens instead of underscores in package names. * guix/lint.scm (check-name): Check whether the package name contains underscores. * tests/lint.scm ("name: use underscore in package name"): New test. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-06lint: refresh: Warn about missing or dysfunctional updaters.Ludovic Courtès
This feedback should help us improve updaters. * guix/lint.scm (check-for-updates): Return a warning when PACKAGE lacks an updater or when the updater returns #f.
2021-04-01lint: Warn about single-character package names.Tobias Geerinckx-Rice via Bug reports for GNU Guix
A common-sense exception is made for R. * guix/lint.scm (check-name): New procedure. (%local-checkers): Add it.
2021-03-26lint: archival: Gracefully handle packages with a #f hash value.Ludovic Courtès
Fixes <https://bugs.gnu.org/47293>. Reported by Luis Felipe. * guix/lint.scm (check-archival): Check whether 'content-hash-value' returns true.
2021-01-07upstream: Make the 'updaters' parameter optional.Ludovic Courtès
* guix/upstream.scm (lookup-updater, package-latest-release) (package-latest-release*, package-update): Make 'updaters' an optional parameter. * guix/lint.scm (check-for-updates): Remove second argument to 'package-latest-release*'.
2020-11-21lint: Add 'check-haskell-stackage' checker.Timothy Sample
* guix/lint.scm (check-haskell-stackage): New procedure. (%network-dependent-checkers): Add 'haskell-stackage' checker. * guix/import/hackage.scm (%hackage-url): New variable. (hackage-source-url, hackage-cabal-url): Use it in place of a hard-coded string. * guix/import/stackage.scm (%stackage-url): Make it a parameter. (stackage-lts-info-fetch): Update accordingly. * tests/lint.scm ("hackage-stackage"): New test.
2020-11-21lint: Add 'patch-headers' checker.Ludovic Courtès
* guix/lint.scm (check-patch-headers): New procedure. (%local-checkers): Add 'patch-headers' checker. * tests/lint.scm ("patch headers: no warnings") ("patch headers: missing comment", "patch headers: empty") ("patch headers: patch not found"): New tests.
2020-11-12lint: patch-file-names: Simplify 'search-patch' error handling.Ludovic Courtès
* guix/lint.scm (check-patch-file-names): Remove 'message-condition?' guard, which is useless since d51bfe242fbe6f3f8f71d723e8fe0c7bbe711ba1. Remove call to 'format' in the 'formatted-message?' case.
2020-10-12lint: cve: Set a connection timeout.Ludovic Courtès
This (notably) works around the fact that nvd.nist.gov is currently inaccessible over IPv6. * guix/cve.scm (fetch-vulnerabilities): Add #:timeout and pass it to 'http-fetch/cached'. (current-vulnerabilities): Add #:timeout and pass it to 'fetch-vulnerabilities'. * guix/lint.scm (current-vulnerabilities*): Pass #:timeout to 'current-vulnerabilities'.
2020-08-23lint: formatting: Gracefully handle relative file names.Ludovic Courtès
Fixes <https://bugs.gnu.org/42543>. Reported by Jack Hill <jackhill@jackhill.us>. * guix/lint.scm (check-formatting): Always return a list (previously we would return #f when 'search-path' returns #f). Check whether LOCATION's file is a relative file name. Return a warning if not. * tests/guix-lint.sh: Add test.
2020-08-23lint: Avoid calls to 'package-field-location' with #f as the field.Ludovic Courtès
* guix/lint.scm (%make-warning): Call 'package-field-location' only when FIELD is true.
2020-08-01guix: lint: Ignore unsupported source URL’s.Lars-Dominik Braun
* guix/lint.scm (check-source): Add match case for #f. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2020-07-25Use 'formatted-message' instead of '&message' where appropriate.Ludovic Courtès
* gnu.scm (%try-use-modules): Use 'formatted-message' instead of '&message'. * gnu/machine/digital-ocean.scm (maybe-raise-unsupported-configuration-error): Likewise. * gnu/machine/ssh.scm (machine-check-file-system-availability): Likewise. (machine-check-building-for-appropriate-system): Likewise. (deploy-managed-host): Likewise. (maybe-raise-unsupported-configuration-error): Likewise. * gnu/packages.scm (search-patch): Likewise. * gnu/services.scm (%service-with-default-value): Likewise. (files->etc-directory): Likewise. (fold-services): Likewise. * gnu/system.scm (locale-name->definition*): Likewise. * gnu/system/mapped-devices.scm (check-device-initrd-modules): Likewise. (check-luks-device): Likewise. * guix/channels.scm (latest-channel-instance): Likewise. * guix/cve.scm (json->cve-items): Likewise. * guix/git-authenticate.scm (commit-signing-key): Likewise. (commit-authorized-keys): Likewise. (authenticate-commit): Likewise. (verify-introductory-commit): Likewise. * guix/remote.scm (remote-pipe-for-gexp): Likewise. * guix/scripts/graph.scm (assert-package): Likewise. * guix/scripts/offload.scm (private-key-from-file*): Likewise. * guix/ssh.scm (authenticate-server*): Likewise. (open-ssh-session): Likewise. (remote-inferior): Likewise. * guix/ui.scm (matching-generations): Likewise. * guix/upstream.scm (package-update): Likewise. * tests/channels.scm ("latest-channel-instances, missing introduction for 'guix'"): Catch 'formatted-message?'. ("authenticate-channel, wrong first commit signer"): Likewise. * tests/lint.scm ("patches: not found"): Adjust message string. * tests/packages.scm ("patch not found yields a run-time error"): Catch 'formatted-message?'. * guix/lint.scm (check-patch-file-names): Handle 'formatted-message?'. (check-derivation): Ditto.
2020-07-21lint: source: Always return a list.Ludovic Courtès
Fixes a regression introduced in c10526672e515f07c92dc447bbc592808f67238e. Previously we would return *unspecified* for a package whose source is not an origin. * guix/lint.scm (check-source): Add alternate 'if' branch.
2020-07-12lint: source: Validate URLs of Git references.Ludovic Courtès
Until now the 'source' checker would look at URL for 'url-fetch' origins but not for 'git-fetch' origins. * guix/lint.scm (check-source): Add case for 'git-reference?'. * tests/lint.scm ("source, git-reference: 301 -> 200"): New test.
2020-07-03lint: Do not assume that a package's source is an origin.Ludovic Courtès
* guix/lint.scm (check-source-file-name): Ensure ORIGIN is an origin. (check-patch-file-names)[patches]: Likewise. (check-source): Likewise.
2020-06-30lint: Adjust 'swh-error exception handler.Ludovic Courtès
* guix/lint.scm (check-archival): Change first clause to match only 'swh-error keys.
2020-06-14lint: Add 'check-for-collisions' checker.Ludovic Courtès
Suggested by Edouard Klein <edk@beaver-labs.com>. * guix/profiles.scm (check-for-collisions): Export. * guix/lint.scm (check-profile-collisions): New procedure. (%local-checkers): Add 'profile-collisions' checker. * tests/lint.scm ("profile-collisions: no warnings") ("profile-collisions: propagated inputs collide") ("profile-collisions: propagated inputs collide, store items"): New tests. * doc/guix.texi (Invoking guix lint): Document it.
2020-06-12lint: check-patch-file-names: Use origin-actual-file-name.Christopher Baines
This avoids crashes for the patch-file-names checker where a <origin> is used for a patch, but without a value for the file-name field. This is currently the case with the bash package. * guix/lint.scm (check-patch-file-names): Change origin-file-name to origin-actual-file-name.
2020-06-11guix: lint: Support origins in check-patch-file-names.Chris Marusich
* guix/lint.scm (check-patch-file-names)[starts-with-package-name?]: New procedure, extracted from the existing logic. Using it, add a clause to the match-lambda to handle origin records.
2020-05-22lint: archival: Use 'origin-hash'.Ludovic Courtès
* guix/lint.scm (check-archival): Use 'origin-hash' instead of 'origin-sha256', removing hard-coded "sha256".
2020-04-10lint: 'check-patch-file-names' restricts to shorter file names.Ludovic Courtès
* guix/lint.scm (check-patch-file-names): Increase MARGIN.
2020-04-10lint: Check for inappropriate inputs in propagated-inputs too.Efraim Flashner
* guix/lint.scm (check-inputs-should-be-native): Also check the propagated inputs of the package.
2020-04-07lint: 'm4' is a native input.Marius Bakke
* guix/lint.scm (check-inputs-should-be-native): Add "m4".
2020-03-24lint: Add a #:store argument to check-derivationChristopher Baines
This can then be used to avoid opening up a store connection each time a package needs checking. * guix/lint.scm (check-derivation): Add a #:store argument, and pull the handling of the store connection out of the try function.
2020-03-24lint: Mark the derivation checker as requiring a store connection.Christopher Baines
* guix/lint.scm (%local-checkers): Mark the derivation checker as requiring a store connection.
2020-03-24lint: Add a requires-store? field to the checker record.Christopher Baines
This can then be used to mark checkers that require a store connection, which will enable passing a connection in, avoiding the overhead of establishing a connection inside the check function when it's run for lots of different packages. * guix/lint.scm (<lint-checker>): Add requires-store? to the record type.
2020-03-19guix: lint: Ad scdoc as a suggested native input.Brendan Tildesley
* guix/lint.scm (check-inputs-should-be-native): Add scdoc. Signed-off-by: Danny Milosavljevic <dannym@scratchpost.org>
2020-01-17lint: vulnerabilities: Avoid 'mock' in test.Ludovic Courtès
* guix/lint.scm (check-vulnerabilities): Add 'package-vulnerabilities' optional parameter. * tests/lint.scm ("cve: one vulnerability"): Use it instead of 'mock'.
2020-01-17lint: derivation: Adjust exception handling for Guile 3.Ludovic Courtès
This makes sure the "derivation: invalid arguments" test passes on Guile 3.0.0. Without this change, the lint warning would only include the format string instead of the key and arguments. * guix/lint.scm (exception-with-kind-and-args?): New procedure. (check-derivation): Use it.
2020-01-12lint: Check for more packages which should be native.Danny Milosavljevic
* guix/lint.scm (check-inputs-should-be-native): Add gtk-doc.
2020-01-09lint: Check for more packages which should be native.Danny Milosavljevic
* guix/lint.scm (check-inputs-should-be-native): Add autoconf, automake, bison, dejagnu, desktop-file-utils, doxygen, flex, gettext, gobject-introspection, googletest-source, groff, help2man, libtool, swig, qmake, qttools, texinfo, xorg-server-for-tests, yelp-tools.
2020-01-06Adjust module autoloads.Ludovic Courtès
In Guile < 2.9.7, autoloading a module would give you access to all its bindings. In future versions, autoloading a module gives access only to the listed bindings, as per #:select (see <https://bugs.gnu.org/38895>). This commit adjusts autoloads to the new semantics, allowing Guix to be built with Guile 2.9.7/2.9.8. * guix/build/download.scm <top level>: Remove call to 'module-autoload!'. (load-gnutls): New procedure. (tls-wrap): Call it. * guix/git.scm <top level>: Remove call to 'module-autoload!'. (load-git-submodules): New procedure. (update-submodules): Call it instead of 'resolve-interface'. * gnu/bootloader/grub.scm: Replace #:autoload with #:use-module. * gnu/packages.scm: Likewise. * gnu/packages/ssh.scm: Likewise. * gnu/packages/tex.scm: Likewise. * gnu/services/cuirass.scm: Likewise. * gnu/services/mcron.scm: Likewise. * guix/lint.scm: Augment list of bindings in #:autoload. * guix/scripts/build.scm: Likewise. * guix/scripts/gc.scm: Likewise. * guix/scripts/pack.scm: Likewise. * guix/scripts/publish.scm: Likewise. * guix/scripts/pull.scm: Likewise. * guix/utils.scm: Remove unnecessary #:autoload clauses; replace one of them with #:use-module.
2020-01-03download: Do not leak file descriptors on TLS ports.Ludovic Courtès
Fixes <https://bugs.gnu.org/20145>. * guix/build/download.scm (%tls-ports, register-tls-record-port): Remove. (tls-wrap): Remove call to 'register-tls-record-port'. Return a custom binary input/output port instead. This is a backport of what Guile 2.2's (web client) module has been doing. (close-connection): Define as an alias for 'close-port'. * guix/http-client.scm (http-fetch): Remove #:keep-alive? parameter, which was ignored and unused. Pass #:keep-alive? #f to 'http-get'. * guix/lint.scm (probe-uri): Use 'close-port' instead of 'close-connection'. * guix/scripts/substitute.scm (http-multiple-get): Likewise.
2019-12-02lint: archival: Gracefully handle network failures.Ludovic Courtès
* guix/lint.scm (check-archival): Wrap re-throw in 'with-networking-fail-safe'.
2019-11-28lint: Check for more packages which should be native.Efraim Flashner
* guix/lint.scm (check-inputs-should-be-native): Add yasm, nasm, fasm.
2019-10-23lint: Re-enable CVE checker.Ludovic Courtès
This reverts d7fcd9c565812919109ae88049f5d8bf4c56f9bd. * guix/lint.scm (%network-dependent-checkers): Re-enable 'cve checker.