Automate AutoGluon conda-forge feedstock version upgrades. Use when the user wants to upgrade AutoGluon to a new version in conda-forge, create PRs for AutoGluon conda feedstocks, or update autogluon.common, autogluon.core, autogluon.features, autogluon.tabular, autogluon.multimodal, autogluon.timeseries, or autogluon meta-package feedstocks.
CRITICAL: DO NOT MERGE PULL REQUESTS. Only create PRs. The user will review and merge them manually.
gh --version
If not installed, stop and tell the user to install from https://github.com/cli/cli#installation and run gh auth login.
gh auth status
If not authenticated, ask user to run gh auth login.
Ask for:
1.5.0)~/autogluon-feedstock-upgrade)mkdir -p {WORKING_DIR}
cd {WORKING_DIR}
gh repo fork conda-forge/autogluon.common-feedstock --clone=true --remote=true
gh repo fork conda-forge/autogluon.features-feedstock --clone=true --remote=true
gh repo fork conda-forge/autogluon.core-feedstock --clone=true --remote=true
gh repo fork conda-forge/autogluon.tabular-feedstock --clone=true --remote=true
gh repo fork conda-forge/autogluon.multimodal-feedstock --clone=true --remote=true
gh repo fork conda-forge/autogluon.timeseries-feedstock --clone=true --remote=true
gh repo fork conda-forge/autogluon-feedstock --clone=true --remote=true
curl -sL "https://github.com/autogluon/autogluon/archive/refs/tags/v{NEW_VERSION}.tar.gz" -o /tmp/autogluon-{NEW_VERSION}.tar.gz
openssl sha256 /tmp/autogluon-{NEW_VERSION}.tar.gz | awk '{print $2}'
rm /tmp/autogluon-{NEW_VERSION}.tar.gz
If curl fails with 404, ask user to verify the version number.
Read from {WORKING_DIR}/autogluon.common-feedstock/recipe/meta.yaml:
{% set version = "X.Y.Z" %}
Fetch _setup_utils.py for both versions:
https://raw.githubusercontent.com/autogluon/autogluon/refs/tags/v{NEW_VERSION}/core/src/autogluon/core/_setup_utils.pyhttps://raw.githubusercontent.com/autogluon/autogluon/refs/tags/v{OLD_VERSION}/core/src/autogluon/core/_setup_utils.pyExtract DEPENDENT_PACKAGES dictionary and PYTHON_REQUIRES string.
For each subpackage (common, features, core, tabular, multimodal, timeseries, autogluon), fetch:
https://raw.githubusercontent.com/autogluon/autogluon/refs/tags/v{NEW_VERSION}/{SUBPACKAGE}/setup.py
The install_requires shows which DEPENDENT_PACKAGES each subpackage needs.
Compare old vs new. Summarize:
Present summary to user and ask for confirmation before proceeding.
Process in dependency order:
| Order | Feedstock | Dependencies |
|---|---|---|
| 1 | autogluon.common-feedstock | (none) |
| 2 | autogluon.features-feedstock | common |
| 3 | autogluon.core-feedstock | common |
| 4 | autogluon.tabular-feedstock | core, features |
| 5 | autogluon.multimodal-feedstock | core |
| 6 | autogluon.timeseries-feedstock | core, tabular |
| 7 | autogluon-feedstock | all subpackages |
cd {WORKING_DIR}/{FEEDSTOCK_NAME}
git fetch upstream
git checkout main
git reset --hard upstream/main
git checkout -b {NEW_VERSION}
After creating branch, read recipe/meta.yaml to understand current structure.
{% set version = "{NEW_VERSION}" %}number: 0python >={{ python_min }},<{NEW_PYTHON_MAX}DEPENDENT_PACKAGESRules:
autogluon.* dependencies as =={{ version }}setup.pyIf minimum Python changed, update .ci_support/linux_64_.yaml:
python_min:
- '{NEW_PYTHON_MIN}'
For each feedstock:
cd {WORKING_DIR}/{FEEDSTOCK_NAME}
git add recipe/meta.yaml
git commit -m "Update to v{NEW_VERSION}"
git push -u origin {NEW_VERSION}
For each feedstock:
cd {WORKING_DIR}/{FEEDSTOCK_NAME}
gh pr create \
--repo conda-forge/{FEEDSTOCK_NAME} \
--title "Update to v{NEW_VERSION}" \
--body "$(cat <<'EOF'
## Summary
- Update {PACKAGE_NAME} to version {NEW_VERSION}
- Updated dependency version bounds from upstream
## Dependency Changes
{LIST_RELEVANT_CHANGES}
## Checklist
* [x] Used a personal fork of the feedstock to propose changes
* [x] Reset the build number to `0`
* [ ] Re-rendered (Use `@conda-forge-admin, please rerender` in a comment)
EOF
)"
List all 7 created PRs with clickable links.
Merge PRs in dependency order:
autogluon.common(no dependencies)autogluon.featuresandautogluon.core(parallel)autogluon.tabularandautogluon.multimodal(parallel)autogluon.timeseriesautogluon(meta-package)
After each PR's CI passes:
- Comment:
@conda-forge-admin, please rerender- Wait for rerender bot to update
- Once CI passes again, merge
- Wait for package to be published before merging dependent PRs
autogluon.common (base - no AG deps)
│
├── autogluon.features (depends: common)
│
├── autogluon.core (depends: common)
│ │
│ ├── autogluon.tabular (depends: core, features)
│ │
│ ├── autogluon.multimodal (depends: core)
│ │
│ └── autogluon.timeseries (depends: core, tabular)
│
└── autogluon [meta-package] (depends: all subpackages)
| Resource | URL |
|---|---|
| Release tarball | https://github.com/autogluon/autogluon/archive/refs/tags/v{VERSION}.tar.gz |
| Version bounds file | https://raw.githubusercontent.com/autogluon/autogluon/refs/tags/v{VERSION}/core/src/autogluon/core/_setup_utils.py |
| Package setup.py | https://raw.githubusercontent.com/autogluon/autogluon/refs/tags/v{VERSION}/{SUBPACKAGE}/setup.py |
| PyPI Name | Conda-Forge Name |
|---|---|
| torch | pytorch |
| Pillow | pillow |
| scikit-learn | scikit-learn |
| PyYAML | pyyaml |
| opencv-python | opencv |
| tensorflow | tensorflow |