This project manages the feedstocks and starts the build pipeline for community repo. All the code in this repository is executed via GitHub Actions.
To add a new repo go to the 'Actions' tab in GitHub and select 'Add repo' action. For input use a conda-forge feedstock. Separate multiple feedstocks by comma.
Example: 7za-feedstock,7zip-feedstock
For all the feedstocks in the list, the tool crawl_deptree.py
will be used to find dependencies.
The resulting list of feedstocks and their dependencies will be forked from conda-forge and added to manifest.yaml
.
If the feedstock has already been forked it will not attempt to fork again. If the feedstock is already in manifest.yaml
then the file won't be modified.
A Pull Request will be opened that will contain any changes made to manifest.yaml
.
*Note: This assumes the default branch is main
in the feedstock, if that changes we will expect errors.
To remove a repo go to the 'Actions' tab in GitHub and select 'Remove repo' action. For input use the repo name.
Example: 7za-feedstock
All feedstocks in the list will be removed from manifest.yaml
and the forks will be deleted.
A Pull Request will be opened that will contain the changes to manifest.yaml
.
If a Pull Request is opened or merged where manifest.yaml has been updated the file will be parsed and additions or changes to it will
trigger a new build.
The action will use the tool crawl_deptree.py
to find dependencies of the feedstocks to be built and create a build order.
If the PR is being merged then the build will run against "main" branch, otherwise it will be on the Pull Request branch.
*Note: There is also a "Manual build feedstock" workflow that takes a list of feedstocks to build as input to run builds manually.
On a schedule defined in update-repo.yml all forks will be synced with upstream.
For any feedstocks that are updated we will use the tool crawl_deptree.py
to find any new dependencies. Any new dependencies will be forked and added to manifest
as well as any commit hashes that were updated. A Pull Request will be created with any changes to manifest.yaml
.
In places were we are just checking if existing feedstocks were updated we use yq to modify manifest.yaml
instead of abs-cli for performance reasons.
There are concerns about how this action will scale once we have significantly more feedstocks.
*Note: A new branch is created everytime this runs if files are changed even if the previous PR is still open.
Pinnings are updated via the "Sync pinnings" workflow that runs on a schedule. This will merge the pinnings from community repo, anacondarecipes, and conda-forge.
If an entry exists in conda_build_config_community.yaml
it will be given preference. Next is AnacondaRecipes, and last is conda-forge. A Pull Request will be created with the changes.
*Note: A new branch is created everytime this runs if files are changed even if the previous PR is still open.
Integration test is run via the "Integration Test" workflow that runs on a schedule. This action will increment the build number in community-integration-test-feedstock and then run a build against that change. It will then wait up to 10 minutes for the new build to appear in community_test channel and attempt to install it. Results are reported to DataDog
SBOM artifact check is run via the "SBOM artifact check" workflow that runs on a schedule. This action will download the repodata and sboms/index files from anaconda.cloud and report any packages in repodata without a matching file in sboms to DataDog
Unless noted below, all feedstocks should be a strict fork from conda-forge without modification.
This feedstock in conda-forge is a public archive which means we were not able to fork it. We made a manual copy but it will not be updated by any automation.
This is a "virtual" package. We use it for libblas, libcblas, liblapack, liblapacke to force those packages to openblas-devel
community-integration-test-feedstock
This is colorama feedstock re-named to be used for integration tests.
This feedstock has been modified from its parent with the addition of recipe_append.yaml
to get the build to work.
Because this is an additional file and not a modification of an existing file we don't expect any issues syncing with the upstream repo.
We maintain a list of pinned packages in conda_build_config.yaml
that we sync from AnacondaRecipes and conda-forge/conda-forge-pinning-feedstock.
Feedstocks for packages in AnacondaRecipes conda_build_config should not be included in community repo.
To support additional pinnings for community repo we have a file conda_build_config_community.yaml
that will be merged with conda_build_config.yaml
when the sync-pinnings workflow is run
In order to remove a pinning from either AnacondaRecipes or conda-forge pinnings add the key with an empty map to conda_build_config_community.yaml
and the github action will remove it from the final file.
Example: key: {}
Tools to be used in github workflows. See tools/README.md
To build a feedstock locally you will need to install abs-cli
and docker
- Setup your workspace. You can change the ref from 'main' to your branch to test changes that aren't merged.
abs workspace init -a https://github.com/anaconda-community/aggregate -r main
abs workspace add-recipe <feedstock>
- Run build.
docker \
run --rm --init \
-v "<path to workspace>:/workspace" \
-v "<path to workspace>/feedstocks/<feedstock>:/recipe" \
-w "/workspace/aggregate" \
public.ecr.aws/y0o4y9o3/anaconda-pkg-build:latest \
/bin/bash \
-c \
'conda build "/recipe" --no-test --output-folder "/workspace/output" --croot "/workspace/croot" --cache-dir "/workspace/cache-dir" --channel "https://staging.continuum.io/community/dev" --channel "https://staging.continuum.io/community/seed"'
Note: This command may change. To get the latest command see https://github.com/anaconda-distribution/rocket-platform/blob/main/sdk/src/abs/workspace.py or check the logs in a recent Prefect build.
To run the integration test locally,
- install Act
- configure act to use a runner
- create a github personal access token and put in a
.env
file
Run update-manifest job:
act -j update-manifest -W .github/workflows/integration-test.yml -s GITHUB_TOKEN