Releases: conda/rattler
v0.10.0
✨ Highlights
The solver has been renamed and moved to its own repository: resolvo.
With the latest changes to the python bindings you can now download repodata and solve environments!
Still no official release of the bindings though, but getting closer every day.
📃 Details
Added
Changed
- the solver has been extracted in its own package: resolvo by @baszalmstra in #349 & #350
Fixed
🐍 Python
- add more py-rattler types by @Wackyator in #348
- add fetch repo data to py-rattler by @Wackyator in #334
- use SparseRepoData in fetch_repo_data by @Wackyator in #359
- add solver by @Wackyator in #361
🤗 New Contributors
Full Changelog: v0.9.0...v0.10.0
v0.9.0
✨ Highlights
This is a pretty substantial release which includes many refactors to the solver (which we will pull out of this repository at some point), initial work on Python bindings, and many many fixes.
📃 Details
Added
- pixi project to make contributing easier by @YeungOnion in #283, #342
- make rattler-package-streaming compile with wasm by @wolfv in #287
- implement base_url cep by @baszalmstra in #322
- use emscripten-wasm32 and wasi-wasm32 by @wolfv in #333
- add build_spec module by @YeungOnion in #340, #346
Changed
- use normalized package names where applicable by @baszalmstra in #285
- new
StrictVersion
type for VersionSpec ranges. by @tdejager in #296 - refactored ratter_libsolv_rs to be conda agnostic by @tdejager & @baszalmstra in #316, #309, #317, #320, #319, #323, #324, #328, #325, #326, #335, #336, #338, #343, #337
- feat: allow disabling jlap by @baszalmstra in #327
- test: added job to check for lfs links by @tdejager in #331
- hide implementation detail, version_spec::Constraint by @YeungOnion in #341
Fixed
- typo in solver error message by @baszalmstra in #284
- expose ParseMatchSpecError in rattler_conda_types by @Wackyator in #286
- use nvidia-smi on musl targets to detect Cuda by @baszalmstra in #290
- typo in snap file by @wolfv in #291
- Version::is_dev returning false for dev version (fix #289) by @Wackyator in #293
- workaround for
PIP_REQUIRE_VIRTUALENV
env variable by @tusharsadhwani in #294 - ensure consistent sorting of locked packages by @baszalmstra in #295
- updates to
NamelessMatchSpec
to allow deserializing by @travishathaway in #299 - update all dependencies and fix chrono deprecation by @wolfv in #302
- shell improvements for powershell env-var escaping and xonsh detection by @wolfv in #307
- also export strict version by @wolfv in #312
- make FetchRepoDataOptions clonable by @Wackyator in #321
- bump json-patch 1.1.0 to fix stack overflow by @baszalmstra in #332
- emscripten is a unix variant by @wolfv in #339
- authentication fallback storage location by @ruben-arts in #347
🐍 Python
Although this release doesn't include a formal release of the python bindings yet, a lot of work has been done to work towards a first version.
- initial version of rattler python bindings by @baszalmstra in #279
- bind
Version
,MatchSpec
,NamelessMatchSpec
by @Wackyator in #292 - add more tests, hash and repr changes by @baszalmstra in #300
- add license by @Wackyator in #301
- bind channel types to py-rattler by @wolfv in #313
- bind everything necessary for shell activation by @wolfv in #298
- add mypy checks by @baszalmstra in #314
- bind
AuthenticatedClient
by @Wackyator in #315 - add
py.typed
file by @baszalmstra in #318 - bind
VersionWithSource
by @Wackyator in #304
🤗 New Contributors
- @Wackyator made their first contribution in #286
- @YeungOnion made their first contribution in #283
- @tusharsadhwani made their first contribution in #294
To all contributors, thank you for your amazing work on Rattler. This project wouldn't exist without you! 🙏
v0.8.0
Highlights
This release contains bug fixes.
Details
Added
- retry behavior when downloading package archives by @baszalmstra in (#281)
Fixed
- parsing of local versions in
Constraint
s by @baszalmstra in (#280)
v0.7.0
Highlights
This release mostly contains bug fixes.
Details
Added
- Rattler is now also build for Linux aarch64 in CI by @pavelzw in (#272)
FromStr
forShellEnum
by @ruben-arts in (#258)
Changed
- Run activation scripts and capture their output by @baszalmstra in (#239)
- If memory mapping fails during installation the entire file is read instead by @baszalmstra in (#273)
- Constraints parsing to improve performance and error messages by @baszalmstra in (#254)
- Added explicit error in case repodata does not exist on the server by @ruben-arts in (#256)
- Code signing on apple platform now uses
codesign
binary instead ofapple-codesign
crate by @wolfv in (#259)
Fixed
Shell::run_command
ends with a newline by @baszalmstra in (#262)- Formatting of environment variable in fish by @ruben-arts in (#264)
- Suppress stderr and stdout from codesigning by @wolfv in (#265)
- All crates have at least basic documentation by @wolfv in (#268)
- Use
default_cache_dir
in the rattler binary by @wolfv in (#269) - Corrupted tar files generated by rattler-package-streaming by @johnhany97 in (#276)
- Superfluous quotes in the
content-hash
of conda lock files by @baszalmstra in (#277) subdir
andarch
fields when convertingRepoDataRecord
to aLockedDependency
in conda-lock format by @wolfv in (#255)
v0.6.0
Highlights
New rust based solver implementation
This version of rattler includes a new solver implementation!
@aochagavia worked hard on porting libsolv to rust and integrating that with rattler_solve
.
The port performs slightly faster or similar to the original C code and does not contain unsafe code, is well documented, and thread-safe.
Our implementation (rattler_libsolv_rs
) is specific to solving conda packages by leveraging rattler_conda_types
for matching and parsing.
Some performance benchmarks taken on Apple M2 Max.
libsolv-c | libsolv-rs | |
---|---|---|
python=3.9 | 7.3734 ms | 4.5831 ms |
xtensor, xsimd | 5.7521 ms | 2.7643 ms |
tensorflow | 654.38 ms | 371.59 ms |
quetz | 1.2577 s | 1.3807 s |
tensorboard=2.1.1, grpc-cpp=1.39.1 | 474.76 ms | 132.79 ms |
Run
cargo bench libsolv
to check the results on your own machine.
Besides the much improved implementation the new solver also provides much better error messages based on the work from mamba.
When a conflict is detected the incompatibilities are analyzed and displayed with a more user-friendly error message.
The following packages are incompatible
|-- asdf can be installed with any of the following options:
|-- asdf 1.2.3 would require
|-- C >1, which can be installed with any of the following options:
|-- C 2.0.0
|-- C 1.0.0 is locked, but another version is required as reported above
rattler-solve
has also been refactored to accommodate this change.
It is now more easily possible to switch between solvers add runtime by writing functions that are generic on the solver.
The solvers now live in a separate module rattler_solve::libsolv_c
for the original libsolv C implementation and rattler_solve::libsolv_rs
for the rust version.
Both solvers can be enabled with feature flags. The default features only select libsolv_c
.
Caching of activation scripts
This release contains code to execute an activation script and capture the changes it made to the environment.
Caching the result of an activation script can be useful if you need to invoke multiple executables from the same environment.
Details
Added
- Run activation scripts and capture their output by @baszalmstra in (#239)
- Support for sha256 and md5 field in matchspec by @0xbe7a in (#241)
- A rust port of libsolv as an additional solver backend by @aochagavia, @baszalmstra in (#243 & #253)
- Test cases and benchmarks for solver implementations by @baszalmstra in (#250 & #250)
- The ability to add a dependency from
python
onpip
while loading repodata @wolfv in (#238)
Changed
- Completely refactored version parsing by @baszalmstra in (#240)
- Refactored solver interface to allow generic use of solver implementations by @baszalmstra in (#245)
- Also check if credentials stored under wildcard host by @wolfv in (#252)
Fixed
- Compilation issues by @wolfv in (#244)
- Add missing
From<VersionWithSource>
forVersion
by @baszalmstra in (#246) - Optimized libsolv port by removing redundant MatchSpec parsing by @baszalmstra in (#246)
- Optimized libsolv port by caching matching Solvables by @baszalmstra in (#251)
v0.5.0
v0.4.0
Highlights
A new algorithm was introduced to sort PackageRecord
s in a topological order based on their dependencies.
Sorting in this way provides a deterministic way of sorting packages in the order in which they should be installed to avoid clobbering.
The original algorithm was extracted from rattler-server.
Experimental extensions to the conda lock file format have also been introduced to make it possible to completely reproduce the original RepoDataRecord
s from a lock file.
Fixes were made to the MatchSpec
and Version
implementation to catch some corner cases and detecting the current shell has become more robust.
Details
Added
PackageRecord::sort_topologically
to perform a topological sort ofPackageRecord
s (#218)- Experimental fields to be able to reconstruct
RepoDataRecord
from conda lock files. (#221) - Methods to manipulate
Version
s (#229)
Changed
- Refactored shell detection code using
$SHELL
or parent process name (#219) - The error message that is thrown when parsing a
Platform
now includes possible options (#222) - Completely refactored
Version
implementation to reduce memory footprint and increase readability (#227)
Fixed
v0.3.0
Highlights
This release contains lots of fixes, small (breaking) changes, and new features.
The biggest highlights are:
JLAP support
JLAP is a file format to incrementally update a cached repodata.json
without downloading the entire file.
This can save a huge amount of bandwidth for large repodatas that change often (like those from conda-forge).
If you have a previously cached repodata.json
on your system only small JSON patches are downloaded to bring your cache up to date.
The format was initially proposed through a CEP and has been available in conda as an experimental feature since 23.3.0
.
When using rattler you get JLAP support out of the box.
No changes are needed.
Support for local file://
file://
based urls are now supported for all functions that use a Url to download certain data.
rattler_networking
A new crate has been added to facilitate authentication when downloading repodata or packages called rattler_networking
.
Details
Added
- Support for detecting more platforms (#135)
RepoData
is now clonable (#138)RunExportsJson
is now clonable (#169)file://
urls are now supported for package extraction functions (#157)file://
urls are now supported for repodata fetching (#158)- Getting started with rattler using micromamba (#163)
- Add
Platform::arch
function to return the architecture of a given platform (#166) - Extracted Python style JSON formatting into a separate crate (#163)
- Added feature to use
rustls
withrattler_package_streaming
andrattler_repodata_gateway
(#179 & #181) - Expose
version_spec
module (#183) NamelessMatchSpec
a variant ofMatchSpec
that does not include a package name #185)ShellEnum
- a dynamic shell type for dynamic discovery #187)- Exposed the
python_entry_point_template
function (#190) - Enable deserializing virtual packages (#198)
- Refactored CI to add macOS arm64 (#201)
- Support for JLAP when downloading repodata (#197 & #214)
Clone
,Debug
,PartialEq
,Eq
implementations for conda lock types (#213)rattler_networking
to enable accessingrepodata.json
and packages that require authentication (#191)
Changed
FileMode
is now included withprefix_placeholder
is set (#136)rattler_digest
now re-exports commonly used hash types and typed hashes are now used in more placed (instead of strings) [#137 & #153]- Use
Platform
in to detect running operating system (#144) paths.json
is now serialized in a deterministic fashion (#147)- Determine the
subdir
for theplatform
andarch
fields when creating aPackageRecord
from anindex.json
(#145 & #152) Activator::activation
now returns the newPATH
in addition to the script (#151)- Use properly typed
chrono::DateTime<chrono::Utc>
for timestamps instead ofu64
(#157) - Made
ParseError
public and reuseArchiveType
(#167) - Allow setting timestamps when creating package archive (#171)
about.json
andindex.json
are now serialized in a deterministic fashion (#180)- SHA256 and MD5 hashes are computed on the fly when extracting packages (#176
- Change blake2 hash to use blake2b instead of blake2s (#192
- LibSolv error messages are now passed through (#202 & #210)
VersionTree
parsing now usesnom
instead of a complex regex (#206libc
version detection now useslld --version
to properly detect the libc version on the host (#209- Improved version parse error messages (#211
- Parsing of some complex MatchSpecs (#217
Fixed
- MatchSpec bracket list parsing can now handle quoted values (#157)
- Typos and documentation (#164 & #188)
- Allow downloading of repodata.json to fail in some cases (only noarch is a required subdir) (#174)
- Missing feature when using the sparse index (#182)
- Several small issues or missing functionality (#184)
- Loosened strictness of comparing packages in
Transaction
s (#186 - Missing
noarch: generic
parsing inlinks.json
(#189 - Ignore trailing .0 in version comparison (#196
v0.2.0
Added
- Construction methods for NoArchType (#130)
- Function to create package record from index.json + size and hashes (#126)
- Serialization for repodata (#124)
- Functions to apply patches to repodata (#127)
- More tests and evict removed packages from repodata (#128)
- First version of package writing functions (#112)
Changed
- Removed dependency on
clang-sys
during build (#131)
v0.1.0
First initial release