{ "categories": { "CF": "conda-forge specific rules", "FC": "Feedstock configuration in `conda-forge.yml`", "R": "All recipe versions", "R0": "Recipe v0 (`meta.yaml`)", "R1": "Recipe v1 (`recipe.yaml`)", "RC": "All recipe variants files", "CBC": "Recipe variants in `conda_build_config.yaml`" }, "messages": [ { "name": "MacOSDeploymentTargetConflict", "identifier": "CBC-000", "category": "CBC", "kind": "lint", "added_in": "<3.56", "deprecated_in": "3.56.0", "documentation": "https://github.com/conda-forge/conda-forge.github.io/issues/2102", "message": "Conflicting specification for minimum macOS deployment target!\nIf your conda_build_config.yaml sets `MACOSX_DEPLOYMENT_TARGET`, please change the name of that key to `c_stdlib_version`!\nContinuing with `max(c_stdlib_version, MACOSX_DEPLOYMENT_TARGET)`.", "examples": [], "path": "recipe/conda_build_config.yaml" }, { "name": "MacOSDeploymentTargetBelowStdlib", "identifier": "CBC-001", "category": "CBC", "kind": "lint", "added_in": "<3.56", "deprecated_in": "3.56.0", "documentation": "https://github.com/conda-forge/conda-forge.github.io/issues/2102", "message": "You are setting `MACOSX_SDK_VERSION` below `c_stdlib_version`, in conda_build_config.yaml which is not possible! Please ensure `MACOSX_SDK_VERSION` is at least `c_stdlib_version` (you can leave it out if it is equal).\nIf you are not setting `c_stdlib_version` yourself, this means you are requesting a version below the current global baseline in conda-forge (${baseline}). If this is the intention, you also need to override `c_stdlib_version` and `MACOSX_DEPLOYMENT_TARGET` locally.", "examples": [], "path": "recipe/conda_build_config.yaml" }, { "name": "MaintainerMissing", "identifier": "CF-001", "category": "CF", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Maintainers listed in `extra.recipe-maintainers` must be valid Github usernames\nor `@conda-forge/*` teams.", "message": "Recipe maintainer ${team_or}\"${maintainer}\" does not exist", "examples": [ "Recipe maintainer \"@banned-user\" does not exist", "Recipe maintainer team \"@conda-forge/deleted-team\" does not exist" ], "path": "recipe/(meta|recipe).yaml" }, { "name": "PackageToAvoid", "identifier": "CF-002", "category": "CF", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Some package names may not be used in recipes directly, or under some circumstances.\n\nThe full list of package names and their explanations can be found in\n[`conda-forge-pinning-feedstock`](https://github.com/conda-forge/conda-forge-pinning-feedstock/blob/main/recipe/linter_hints/hints.toml).", "message": "${package_hint}", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "NoVariantConfigs", "identifier": "CF-003", "category": "CF", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "No variant config files could be found in `.ci_support/*.yaml` , which means that\nbuild matrix is empty and no packages will be built.\n\nThis is usually caused by a misconfiguration of your recipe file (e.g. `build.skip` is always\n`true`, disabling all builds).", "message": "The feedstock has no `.ci_support` files and thus will not build any packages.", "examples": [], "path": ".ci_support/*.yaml" }, { "name": "NoEmptyVariantsFile", "identifier": "CF-004", "category": "CF", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Variants files can't be empty.", "message": "The recipe should not have an empty `conda_build_config.yaml` file.", "examples": [], "path": "recipe/conda_build_config.yaml" }, { "name": "NoCustomGHAWorkflows", "identifier": "CF-005", "category": "CF", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Due to its stature in the open-source community, conda-forge has enhanced\naccess to certain CI services. This access is a community resource entrusted\nto conda-forge for use in building packages. We thus cannot support\nthird-party or \"off-label\" CI jobs in our feedstocks on any of our CI\nservices. If we find such use, we will politely ask the maintainers to\nrectify the situation. We may take more serious actions, including archiving\nfeedstocks or removing maintainers from the organization, if the situation\ncannot be rectified.", "message": "conda-forge feedstocks cannot have custom Github Actions workflows. See https://github.com/conda-forge/conda-forge.github.io/issues/2750 for more information. If you didn't add any custom workflows, please consider rerendering your feedstock to remove deprecated workflows.", "examples": [], "path": ".github/workflows/*.y*ml" }, { "name": "NoDuplicateKeys", "identifier": "FC-001", "category": "FC", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "`conda-forge.yml` must not contain duplicate keys.", "message": "The ``conda-forge.yml`` file is not allowed to have duplicate keys.", "examples": [], "path": "conda-forge.yml" }, { "name": "UnexpectedSection", "identifier": "R-000", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Recipe files must not contain unknown top-level keys.\n\nFor recipe version 0, the allowed keys are (in this order):\n\n- `package`\n- `source`\n- `build`\n- `requirements`\n- `test`\n- `app`\n- `outputs`\n- `about`\n- `extra`\n\nFor recipe version 1, it depends if you are generating one or\nmultiple artifacts. For single artifacts, the expected keys are\n(in this order):\n\n- `schema_version`\n- `context`\n- `package`\n- `source`\n- `build`\n- `requirements`\n- `tests`\n- `about`\n- `extra`\n\nFor multiple artifacts, the expected keys are (in this order):\n\n- `schema_version`\n- `context`\n- `recipe`\n- `source`\n- `build`\n- `outputs`\n- `about`\n- `extra`", "message": "The top level meta key ${section} is unexpected", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "SectionOrder", "identifier": "R-001", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The top-level sections of a recipe file must always follow the same order.\n\nPlease refer to linter rule [`R-000`](#R-000) (`RecipeUnexpectedSection`) for more\ndetails.", "message": "The top level meta keys are in an unexpected order. Expecting ${order}.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "MissingAboutItem", "identifier": "R-002", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The `about` section requires three fields: homepage (`home` in v1), license, and summary.", "message": "The ${item} item is expected in the about section.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "NoMaintainers", "identifier": "R-003", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "All recipes must list at least one maintainer under `extra/recipe-maintainers`.", "message": "The recipe could do with some maintainers listed in the `extra/recipe-maintainers` section.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "MaintainersMustBeList", "identifier": "R-004", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The `extra/recipe-maintainers` only accepts a list of strings as a value.", "message": "Recipe maintainers should be a json list.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "RequiredTests", "identifier": "R-005", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "All recipes must have a non-empty `test` section.", "message": "The recipe must have some tests.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "RecommendedTests", "identifier": "R-006", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "All recipes must have a non-empty `test` section.", "message": "It looks like the '${output}' output doesn't have any tests.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "UnknownLicense", "identifier": "R-007", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "All recipes must have a license identifier, but it can't be \"unknown\".", "message": "The recipe license cannot be unknown.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "BuildNumberMissing", "identifier": "R-008", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "All recipes must define a `build.number` value.", "message": "The recipe must have a `build/number` section.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "RequirementsOrder", "identifier": "R-009", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The different subcategories of the `requirements` section must follow\na strict order: `build`, `host`, `run`, `run_constrained`.", "message": "The `requirements/` sections should be defined in the following order: ${expected}; instead saw: ${seen}.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "LicenseFieldMentionsLicense", "identifier": "R-010", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Licenses should omit the term 'License' in its name.", "message": "The recipe `license` should not include the word \"License\".", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "TooManyEmptyLines", "identifier": "R-011", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Recipe files should end with a single empty line, not more.", "message": "There are ${n_lines} too many lines. There should be one empty line at the end of the file.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "TooFewEmptyLines", "identifier": "R-012", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Recipe files should end with a single empty line.", "message": "There are too few lines. There should be one empty line at the end of the file.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "LicenseFamily", "identifier": "R-013", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The field `license_file` must be always present.", "message": "license_file entry is missing, but is required.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "InvalidPackageName", "identifier": "R-014", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The recipe `name` can only contain certain characters:\n\n- lowercase ASCII letters (`a-z`)\n- digits (`0-9`)\n- underscores, hyphens and dots (`_`, `-`, `.`)", "message": "Recipe name has invalid characters. only lowercase alpha, numeric, underscores, hyphens and dots allowed", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "MissingVersion", "identifier": "R-015", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The package `version` field is required.", "message": "Package version is missing.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "InvalidVersion", "identifier": "R-016", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The package `version` field must be a valid version string.", "message": "Package version ${version} doesn't match conda spec: ${error}", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "PinnedNumpy", "identifier": "R-017", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "See ", "message": "Using pinned numpy packages is a deprecated pattern. Consider using the method outlined [conda-forge.org > Docs > Maintainer Documentation > Knowledge Base > Building Against NumPy](https://conda-forge.org/docs/maintainer/knowledge_base.html#linking-numpy).", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "UnexpectedSubsection", "identifier": "R-018", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "This check ensures that the passed recipe conforms to the expected recipe v0 schema.\n\nSee schema in [`conda_build.metadata.FIELDS`](\nhttps://github.com/conda/conda-build/blob/25.9.0/conda_build/metadata.py#L619)", "message": "The ${section} section contained an unexpected subsection name. ${subsection} is not a valid subsection name.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "SourceHash", "identifier": "R-019", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "All recipe source URLs must have a hash checksum for integrity checks.", "message": "When defining a source/url please add a sha256, sha1 or md5 checksum (sha256 preferably).", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "NoarchValue", "identifier": "R-020", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The `build.noarch` field can only take `python` or `generic` as a value.", "message": "Invalid `noarch` value `${given}`. Should be one of `${valid}`.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "RequirementJoinVersionOperator", "identifier": "R-021", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "conda recipes should use the three-field matchspec syntax to express requirements:\n`name [version [build]]`. This means having no spaces between operator and version\nliterals.", "message": "``requirements: ${section}: ${requirement}`` should not contain a space between relational operator and the version, i.e. ``${name} ${pin}``", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "RequirementSeparateNameVersion", "identifier": "R-022", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "conda recipes should use the three-field matchspec syntax to express requirements:\n`name [version [build]]`. This means having a space between name and version.", "message": "``requirements: ${section}: ${requirement}`` must contain a space between the name and the pin, i.e. ``${name} ${pin}``", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "LanguageHostRun", "identifier": "R-023", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Packages may depend on certain languages (e.g. Python, R) that require depending\non the language runtime both in `host` and `run`.", "message": "If ${language} is a host requirement, it should be a run requirement.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "LanguageHostRunUnpinned", "identifier": "R-024", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Packages may depend on certain languages (e.g. Python, R) that require depending\non the language runtime both in `host` and `run`. They should not pin it to a\nparticular version when the package is not `noarch`.", "message": "Non noarch packages should have ${language} requirement without any version constraints.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "JinjaExpression", "identifier": "R-025", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Jinja expressions should add a space between the double curly braces.", "message": "Jinja2 variable references are suggested to take a ``${dollar}{{}}`` form. See lines ${lines}.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "PythonLowerBound", "identifier": "R-026", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Noarch Python recipes should always pin the lower bound on their `python` requirement.", "message": "noarch: python recipes are required to have a lower bound on the python version. Typically this means putting `python >={{ python_min }}` in the `run` section of your recipe. You may also want to check the upstream source for the package's Python compatibility.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "PinSubpackagePinCompatible", "identifier": "R-027", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The Jinja functions `pin_subpackage` and `pin_compatible` may be confused\nbecause both would add version constraints to a package name. However, they\nhave different purposes.\n\n- `pin_subpackage()` must be used when the package to be pinned is a known output\n in the current recipe.\n- `pin_compatible()` must be used when the package to be pinned is _not_ an output\n of the current recipe.", "message": "${should_use} should be used instead of ${in_use} for `${pin}` because it is ${what} known outputs of this recipe: ${subpackages}.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "CompiledWheelsNotAllowed", "identifier": "R-028", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Python wheels are often discouraged as package sources. This is especially the case\nfor compiled wheels, which are forbidden.", "message": "Detected compiled wheel(s) in source: ${urls}. This is disallowed. All packages should be built from source except in rare and exceptional cases.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "PureWheelsNotAllowed", "identifier": "R-029", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Python wheels are often discouraged as package sources. This is also the case\nfor pure Python wheels when building non-noarch packages.", "message": "Detected pure Python wheel(s) in source: ${urls}. This is discouraged. Please consider using a source distribution (sdist) instead.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "PureWheelsNotAllowedNoarch", "identifier": "R-030", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Python wheels are often discouraged as package sources. However, pure Python\nwheels may be used as a source for noarch Python packages, although sdists are preferred.", "message": "Detected pure Python wheel(s) in source: ${urls}. This is generally ok for pure Python wheels and noarch=python packages but it's preferred to use a source distribution (sdist) if possible.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "RustLicenses", "identifier": "R-031", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "", "message": "Rust packages must include the licenses of the Rust dependencies. For more info, visit: https://conda-forge.org/docs/maintainer/adding_pkgs/#rust", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "GoLicenses", "identifier": "R-032", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "", "message": "Go packages must include the licenses of the Go dependencies. For more info, visit: https://conda-forge.org/docs/maintainer/adding_pkgs/#go", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "StdlibJinja", "identifier": "R-033", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "https://github.com/conda-forge/conda-forge.github.io/issues/2102", "message": "This recipe is using a compiler, which now requires adding a build dependence on `${dollar}{{ stdlib(\"c\") }}` as well. Note that this rule applies to each output of the recipe using a compiler. For further details, please see https://github.com/conda-forge/conda-forge.github.io/issues/2102.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "StdlibSysroot", "identifier": "R-034", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "https://github.com/conda-forge/conda-forge.github.io/issues/2102", "message": "You're setting a requirement on sysroot_linux- directly; this should now be done by adding a build dependence on `${dollar}{{ stdlib(\"c\") }}`, and overriding `c_stdlib_version` in `recipe/conda_build_config.yaml` for the respective platform as necessary. For further details, please see https://github.com/conda-forge/conda-forge.github.io/issues/2102.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "StdlibMacOS", "identifier": "R-035", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "https://github.com/conda-forge/conda-forge.github.io/issues/2102", "message": "You're setting a constraint on the `__osx` virtual package directly; this should now be done by adding a build dependence on `${dollar}{{ stdlib(\"c\") }}`, and overriding `c_stdlib_version` in `recipe/conda_build_config.yaml` for the respective platform as necessary. For further details, please see https://conda-forge.org/docs/maintainer/knowledge_base/#requiring-newer-macos-sdks.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "NotParsableLint", "identifier": "R-036", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The conda recipe should be parsable by at least one backend.\nIf none can parse it, this constitutes an error that needs to be remediated.", "message": "The recipe is not parsable by any of the known recipe parsers (${parsers}). Please check the logs for more information and ensure your recipe can be parsed.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "NotParsableHint", "identifier": "R-037", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The conda recipe should be parsable by at least one backend.\nSometimes, only some backends fail, which is not critical, but should be looked into.", "message": "(dynamic)", "examples": [ "The recipe is not parsable by parser `conda-recipe-manager`. The recipe can only be automatically migrated to the new v1 format if it is parseable by conda-recipe-manager.", "The recipe is not parsable by parser `other`. Your recipe may not receive automatic updates and/or may not be compatible with conda-forge's infrastructure. Please check the logs for more information and ensure your recipe can be parsed." ], "path": "recipe/(meta|recipe).yaml" }, { "name": "PythonIsAbi3Bool", "identifier": "R-038", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "https://github.com/conda-forge/conda-forge.github.io/issues/2102", "message": "The `is_abi3` variant variable is now a boolean value instead of a string (i.e., 'true' or 'false'). Please change syntax like `is_abi3 == 'true' to `is_abi3`.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "ExtraFeedstockNameSuffix", "identifier": "R-039", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "https://github.com/conda-forge/conda-forge.github.io/issues/2102", "message": "The feedstock-name in the `extra` section must not end with '-feedstock'. The '-feedstock' suffix is automatically appended during feedstock creation.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "VersionParsedAsFloat", "identifier": "R-040", "category": "R", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "https://github.com/conda-forge/conda-forge.github.io/issues/2102", "message": "${key} has a value that is interpreted as a floating-point number. Please quote it (like `\"${value}\"`${v0_hint}) to ensure that it is interpreted as string and preserved exactly.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "SuggestNoarch", "identifier": "R-041", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "`noarch` packages are strongly preferred when possible.\nSee https://conda-forge.org/docs/maintainer/knowledge_base.html#noarch-builds.", "message": "Whenever possible python packages should use noarch. See https://conda-forge.org/docs/maintainer/knowledge_base.html#noarch-builds", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "ScriptShellcheckReport", "identifier": "R-042", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "This issue is raised when `shellcheck` is enabled and detects problems\nin your build `.sh` scripts.\n\nSee https://www.shellcheck.net/wiki/ for details on the shellcheck error codes.", "message": "(dynamic)", "examples": [ "Whenever possible fix all shellcheck findings ('shellcheck --enable=all --shell=bash --exclude=SC2154 recipe/*.sh -f diff | git apply' helps)\n\n```text\nIn ./recipe/build.sh line 337:\nln -sf $PREFIX/$f $PWD/$f\n ^-----^ SC2086 (info): Double quote to prevent globbing and word splitting.\n ^-- SC2086 (info): Double quote to prevent globbing and word splitting.\n ^--^ SC2086 (info): Double quote to prevent globbing and word splitting.\n ^-- SC2086 (info): Double quote to prevent globbing and word splitting.\n\nDid you mean:\n ln -sf \"$PREFIX\"/\"$f\" \"$PWD\"/\"$f\"\n```" ], "path": "recipe/*.sh" }, { "name": "ScriptShellcheckFailure", "identifier": "R-043", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "This issue is raised when `shellcheck` is enabled but could not\nrun successfully (something went wrong).", "message": "There have been errors while scanning with shellcheck.", "examples": [], "path": "recipe/*.sh" }, { "name": "LicenseSPDX", "identifier": "R-044", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The `license` field must be a valid SPDX identifier.\n\nSee list at [`licenses.txt`](https://github.com/conda-forge/conda-smithy/blob/main/conda_smithy/linter/licenses.txt).", "message": "License is not an SPDX identifier (or a custom LicenseRef) nor an SPDX license expression.\n\nDocumentation on acceptable licenses can be found [conda-forge.org > Docs > Maintainer Documentation > Contributing packages > SPDX Identifiers and Expressions](https://conda-forge.org/docs/maintainer/adding_pkgs.html#spdx-identifiers-and-expressions).", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "InvalidLicenseException", "identifier": "R-045", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The `license` field may accept some SPDX exception expressions, as controlled\nin [this file](https://github.com/conda-forge/conda-smithy/blob/main/conda_smithy/linter/license_exceptions.txt)", "message": "License exception is not an SPDX exception.\n\nDocumentation on acceptable licenses can be found [conda-forge.org > Docs > Maintainer Documentation > Contributing packages > SPDX Identifiers and Expressions](https://conda-forge.org/docs/maintainer/adding_pkgs.html#spdx-identifiers-and-expressions).", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "PythonBuildBackendHost", "identifier": "R-046", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Build backends in Python packages must be explictly added to `host`.", "message": "No valid build backend found for Python recipe for package `${package_name}` using `pip`. Python recipes using `pip` need to explicitly specify a build backend in the `host` section. If your recipe has built with only `pip` in the `host` section in the past, you likely should add `setuptools` to the `host` section of your recipe.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "PythonMinPin", "identifier": "R-047", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Python packages should depend on certain `>={min_version}` at runtime,\nbut build and test against `{min_version}.*`.", "message": "`noarch: python` recipes should usually follow the syntax in our [documentation](https://conda-forge.org/docs/maintainer/knowledge_base/#noarch-python) for specifying the Python version.\n${recommendations}\n- If the package requires a newer Python version than the currently supported minimum version on `conda-forge`, you can override the `python_min` variable by adding a Jinja2 `set` statement at the top of your recipe (or using an equivalent `context` variable for v1 recipes).", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "SpaceSeparatedSpecs", "identifier": "R-048", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Prefer `name [version [build]]` match spec syntax.", "message": "${output} output has some malformed specs:\n${bad_specs_list}\nRequirement spec fields should match the syntax `name [version [build]]`to avoid known issues in conda-build. For example, instead of `name =version=build`, use `name version.* build`. There should be no spaces between version operators and versions either: `python >= 3.8` should be `python >=3.8`.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "OSVersion", "identifier": "R-049", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Prefer `name [version [build]]` match spec syntax.", "message": "The feedstock is lowering the image versions for one or more platforms: ${platforms} (the default is ${default}). Unless you are in the very rare case of repackaging binary artifacts, consider removing these overrides from conda-forge.yml in the top feedstock directory.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "UsePip", "identifier": "R-050", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Python packages should be built with `pip install ...`, not `python setup.py install`,\nwhich is deprecated.", "message": "Whenever possible python packages should use pip. See https://conda-forge.org/docs/maintainer/adding_pkgs.html#use-pip", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "UsePyPIOrg", "identifier": "R-051", "category": "R", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Grayskull and the conda-forge example recipe used to have pypi.io as a default,\nbut the canonical URL is now PyPI.org.\n\nSee https://github.com/conda-forge/staged-recipes/pull/27946.", "message": "PyPI default URL is now pypi.org, and not pypi.io. You may want to update the default source url.", "examples": [], "path": "recipe/(meta|recipe).yaml" }, { "name": "FormattedSelectors", "identifier": "R0-001", "category": "R0", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Recipe format v0 (`meta.yaml`) supports the notion of line selectors\nas trailing comments:\n\n```yaml\nbuild:\n skip: true # [not win]\n```\n\nThese must be formatted with two spaces before the `#` symbol, followed\nby one space before the opening square bracket `[`, followed by no spaces.\nThe closing bracket must not be surrounded by spaces either.", "message": "Selectors are suggested to take a ``#[]`` form. See lines ${lines}", "examples": [], "path": "recipe/meta.yaml" }, { "name": "OldPythonSelectorsLint", "identifier": "R0-002", "category": "R0", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Recipe v0 selectors used to include one Python version selector\nper release, like `py27` for Python 2.7 and `py35` for Python 3.5.\nThis was deprecated in favor of the `py` integer, which is preferred.", "message": "Old-style Python selectors (py27, py35, etc) are only available for Python 2.7, 3.4, 3.5, and 3.6. Please use explicit comparisons with the integer ``py``, e.g. ``# [py==37]`` or ``# [py>=37]``. See lines ${lines}", "examples": [], "path": "recipe/meta.yaml" }, { "name": "OldPythonSelectorsHint", "identifier": "R0-003", "category": "R0", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Recipe v0 selectors (see [`R0-002`](#r0-002)) used to include one Python\nversion selector per release, like `py27` for Python 2.7 and `py35` for Python 3.5.\nThis was deprecated in favor of the `py` integer, which is preferred.", "message": "Old-style Python selectors (py27, py34, py35, py36) are deprecated. Instead, consider using the int ``py``. For example: ``# [py>=36]``. See lines ${lines}", "examples": [], "path": "recipe/meta.yaml" }, { "name": "NoarchSelectorsV0", "identifier": "R0-004", "category": "R0", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Noarch packages are not generally compatible with v0 selectors", "message": "`noarch` packages can't have ${skips}selectors. If the selectors are necessary, please remove `noarch: ${noarch}`, or selector on line ${line_number}:\n${line}", "examples": [], "path": "recipe/meta.yaml" }, { "name": "JinjaDefinitions", "identifier": "R0-005", "category": "R0", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "In v0 recipes, Jinja definitions must follow a particular style.", "message": "Jinja2 variable definitions are suggested to take a ``{%set=%}`` form. See lines ${lines}", "examples": [], "path": "recipe/meta.yaml" }, { "name": "LegacyToolchain", "identifier": "R0-006", "category": "R0", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "The `toolchain` package is deprecated. Use compilers as outlined in\n.", "message": "Using toolchain directly in this manner is deprecated. Consider using the compilers outlined [conda-forge.org > Docs > Maintainer Documentation > Knowledge Base > Compilers](https://conda-forge.org/docs/maintainer/knowledge_base.html#compilers).", "examples": [], "path": "recipe/meta.yaml" }, { "name": "NoCommentSelectors", "identifier": "R1-001", "category": "R1", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Recipe v0 selectors (see [`R0-002`](#r0-002)) are not supported in v1 recipes.", "message": "Selectors in comment form no longer work in v1 recipes. Instead, if / then / else maps must be used. See lines ${lines}.", "examples": [], "path": "recipe/recipe.yaml" }, { "name": "NoarchSelectorsV1", "identifier": "R1-002", "category": "R1", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Noarch packages are not generally compatible with v1 conditional blocks.", "message": "`noarch` packages can't have ${skips}selectors. If the selectors are necessary, please remove `noarch: ${noarch}`.", "examples": [], "path": "recipe/recipe.yaml" }, { "name": "RattlerBldBat", "identifier": "R1-003", "category": "R1", "kind": "hint", "added_in": "<3.56", "deprecated_in": "", "documentation": "`rattler-build` does not use `bld.bat` scripts, but `build.bat`.", "message": "Found `bld.bat` in recipe directory, but this is a recipe v1 (rattler-build recipe). rattler-build uses `build.bat` instead of `bld.bat` for Windows builds. Consider renaming `bld.bat` to `build.bat`.", "examples": [], "path": "recipe/recipe.yaml" }, { "name": "MacOSDeploymentTargetRename", "identifier": "RC-000", "category": "RC", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "https://github.com/conda-forge/conda-forge.github.io/issues/2102", "message": "The `MACOSX_DEPLOYMENT_TARGET` key in ${recipe_config_file} needs to be removed or replaced by `c_stdlib_version`, appropriately restricted to macOS.", "examples": [], "path": "recipe/(conda_build_config|variants).yaml" }, { "name": "MacOSDeploymentTargetBelow", "identifier": "RC-001", "category": "RC", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "https://github.com/conda-forge/conda-forge.github.io/issues/2102", "message": "You are setting `c_stdlib_version` on macOS below the current global baseline in conda-forge (${baseline_version}).", "examples": [], "path": "recipe/(conda_build_config|variants).yaml" }, { "name": "MoreThanOneConfigFile", "identifier": "RC-002", "category": "RC", "kind": "lint", "added_in": "<3.56", "deprecated_in": "", "documentation": "Only one recipe variants file must be used in a feedstock.", "message": "Found two recipe configuration files, but you may only use one! You may use `conda_build_config.yaml` for both v0 and v1 recipes, while `variants.yaml` may only be used with v1 recipes.", "examples": [], "path": "recipe/(conda_build_config|variants).yaml" } ] }