| name | autogluon-conda-upgrade |
| description | 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. |
AutoGluon Conda Feedstock Upgrade Workflow
CRITICAL: DO NOT MERGE PULL REQUESTS. Only create PRs. The user will review and merge them manually.
Step 1: Prerequisites Check
1.1 Check GitHub CLI
gh --version
If not installed, stop and tell the user to install from https://github.com/cli/cli#installation and run gh auth login.
1.2 Check Authentication
gh auth status
If not authenticated, ask user to run gh auth login.
1.3 Gather User Input
Ask for:
- New AutoGluon version number (e.g.,
1.5.0)
- Working directory (default:
~/autogluon-feedstock-upgrade)
Step 2: Setup Working Directory and Fork/Clone Repos
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
Step 3: Compute SHA256 Hash
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.
Step 4: Fetch and Analyze Dependencies
4.1 Get Current (Old) Version
Read from {WORKING_DIR}/autogluon.common-feedstock/recipe/meta.yaml:
{% set version = "X.Y.Z" %}
4.2 Fetch Version Bounds
Fetch _setup_utils.py for both versions:
- New:
https://raw.githubusercontent.com/autogluon/autogluon/refs/tags/v{NEW_VERSION}/core/src/autogluon/core/_setup_utils.py
- Old:
https://raw.githubusercontent.com/autogluon/autogluon/refs/tags/v{OLD_VERSION}/core/src/autogluon/core/_setup_utils.py
Extract DEPENDENT_PACKAGES dictionary and PYTHON_REQUIRES string.
4.3 Fetch Package-Specific Setup Files
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.
4.4 Create Dependency Change Summary
Compare old vs new. Summarize:
- Changed version bounds
- Added dependencies
- Removed dependencies
- Python version changes
Present summary to user and ask for confirmation before proceeding.
Step 5: Update Each Feedstock
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 |
For Each Feedstock:
5.1 Sync Fork and Create Branch (DO THIS FIRST)
cd {WORKING_DIR}/{FEEDSTOCK_NAME}
git fetch upstream
git checkout main
git reset --hard upstream/main
git checkout -b {NEW_VERSION}
5.2 Read Current meta.yaml
After creating branch, read recipe/meta.yaml to understand current structure.
5.3 Update meta.yaml
- Update version:
{% set version = "{NEW_VERSION}" %}
- Update sha256: Use computed hash
- Reset build number:
number: 0
- Update Python version (if changed):
python >={{ python_min }},<{NEW_PYTHON_MAX}
- Update dependency version bounds: Match
DEPENDENT_PACKAGES
Rules:
- Keep
autogluon.* dependencies as =={{ version }}
- Only include dependencies from that package's
setup.py
- Preserve existing comments
- Use conda naming (see Package Name Mappings below)
5.4 Handle python_min Changes
If minimum Python changed, update .ci_support/linux_64_.yaml:
python_min:
- '{NEW_PYTHON_MIN}'
Step 6: Commit and Push
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}
Step 7: Create Pull Requests
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
)"
Step 8: Final Summary
8.1 Provide PR Links
List all 7 created PRs with clickable links.
8.2 Merge Order Reminder
Merge PRs in dependency order:
autogluon.common (no dependencies)
autogluon.features and autogluon.core (parallel)
autogluon.tabular and autogluon.multimodal (parallel)
autogluon.timeseries
autogluon (meta-package)
8.3 Post-Merge Instructions
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
Appendix A: Dependency Tree
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)
Appendix B: URL Patterns
| 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 |
Appendix C: Sample PRs
Appendix D: Package Name Mappings
| PyPI Name | Conda-Forge Name |
|---|
| torch | pytorch |
| Pillow | pillow |
| scikit-learn | scikit-learn |
| PyYAML | pyyaml |
| opencv-python | opencv |
| tensorflow | tensorflow |