conda / conda/constructor

Allow user to specify bootstrapper version in recipe

Open
#1,252 0 comments 0 reactions 0 assignees View on GitHub
type::feature
Dominant language
Python
Stars
497
Forks
181
Avg merge
1d 16h
Merged PRs (30d)
17

Description

### Checklist

- [x] I added a descriptive title
- [x] I searched open requests and couldn't find a duplicate

### What is the idea?

Add a `bootstrapper` field (name TBD) to `construct.yaml` that allows specifying a MatchSpec for `conda-standalone`. Then `constructor` would solve this spec against the recipe's `channels`, download the package, extract the binary, and use it for the build.

As a dummy example:

```yaml
name: MyInstaller
version: "1.0"
channels:
- conda-forge
bootstrapper: conda-standalone>=24.9,<25
specs:
- python=3.11
```

### Why is this needed?

Currently, the `conda-standalone` version bundled in installers is opaque:

1. It's determined by what's installed in the build environment or passed via `--conda-exe`
2. After an installer is built, there's no practical way to determine which version was used
3. This makes reproducing older installers difficult or impossible

A potential pain point users can run into is **GLIBC compatibility** - newer `conda-standalone` builds may require higher GLIBC versions, breaking installers on older Linux systems. Without knowing which version was originally used, users cannot rebuild compatible installers.

### What should happen?

1. User adds `bootstrapper: conda-standalone>=24.9,<25` to their `construct.yaml`
2. Constructor solves this spec against the recipe's `channels`
3. Constructor downloads and extracts the matching `conda-standalone` package
4. The extracted binary is used for the build (same as if passed via `--conda-exe`)
5. The resolved version is recorded in build metadata

When `bootstrapper` is not specified, current behavior is preserved (use `--conda-exe` or the default from the build environment); backwards compatibility.

### Additional Context

**Open questions for discussion:**

- **Field naming:** `bootstrapper` vs `conda_standalone_spec` vs `conda_exe_spec`
- **Precedence:** How does this interact with `--conda-exe` CLI argument and the default `sys.prefix/standalone_conda/conda.exe`?
- **Micromamba support:** Should this also support `micromamba` as an alternative?
- **Error handling:** Hard-fail or fallback if the spec cannot be satisfied?

There are likely more but just for the sake of bookkeeping.

Contributor guide

Open the contributing guide

Research direction

Start with the recipe's construct.yaml field and trace how --conda-exe and the default sys.prefix/standalone_conda/conda.exe are selected. Clarify the field name, precedence, error handling, and whether micromamba is included before implementing resolution against the recipe channels. Done means the requested conda-standalone version is downloaded, extracted, used for the build, recorded in metadata, and omitted fields preserve current behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
build-system
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.