Skip to main content

Linter rules

info
This documentation is autogenerated from conda-smithy's linter messages JSON document.

Available categoriesโ€‹

Messagesโ€‹

CF: conda-forge specific rulesโ€‹

CF-001: MaintainerMissingโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Maintainers listed in extra.recipe-maintainers must be valid Github usernames or @conda-forge/* teams.

Message or template

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


CF-002: PackageToAvoidโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Some package names may not be used in recipes directly, or under some circumstances.

The full list of package names and their explanations can be found in conda-forge-pinning-feedstock.

Message or template

${package_hint}


CF-003: NoVariantConfigsโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: .ci_support/*.yaml

No variant config files could be found in .ci_support/*.yaml , which means that build matrix is empty and no packages will be built.

This is usually caused by a misconfiguration of your recipe file (e.g. build.skip is always true, disabling all builds).

Message or template

The feedstock has no .ci_support files and thus will not build any packages.


CF-004: NoEmptyVariantsFileโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/conda_build_config.yaml

Variants files can't be empty.

Message or template

The recipe should not have an empty conda_build_config.yaml file.


CF-005: NoCustomGHAWorkflowsโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: .github/workflows/*.y*ml

Due to its stature in the open-source community, conda-forge has enhanced access to certain CI services. This access is a community resource entrusted to conda-forge for use in building packages. We thus cannot support third-party or "off-label" CI jobs in our feedstocks on any of our CI services. If we find such use, we will politely ask the maintainers to rectify the situation. We may take more serious actions, including archiving feedstocks or removing maintainers from the organization, if the situation cannot be rectified.

Message or template

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.


FC: Feedstock configuration in conda-forge.ymlโ€‹

FC-001: NoDuplicateKeysโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: conda-forge.yml

conda-forge.yml must not contain duplicate keys.

Message or template

The conda-forge.yml file is not allowed to have duplicate keys.


R: All recipe versionsโ€‹

R-000: UnexpectedSectionโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Recipe files must not contain unknown top-level keys.

For recipe version 0, the allowed keys are (in this order):

  • package
  • source
  • build
  • requirements
  • test
  • app
  • outputs
  • about
  • extra

For recipe version 1, it depends if you are generating one or multiple artifacts. For single artifacts, the expected keys are (in this order):

  • schema_version
  • context
  • package
  • source
  • build
  • requirements
  • tests
  • about
  • extra

For multiple artifacts, the expected keys are (in this order):

  • schema_version
  • context
  • recipe
  • source
  • build
  • outputs
  • about
  • extra

Message or template

The top level meta key ${section} is unexpected


R-001: SectionOrderโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The top-level sections of a recipe file must always follow the same order.

Please refer to linter rule R-000 (RecipeUnexpectedSection) for more details.

Message or template

The top level meta keys are in an unexpected order. Expecting ${order}.


R-002: MissingAboutItemโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The about section requires three fields: homepage (home in v1), license, and summary.

Message or template

The ${item} item is expected in the about section.


R-003: NoMaintainersโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

All recipes must list at least one maintainer under extra/recipe-maintainers.

Message or template

The recipe could do with some maintainers listed in the extra/recipe-maintainers section.


R-004: MaintainersMustBeListโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The extra/recipe-maintainers only accepts a list of strings as a value.

Message or template

Recipe maintainers should be a json list.


R-005: RequiredTestsโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

All recipes must have a non-empty test section.

Message or template

The recipe must have some tests.


R-006: RecommendedTestsโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

All recipes must have a non-empty test section.

Message or template

It looks like the '${output}' output doesn't have any tests.


R-007: UnknownLicenseโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

All recipes must have a license identifier, but it can't be "unknown".

Message or template

The recipe license cannot be unknown.


R-008: BuildNumberMissingโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

All recipes must define a build.number value.

Message or template

The recipe must have a build/number section.


R-009: RequirementsOrderโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The different subcategories of the requirements section must follow a strict order: build, host, run, run_constrained.

Message or template

The requirements/ sections should be defined in the following order: ${expected}; instead saw: ${seen}.


R-010: LicenseFieldMentionsLicenseโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Licenses should omit the term 'License' in its name.

Message or template

The recipe license should not include the word "License".


R-011: TooManyEmptyLinesโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Recipe files should end with a single empty line, not more.

Message or template

There are ${n_lines} too many lines. There should be one empty line at the end of the file.


R-012: TooFewEmptyLinesโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Recipe files should end with a single empty line.

Message or template

There are too few lines. There should be one empty line at the end of the file.


R-013: LicenseFamilyโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The field license_file must be always present.

Message or template

license_file entry is missing, but is required.


R-014: InvalidPackageNameโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The recipe name can only contain certain characters:

  • lowercase ASCII letters (a-z)
  • digits (0-9)
  • underscores, hyphens and dots (_, -, .)

Message or template

Recipe name has invalid characters. only lowercase alpha, numeric, underscores, hyphens and dots allowed


R-015: MissingVersionโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The package version field is required.

Message or template

Package version is missing.


R-016: InvalidVersionโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The package version field must be a valid version string.

Message or template

Package version ${version} doesn't match conda spec: ${error}


R-017: PinnedNumpyโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

See https://conda-forge.org/docs/maintainer/knowledge_base.html#linking-numpy

Message or template

Using pinned numpy packages is a deprecated pattern. Consider using the method outlined conda-forge.org > Docs > Maintainer Documentation > Knowledge Base > Building Against NumPy.


R-018: UnexpectedSubsectionโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

This check ensures that the passed recipe conforms to the expected recipe v0 schema.

See schema in conda_build.metadata.FIELDS

Message or template

The ${section} section contained an unexpected subsection name. ${subsection} is not a valid subsection name.


R-019: SourceHashโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

All recipe source URLs must have a hash checksum for integrity checks.

Message or template

When defining a source/url please add a sha256, sha1 or md5 checksum (sha256 preferably).


R-020: NoarchValueโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The build.noarch field can only take python or generic as a value.

Message or template

Invalid noarch value ${given}. Should be one of ${valid}.


R-021: RequirementJoinVersionOperatorโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

conda recipes should use the three-field matchspec syntax to express requirements: name [version [build]]. This means having no spaces between operator and version literals.

Message or template

requirements: ${section}: ${requirement} should not contain a space between relational operator and the version, i.e. ${name} ${pin}


R-022: RequirementSeparateNameVersionโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

conda recipes should use the three-field matchspec syntax to express requirements: name [version [build]]. This means having a space between name and version.

Message or template

requirements: ${section}: ${requirement} must contain a space between the name and the pin, i.e. ${name} ${pin}


R-023: LanguageHostRunโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Packages may depend on certain languages (e.g. Python, R) that require depending on the language runtime both in host and run.

Message or template

If ${language} is a host requirement, it should be a run requirement.


R-024: LanguageHostRunUnpinnedโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Packages may depend on certain languages (e.g. Python, R) that require depending on the language runtime both in host and run. They should not pin it to a particular version when the package is not noarch.

Message or template

Non noarch packages should have ${language} requirement without any version constraints.


R-025: JinjaExpressionโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Jinja expressions should add a space between the double curly braces.

Message or template

Jinja2 variable references are suggested to take a ${dollar}{{<one space><variable name><one space>}} form. See lines ${lines}.


R-026: PythonLowerBoundโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Noarch Python recipes should always pin the lower bound on their python requirement.

Message or template

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.


R-027: PinSubpackagePinCompatibleโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The Jinja functions pin_subpackage and pin_compatible may be confused because both would add version constraints to a package name. However, they have different purposes.

  • pin_subpackage() must be used when the package to be pinned is a known output in the current recipe.
  • pin_compatible() must be used when the package to be pinned is not an output of the current recipe.

Message or template

${should_use} should be used instead of ${in_use} for ${pin} because it is ${what} known outputs of this recipe: ${subpackages}.


R-028: CompiledWheelsNotAllowedโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Python wheels are often discouraged as package sources. This is especially the case for compiled wheels, which are forbidden.

Message or template

Detected compiled wheel(s) in source: ${urls}. This is disallowed. All packages should be built from source except in rare and exceptional cases.


R-029: PureWheelsNotAllowedโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Python wheels are often discouraged as package sources. This is also the case for pure Python wheels when building non-noarch packages.

Message or template

Detected pure Python wheel(s) in source: ${urls}. This is discouraged. Please consider using a source distribution (sdist) instead.


R-030: PureWheelsNotAllowedNoarchโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Python wheels are often discouraged as package sources. However, pure Python wheels may be used as a source for noarch Python packages, although sdists are preferred.

Message or template

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.


R-031: RustLicensesโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

https://conda-forge.org/docs/maintainer/adding_pkgs/#rust

Message or template

Rust packages must include the licenses of the Rust dependencies. For more info, visit: https://conda-forge.org/docs/maintainer/adding_pkgs/#rust


R-032: GoLicensesโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

https://conda-forge.org/docs/maintainer/adding_pkgs/#go

Message or template

Go packages must include the licenses of the Go dependencies. For more info, visit: https://conda-forge.org/docs/maintainer/adding_pkgs/#go


R-033: StdlibJinjaโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

https://github.com/conda-forge/conda-forge.github.io/issues/2102

Message or template

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.


R-034: StdlibSysrootโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

https://github.com/conda-forge/conda-forge.github.io/issues/2102

Message or template

You're setting a requirement on sysroot_linux-<arch> 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.


R-035: StdlibMacOSโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

https://github.com/conda-forge/conda-forge.github.io/issues/2102

Message or template

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.


R-036: NotParsableLintโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The conda recipe should be parsable by at least one backend. If none can parse it, this constitutes an error that needs to be remediated.

Message or template

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.


R-037: NotParsableHintโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The conda recipe should be parsable by at least one backend. Sometimes, only some backends fail, which is not critical, but should be looked into.

Message or template

(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.


R-038: PythonIsAbi3Boolโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

https://github.com/conda-forge/conda-forge.github.io/issues/2102

Message or template

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`.


R-039: ExtraFeedstockNameSuffixโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

https://github.com/conda-forge/conda-forge.github.io/issues/2102

Message or template

The feedstock-name in the extra section must not end with '-feedstock'. The '-feedstock' suffix is automatically appended during feedstock creation.


R-040: VersionParsedAsFloatโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

https://github.com/conda-forge/conda-forge.github.io/issues/2102

Message or template

${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.


R-041: SuggestNoarchโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

noarch packages are strongly preferred when possible. See https://conda-forge.org/docs/maintainer/knowledge_base.html#noarch-builds.

Message or template

Whenever possible python packages should use noarch. See https://conda-forge.org/docs/maintainer/knowledge_base.html#noarch-builds


R-042: ScriptShellcheckReportโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

This issue is raised when shellcheck is enabled and detects problems in your build .sh scripts.

See https://www.shellcheck.net/wiki/ for details on the shellcheck error codes.

Message or template

(dynamic)

Examples

Whenever possible fix all shellcheck findings ('' recipe/*.sh -f diff | git apply' helps)


R-043: ScriptShellcheckFailureโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

This issue is raised when shellcheck is enabled but could not run successfully (something went wrong).

Message or template

There have been errors while scanning with shellcheck.


R-044: LicenseSPDXโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The license field must be a valid SPDX identifier.

See list at licenses.txt.

Message or template

License is not an SPDX identifier (or a custom LicenseRef) nor an SPDX license expression.

Documentation on acceptable licenses can be found conda-forge.org > Docs > Maintainer Documentation > Contributing packages > SPDX Identifiers and Expressions.


R-045: InvalidLicenseExceptionโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

The license field may accept some SPDX exception expressions, as controlled in this file

Message or template

License exception is not an SPDX exception.

Documentation on acceptable licenses can be found conda-forge.org > Docs > Maintainer Documentation > Contributing packages > SPDX Identifiers and Expressions.


R-046: PythonBuildBackendHostโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Build backends in Python packages must be explictly added to host.

Message or template

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.


R-047: PythonMinPinโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Python packages should depend on certain >={min_version} at runtime, but build and test against {min_version}.*.

Message or template

noarch: python recipes should usually follow the syntax in our documentation for specifying the Python version. ${recommendations}

  • 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).

R-048: SpaceSeparatedSpecsโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Prefer name [version [build]] match spec syntax.

Message or template

${output} output has some malformed specs: ${bad_specs_list} Requirement 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.


R-049: OSVersionโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Prefer name [version [build]] match spec syntax.

Message or template

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.


R-050: UsePipโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Python packages should be built with pip install ..., not python setup.py install, which is deprecated.

Message or template

Whenever possible python packages should use pip. See https://conda-forge.org/docs/maintainer/adding_pkgs.html#use-pip


R-051: UsePyPIOrgโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(meta|recipe).yaml

Grayskull and the conda-forge example recipe used to have pypi.io as a default, but the canonical URL is now PyPI.org.

See https://github.com/conda-forge/staged-recipes/pull/27946.

Message or template

PyPI default URL is now pypi.org, and not pypi.io. You may want to update the default source url.


R0: Recipe v0 (meta.yaml)โ€‹

R0-001: FormattedSelectorsโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/meta.yaml

Recipe format v0 (meta.yaml) supports the notion of line selectors as trailing comments:

build:
skip: true # [not win]

These must be formatted with two spaces before the # symbol, followed by one space before the opening square bracket [, followed by no spaces. The closing bracket must not be surrounded by spaces either.

Message or template

Selectors are suggested to take a <two spaces>#<one space>[<expression>] form. See lines ${lines}


R0-002: OldPythonSelectorsLintโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/meta.yaml

Recipe v0 selectors used to include one Python version selector per release, like py27 for Python 2.7 and py35 for Python 3.5. This was deprecated in favor of the py integer, which is preferred.

Message or template

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}


R0-003: OldPythonSelectorsHintโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/meta.yaml

Recipe v0 selectors (see R0-002) used to include one Python version selector per release, like py27 for Python 2.7 and py35 for Python 3.5. This was deprecated in favor of the py integer, which is preferred.

Message or template

Old-style Python selectors (py27, py34, py35, py36) are deprecated. Instead, consider using the int py. For example: # [py>=36]. See lines ${lines}


R0-004: NoarchSelectorsV0โ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/meta.yaml

Noarch packages are not generally compatible with v0 selectors

Message or template

noarch packages can't have ${skips}selectors. If the selectors are necessary, please remove noarch: ${noarch}, or selector on line ${line_number}: ${line}


R0-005: JinjaDefinitionsโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/meta.yaml

In v0 recipes, Jinja definitions must follow a particular style.

Message or template

Jinja2 variable definitions are suggested to take a {%<one space>set<one space><variable name><one space>=<one space><expression><one space>%} form. See lines ${lines}


R0-006: LegacyToolchainโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/meta.yaml

The toolchain package is deprecated. Use compilers as outlined in https://conda-forge.org/docs/maintainer/knowledge_base.html#compilers.

Message or template

Using toolchain directly in this manner is deprecated. Consider using the compilers outlined conda-forge.org > Docs > Maintainer Documentation > Knowledge Base > Compilers.


R1: Recipe v1 (recipe.yaml)โ€‹

R1-001: NoCommentSelectorsโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/recipe.yaml

Recipe v0 selectors (see R0-002) are not supported in v1 recipes.

Message or template

Selectors in comment form no longer work in v1 recipes. Instead, if / then / else maps must be used. See lines ${lines}.


R1-002: NoarchSelectorsV1โ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/recipe.yaml

Noarch packages are not generally compatible with v1 conditional blocks.

Message or template

noarch packages can't have ${skips}selectors. If the selectors are necessary, please remove noarch: ${noarch}.


R1-003: RattlerBldBatโ€‹

  • โ„น๏ธ Hint
  • Added in conda-smithy <3.56
  • Affected path: recipe/recipe.yaml

rattler-build does not use bld.bat scripts, but build.bat.

Message or template

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.


RC: All recipe variants filesโ€‹

RC-000: MacOSDeploymentTargetRenameโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(conda_build_config|variants).yaml

https://github.com/conda-forge/conda-forge.github.io/issues/2102

Message or template

The MACOSX_DEPLOYMENT_TARGET key in ${recipe_config_file} needs to be removed or replaced by c_stdlib_version, appropriately restricted to macOS.


RC-001: MacOSDeploymentTargetBelowโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(conda_build_config|variants).yaml

https://github.com/conda-forge/conda-forge.github.io/issues/2102

Message or template

You are setting c_stdlib_version on macOS below the current global baseline in conda-forge (${baseline_version}).


RC-002: MoreThanOneConfigFileโ€‹

  • ๐Ÿšจ Lint
  • Added in conda-smithy <3.56
  • Affected path: recipe/(conda_build_config|variants).yaml

Only one recipe variants file must be used in a feedstock.

Message or template

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.