Skip to content

Releases: conda/rattler

v0.10.0

02 Oct 15:00
Compare
Choose a tag to compare

✨ 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

Fixed

  • Change solver implementation doc comment by @nichmor in #352

🐍 Python

🤗 New Contributors

Full Changelog: v0.9.0...v0.10.0

v0.9.0

22 Sep 13:07
Compare
Choose a tag to compare

✨ 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

Changed

Fixed

🐍 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.

🤗 New Contributors

To all contributors, thank you for your amazing work on Rattler. This project wouldn't exist without you! 🙏

v0.8.0

22 Aug 15:14
Compare
Choose a tag to compare

Highlights

This release contains bug fixes.

Details

Added

Fixed

v0.7.0

11 Aug 12:58
Compare
Choose a tag to compare

Highlights

This release mostly contains bug fixes.

Details

Added

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 of apple-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 and arch fields when converting RepoDataRecord to a LockedDependency in conda-lock format by @wolfv in (#255)

v0.6.0

07 Jul 14:38
Compare
Choose a tag to compare

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

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

v0.5.0

30 Jun 13:47
Compare
Choose a tag to compare

Highlights

A bug fix release

Details

Added

  • More control over how the PATH is altered during activation (#232)

Fixed

  • Reconstructing of RepoData from conda lock files for local channels (#231)
  • Powershell on Linux (#234)
  • Proper parsing of >2.10* as >=2.10 (#237)

v0.4.0

23 Jun 12:57
Compare
Choose a tag to compare

Highlights

A new algorithm was introduced to sort PackageRecords 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 RepoDataRecords 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 of PackageRecords (#218)
  • Experimental fields to be able to reconstruct RepoDataRecord from conda lock files. (#221)
  • Methods to manipulate Versions (#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

  • Issue with parsing matchspecs that contain epochs (#220)
  • Zsh activation scripts invoke .sh scripts (#223)
  • Detect the proper powershell parent process (#224)

v0.3.0

15 Jun 15:07
Compare
Choose a tag to compare

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 with rattler_package_streaming and rattler_repodata_gateway (#179 & #181)
  • Expose version_spec module (#183)
  • NamelessMatchSpec a variant of MatchSpec 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 accessing repodata.json and packages that require authentication (#191)

Changed

  • FileMode is now included with prefix_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 the platform and arch fields when creating a PackageRecord from an index.json (#145 & #152)
  • Activator::activation now returns the new PATH in addition to the script (#151)
  • Use properly typed chrono::DateTime<chrono::Utc> for timestamps instead of u64 (#157)
  • Made ParseError public and reuse ArchiveType (#167)
  • Allow setting timestamps when creating package archive (#171)
  • about.json and index.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 uses nom instead of a complex regex (#206
  • libc version detection now uses lld --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 Transactions (#186
  • Missing noarch: generic parsing in links.json (#189
  • Ignore trailing .0 in version comparison (#196

v0.2.0

24 Mar 17:25
Compare
Choose a tag to compare

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

16 Mar 17:30
421b568
Compare
Choose a tag to compare

First initial release