Configuring conda-forge.yml
You can configure how conda-forge is set up and built via the conda-forge.yml
file that is present in the root directory of a feedstock.
Rerendering the feedstock after you modify this file is usually required and always a good idea (see Rerendering feedstocks).
The next section describes in detail the top-level fields in conda-forge.yml
.
Note that each top-level CI provider field supports the upload_packages
option.
When set to False this will override the default behaviour of attempting to
upload packages to anaconda.org, which can be useful for testing. For example:
azure:
upload_packages: False
Top-level fields
- appveyor
- azure
- build_platform
- build_with_mambabuild
- bot
- channel_priority
- channels
- choco
- circle
- conda_build
- conda_build_tool
- conda_forge_output_validation
- conda_install_tool
- conda_solver
- docker
- github
- github_actions
- idle_timeout_minutes
- linux
- linux_aarch64
- linux_ppc64le
- noarch_platforms
- os_version
- osx
- provider
- recipe_dir
- remote_ci_setup
- shellcheck
- skip_render
- templates
- test_on_native_only
- test
- travis
- upload_on_branch
- win
appveyor
The top-level appveyor
key specifies configurations for the Appveyor
CI service. This is usually read-only and should not normally be manually
modified. Tools like conda-smithy may modify this, as needed.
azure
This dictates the behavior of the Azure Pipelines CI service. It is a mapping for Azure-specific configuration options. For example:
azure:
# flag for forcing the building all supported providers
force: False
# toggle for storing the conda build_artifacts directory (including the
# built packages) as an Azure pipeline artifact that can be downloaded
store_build_artifacts: False
# toggle for freeing up some extra space on the default Azure Pipelines
# linux image before running the Docker container for building
free_disk_space: False
# limit the amount of CI jobs running concurrently at a given time
# each OS will get its proportional share of the configured value
max_parallel: 25
# set the timeoutInMinutes field for jobs in the azure pipeline.
# jobs that take longer than this will be cancelled.
# default: 360 (6 hours)
timeout_minutes: 360
# can also be set per-platform via
# settings_linux:
# timeoutInMinutes: 360
Below is an example configuration for setting up a self-hosted Azure agent for Linux:
azure:
settings_linux:
pool:
name: your_local_pool_name
demands:
- some_key -equals some_value
workspace:
clean: all
strategy:
maxParallel: 1
timeoutInMinutes: 360
Below is an example configuration for adding a swapfile on an Azure agent for Linux:
azure:
settings_linux:
swapfile_size: 10GiB
To increase the pagefile size on Windows, use this block:
azure:
settings_win:
variables:
SET_PAGEFILE: 'True'
bot
This field controls the behavior of the auto-tick
bot which issues
automatic version updates/migrations for feedstocks. The current options are
bot:
# can the bot automerge PRs it makes on this feedstock
automerge: true
# only automerge on successful version PRs, migrations are not automerged
automerge: 'version'
# only automerge on successful migration PRs, versions are not automerged
automerge: 'migration'
# only open PRs if resulting environment is solvable, useful for tightly coupled packages
check_solvable: true
# The bot.inspection key in the conda-forge.yml can have one of six possible values:
inspection: hint # generate hints using source code (backwards compatible)
inspection: hint-all # generate hints using all methods
inspection: hint-source # generate hints using only source code
inspection: hint-grayskull # generate hints using only grayskull
inspection: update-all # update recipe using all methods
inspection: update-source # update recipe using only source code
inspection: update-grayskull # update recipe using only grayskull
# any branches listed in this section will get bot migration PRs in addition
# to the default branch
abi_migration_branches:
- v1.10.x
version_updates:
# use this for packages that are updated too frequently
random_fraction_to_keep: 0.1 # keeps 10% of versions at random
The abi_migration_branches
feature is useful to, for example, add a
long-term support (LTS) branch for a package.
build_platform
This is a mapping from the target platform to the build platform for the package
to be built. e.g. the following builds a osx-64
package on the linux-64
build platform using cross-compiling.
build_platform:
osx_64: linux_64
Leaving this field empty implicitly requests to build a package natively. i.e.
build_platform:
linux_64: linux_64
linux_ppc64le: linux_ppc64le
linux_aarch64: linux_aarch64
osx_64: osx_64
osx_arm64: osx_arm64
win_64: win_64
build_with_mambabuild
This option has been deprecated. See conda_build_tool for more information.
channel_priority
This value sets the conda
solver channel priority for feedstock builds.
The default is strict
. Any valid value for the same setting in the .condarc
is
allowed here.
channels
This parameter has been deprecated. Instead, specify channels in recipe/conda_build_config.yaml
using channel_sources
and channel_targets
. Note that all channels go on a single
line because each line represents a build variant.
channel_sources:
- mysourcechannel1,mysourcechannel2,conda-forge,defaults
channel_targets:
- target_channel target_label
choco
This parameter allows for conda-smithy to run chocoloatey installs on Windows when additional system packages are needed. This is a list of strings that represent package names and any additional parameters. For example,
choco:
# install a package
- nvidia-display-driver
# install a package with a specific version
- cuda --version=11.0.3
This is currently only implemented for Azure Pipelines. The command that is run is
choco install {entry} -fdv -y --debug
. That is, choco install
is executed
with a standard set of additional flags that are useful on CI.
circle
The top-level circle
key specifies configurations for the Circle
CI service. This is usually read-only and should not normally be manually
modified. Tools like conda-smithy may modify this, as needed.
conda_build
Settings in this block are used to control how conda build runs and produces artifacts. The currently supported options are
conda_build:
pkg_format: 2 # makes .conda artifacts
pkg_format: None # makes .tar.bz2 artifacts
# controls the compression level for .conda artifacts
# conda-forge uses a default value of 16 since its artifacts
# can be large. conda-build has a default of 22.
zstd_compression_level: 16
conda_build_tool
Use this option to choose which tool is used to build your recipe. Currently allowed options are:
conda-build
: Vanillaconda build ...
with no explicit solver configuration. Note that it will still respect the value configured in conda_solver, if any.conda-build+classic
:conda build ...
with theclassic
solver enforced.conda-build+conda-libmamba-solver
:conda build ...
with theconda-libmamba-solver
solver enforced.mambabuild
:conda mambabuild ...
as provided byboa
.
conda_forge_output_validation
This field must be set to True
for feedstocks in the conda-forge
GitHub
organization. It enables the required feedstock artifact validation as described
in Output Validation and Feedstock Tokens.
conda_install_tool
Use this option to choose which tool is used to provision the tooling in your feedstock. Currently allowed options are:
conda
:conda install ...
. You can change which solver to use via conda_solver.mamba
:mamba install ...
as provided by the mamba project.conda_solver
has no effect here.
conda_solver
Choose which conda
solver plugin to use for feedstock builds.
Note this configuration might affect conda_build_tool (e.g. when set to conda-build
)
and conda_install_tool (e.g. when set to conda
).
docker
This is a mapping to docker configuration options. These are relatively self-explanatory. The defaults are as follows:
docker:
executable: docker
image: "condaforge/linux-anvil-comp7"
command: "bash"
interactive: True
github
This is mapping of configuration variables for GitHub. The defaults are as follows:
github:
# name of the github organization
user_or_org: conda-forge
# repository name, usually filled in automatically
repo_name: ""
# branch name to execute on
branch_name: main
# branch name to use for rerender+webservices github actions and
# conda-forge-ci-setup-feedstock references
tooling_branch_name: main
github_actions
This dictates the behavior of the Github Actions CI service. It is a mapping for GHA-specific configuration options. For example:
github_actions:
# Is the job using Microsoft hosted free runners or 'self-hosted'.
self_hosted: false
# triggers for actions. Defaults to `['push', 'pull_request']` for
# Microsoft hosted free runners and `['push']` for self-hosted
triggers: []
# Timeout for CI jobs
timeout_minutes: 360
# Cancel in progress builds. Defaults to false for Microsoft hosted
# free runner and true for self-hosted
cancel_in_progress: None
# Maximum number of parallel jobs per build.
max_parallel: None
# Retain build artifacts for inspection
store_build_artifacts: false
# Retention period for built artifacts
artifact_retention_days: 14
For self-hosted runners recipe/conda_build_config.yaml
is used for
specifying labels for the runners.
github_actions_labels:
# use Microsoft free runners
- hosted # [osx or win]
# Use self-hosted runner with custom label
- - self-hosted # [linux and aarch64]
- custom-label # [linux and aarch64]
# Use self-hosted runner from cirun
- cirun-openstack-cpu-large # [linux and ppc64le]
# Use self-hosted gpu runner from cirun
- cirun-openstack-gpu-large # [linux and x86_64]
idle_timeout_minutes
Configurable idle timeout that is either an int or None. Used for packages that don't have chatty enough builds. Currently only implemented in Travis and Circle.
idle_timeout_minutes: 60
linux
The Linux-specific configuration options. This is largely an internal setting. Currently only:
linux:
enabled: False
linux_aarch64
The ARM-specific configuration options. This is largely an internal setting. Currently only:
linux_aarch64:
enabled: False
linux_ppc64le
The PPC-specific configuration options. This is largely an internal setting. Currently only:
linux_ppc64le:
enabled: False
noarch_platforms
Platforms on which to build noarch packages. The preferred default is a
single build on linux_64
.
noarch_platforms: linux_64
To build on multiple platforms, e.g. for simple packages with platform-specific dependencies, provide a list.
noarch_platforms:
- linux_64
- win_64
os_version
This key is used to set the OS versions for linux_*
platforms. Valid entries map a linux platform and arch to either cos6
or cos7
. Currently cos6
is the default for linux-64
. All other linux architectures use CentOS 7. Here is an example that enables CentOS 7 on linux-64
builds
os_version:
linux_64: cos7
osx
The macOSX-specific configuration options. This is largely an internal setting. Currently only:
osx:
enabled: False
provider
Feedstocks in conda-forge do not allow using self-hosted runners of other GitHub organisations.
The provider
field is a mapping from build platform (not target platform) to CI service.
It determines which service handles each build platform. The following are available as
build platforms:
linux_64
osx_64
win_64
linux_aarch64
linux_ppc64le
The following CI services are available:
azure
circle
travis
appveyor
github_actions
None
orFalse
to disable a build platform.default
to choose an appropriate CI (only if available)native
to choose an appropriate CI for native compiling (only if available)emulated
to choose an appropriate CI for compiling inside an emulation of the target platform (only if available)
Note that github_actions
is not available for the conda-forge github organization
except for self-hosted runs to avoid a denial of service due to other critical
infrastructure running on Github actions. Other github organizations may use
github_actions
as a CI provider.
For example, switching linux_64 & osx_64 to build on Travis CI, with win_64 on Appveyor:
provider:
linux_64: travis
osx_64: travis
win_64: appveyor
Currently, x86_64 platforms are enabled, but other build platforms are disabled by default. i.e. an empty provider entry is equivalent to the following:
provider:
linux_64: azure
osx_64: azure
win_64: azure
linux_ppc64le: None
linux_aarch64: None
To enable linux_ppc64le
and linux_aarch64
add the following:
provider:
linux_ppc64le: default
linux_aarch64: default
If a desired build platform is not available with a selected provider
(either natively or with emulation), the build will be disabled. Use the build_platform
field to manually specify cross-compilation when no providers offer a desired build platform.
recipe_dir
The relative path to the recipe directory. The default is:
recipe_dir: recipe
remote_ci_setup
This option can be used to override the default conda-forge-ci-setup
package.
Can be given with ${url or channel_alias}::package_name
, defaults to conda-forge
channel_alias if no prefix is given.
remote_ci_setup: "conda-forge-ci-setup=3"
shellcheck
Shell scripts used for builds or activation scripts can be linted with shellcheck. This is not enabled by default, but can be enabled like so:
shellcheck:
enabled: True
skip_render
This option specifies a list of files which conda smithy will skip rendering.
The possible values can be a subset of .gitignore
, .gitattributes
, README.md
, LICENSE.txt
.
The default value is an empty list [ ], i.e. all these four files will be generated by conda smithy.
For example, if you want to customize .gitignore and LICENSE.txt files on your own, you should have the following configuration.
skip_render:
- .gitignore
- LICENSE.txt
templates
This is mostly an internal field for specifying where templates files live. You shouldn't need it.
test_on_native_only
This is used for disabling testing for cross compiling. Default is false
test_on_native_only: True
This has been deprecated in favor of the test top-level field. It is now mapped to test: native_and_emulated
.
test
This is used to configure on which platforms a recipe is tested. Default is all
.
test: native_and_emulated
Will do testing only if the platform is native or if there is an emulator.
test: native
Will do testing only if the platform is native.
travis
The top-level travis
key specifies configurations for the Travis
CI service. This is usually read-only and should not normally be manually
modified. Tools like conda-smithy may modify this, as needed.
upload_on_branch
This parameter restricts uploading access on work from certain branches of the
same repo. Only the branch listed in upload_on_branch
will trigger uploading
of packages to the target channel. The default is to skip this check if the key
upload_on_branch
is not in conda-forge.yml
. To restrict uploads to the
main branch:
upload_on_branch: main
win
The Windows-specific configuration options. This is largely an internal setting. Currently only:
win:
enabled: False