317 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			317 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Changelog
 | 
						|
 | 
						|
All notable changes to this project will be documented in this file.
 | 
						|
 | 
						|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 | 
						|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 | 
						|
 | 
						|
## [Unreleased]
 | 
						|
 | 
						|
## [0.8.3] - 2025-07-23
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- Update the list of supported targets from running `rustc --print target-list`
 | 
						|
  with Rust v1.88.0. We kept the legacy targets that would be removed, so we
 | 
						|
  don't have a breaking change. We should remove those in v0.9.
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Fix error handling when trying to create directories for the metadata.
 | 
						|
  It makes working with Nix a little bit easier.
 | 
						|
 | 
						|
## [0.8.2] - 2024-09-27
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- Add support for overriding the CA file path by setting the `HEX_CACERTS_PATH`
 | 
						|
  env var, which is the same that Mix uses. If unset, it will fallback to
 | 
						|
  `CAStore.file_path/0`.
 | 
						|
 | 
						|
## [0.8.1] - 2024-09-11
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Fix return of `available_nifs/1`. It was returning only URLs.
 | 
						|
 | 
						|
- Fix the "rustler_precompiled.download" mix task to use the correct
 | 
						|
  function for the download of artifacts.
 | 
						|
 | 
						|
### Changed
 | 
						|
 | 
						|
- Print SHA256 of artifacts when downloading them from the mix task.
 | 
						|
 | 
						|
## [0.8.0] - 2024-08-28
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- Add support for passing headers or a `{module, :function_name}` to `:base_url`.
 | 
						|
  The headers can be passed in the format `{"URL", [{"header_key", "header_value"}]}`.
 | 
						|
  This feature is useful for people that need to perform authentication before downloading
 | 
						|
  the artifacts.
 | 
						|
 | 
						|
- Add `available_nifs/1` to replace `available_nif_urls/1` that was deprecated.
 | 
						|
  The new function will return a list of tuples in the format: `{"lib_name", {"base_url", [headers]}}`.
 | 
						|
 | 
						|
- Add `current_target_nifs/1` to replace `current_target_nif_urls/1` that was deprecated.
 | 
						|
  The new function will return a list of tuples in the format: `{"lib_name", {"base_url", [headers]}}`.
 | 
						|
 | 
						|
### Deprecated
 | 
						|
 | 
						|
- `available_nif_urls/1`
 | 
						|
- `current_target_nif_urls/1`
 | 
						|
 | 
						|
### Removed
 | 
						|
 | 
						|
- Remove support for Elixir 1.12.
 | 
						|
 | 
						|
## [0.7.3] - 2024-08-28
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Add the `alpine` vendor to the list of Linux vendors that we treat as "unknown".
 | 
						|
 | 
						|
## [0.7.2] - 2024-06-26
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- The `RUSTLER_PRECOMPILED_GLOBAL_CACHE_PATH` environment variable was added to enable
 | 
						|
  an easy way to configure a directory to fetch the artifacts before reaching the internet.
 | 
						|
  This is useful to make more predictable where the cache files will be located, thus
 | 
						|
  enabling users to use that directory as a repository for the artifacts.
 | 
						|
  This env var will affect all packages using this library.
 | 
						|
 | 
						|
 - Add the `RUSTLER_PRECOMPILED_FORCE_BUILD_ALL` env var to force the build of all packages
 | 
						|
   using RustlerPrecompiled. Be aware that `Rustler` will be required if this is set
 | 
						|
   to `1` or `true`. There is a new application env that has precedence over the env var,
 | 
						|
   which is the `:force_build_all`.
 | 
						|
 | 
						|
### Changed
 | 
						|
 | 
						|
- Automatically run the "app.config" mix task in the "rustler_precompiled.download" mix task.
 | 
						|
 | 
						|
  This will trigger the project compilation and configuration, but will not start the app.
 | 
						|
  It's necessary to check if the module passed to the task exists or not.
 | 
						|
 | 
						|
  You can deactivate this behaviour by passing the flag `--no-config` to that mix task.
 | 
						|
  The mix task "rustler_precompiled.download" is used in the step of publishing a package.
 | 
						|
 | 
						|
- Stop throwing an error in case the metadata cannot be written.
 | 
						|
  This is because metadata is only necessary in the process of publishing the package,
 | 
						|
  and users may be running with "write" permission restrictions.
 | 
						|
  We now print a warning instead.
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Restrict the change of vendor to "unknown" only if the target is a Linux system.
 | 
						|
 | 
						|
## [0.7.1] - 2023-11-30
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Fix the URL for variants on download.
 | 
						|
 | 
						|
## [0.7.0] - 2023-09-22
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- Add `:max_retries` option, to control how many times we should try
 | 
						|
  to download a NIF artifact. By default it is going to try 3 times.
 | 
						|
  To disable this feature, use the value `0`.
 | 
						|
 | 
						|
- Add support for variants. This is a feature that enables building
 | 
						|
  for the same target with multiple configurations. It can support
 | 
						|
  different features or OS dependencies. The selection is done in
 | 
						|
  compile time.
 | 
						|
 | 
						|
### Changed
 | 
						|
 | 
						|
- Change default list of NIF versions to only include the version `2.15`.
 | 
						|
  This is because most of the users won't need to activate newer versions,
 | 
						|
  unless they use features from those versions.
 | 
						|
 | 
						|
  This is going to simplify and speed up the release process for most of the
 | 
						|
  projects.
 | 
						|
 | 
						|
## [0.6.3] - 2023-08-28
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Make sure `:nif_versions` option is respected.
 | 
						|
 | 
						|
  This is a small bug fix that was blocking the usage of a more
 | 
						|
  restrict list of "NIF versions". For example, if my system is
 | 
						|
  using NIF version 2.16, but I want to be compatible with only
 | 
						|
  version 2.15, this was being ignored, since the algorithm for
 | 
						|
  finding compatible versions was not taking into account this
 | 
						|
  restriction.
 | 
						|
 | 
						|
## [0.6.2] - 2023-07-05
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- Add support for FreeBSD as a target.
 | 
						|
 | 
						|
### Changed
 | 
						|
 | 
						|
- Remove `:crypto` from the extra applications list, because `:ssl` already includes it.
 | 
						|
 | 
						|
- Update the guide to mention the new way to select a NIF version in Rustler >= 0.29.
 | 
						|
 | 
						|
## [0.6.1] - 2023-02-16
 | 
						|
 | 
						|
### Changed
 | 
						|
 | 
						|
- Depend on `:ssl` instead of `:public_key` application. Since `:public_key` is started
 | 
						|
  with `:ssl`, this shouldn't break. This change is needed in order to support the upcoming
 | 
						|
  Elixir 1.15.
 | 
						|
 | 
						|
## [0.6.0] - 2023-01-27
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- Add support for configuring the NIF versions that the project supports.
 | 
						|
  This can be done with the `:nif_versions` config.
 | 
						|
 | 
						|
- Add support for `castore` version `~> 1.0`.
 | 
						|
 | 
						|
### Changed
 | 
						|
 | 
						|
- Add `aarch64-unknown-linux-musl` and `riscv64gc-unknown-linux-gnu` as default targets.
 | 
						|
  The first one is common for people running Linux containers that were built with Musl on Apple computers.
 | 
						|
  The second one is becoming popular for tiny computers, normally running Nerves.
 | 
						|
 | 
						|
  The adoption of these targets can increase a little bit the compilation time, but
 | 
						|
  can affect a great number of users.
 | 
						|
 | 
						|
  For package maintainers: please remember to add these targets to your CI workflow.
 | 
						|
  See an example workflow at: https://github.com/philss/rustler_precompilation_example/blob/main/.github/workflows/release.yml
 | 
						|
 | 
						|
- Change the depth of SSL peer verification to "3". This should be more compatible with servers.
 | 
						|
 | 
						|
- Remove version "2.14" from the default NIF versions. Like the change of default targets,
 | 
						|
  this should only have effect in the moment of release of a new package version.
 | 
						|
  Remember to update your workflow file.
 | 
						|
 | 
						|
## [0.5.5] - 2022-12-10
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Add support for Suse Linux targets. This is a fix to the plataform resolution. Thanks [@fabriziosestito](https://github.com/fabriziosestito).
 | 
						|
- Fix validation of HTTP proxy. This makes the validation similar to the HTTPS proxy. Thanks [@w0rd-driven](https://github.com/w0rd-driven).
 | 
						|
- Map `riscv64` to `riscv64gc` to match Rust naming. Thanks [@fhunleth](https://github.com/fhunleth).
 | 
						|
 | 
						|
## [0.5.4] - 2022-11-05
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Fix building metadata when "force build" is enabled and the target is not available.
 | 
						|
 | 
						|
## [0.5.3] - 2022-10-19
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Always write the metadata file in compilation time, so mix tasks can work smoothly.
 | 
						|
 | 
						|
## [0.5.2] - 2022-10-03
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Fix the `target/0` function to use default targets a default argument. This makes the example
 | 
						|
  in the docs work again. Thanks [@jackalcooper](https://github.com/jackalcooper).
 | 
						|
- Only use proxy if it is valid. Thanks [@josevalim](https://github.com/josevalim).
 | 
						|
- Fix the support for PCs running RedHat Linux. Thanks [@Benjamin-Philip](https://github.com/Benjamin-Philip).
 | 
						|
- Improve some points in the docs. Thanks [@whatyouhide](https://github.com/whatyouhide) and [@fabriziosestito](https://github.com/fabriziosestito).
 | 
						|
 | 
						|
## [0.5.1] - 2022-05-24
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Fix available targets naming to include the NIF version in the name. It was removed accidentally.
 | 
						|
  Thanks [@adriankumpf](https://github.com/adriankumpf).
 | 
						|
 | 
						|
## [0.5.0] - 2022-05-24
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- Now it's possible to configure the targets list, based in the [Rust's Plataform Support](https://doc.rust-lang.org/stable/rustc/platform-support.html)
 | 
						|
  list. You can run `rustc --print target-list` to get the full list.
 | 
						|
  Thanks [@adriankumpf](https://github.com/adriankumpf).
 | 
						|
 | 
						|
### Changed
 | 
						|
 | 
						|
- The precompilation guide was improved with instructions and suggestions for the `files` key at
 | 
						|
  the project config.
 | 
						|
  Thanks [@nbw](https://github.com/nbw).
 | 
						|
- Now we raise with a different error if the NIF artifact cannot be written when downloading to create
 | 
						|
  the checksum file.
 | 
						|
 | 
						|
## [0.4.1] - 2022-04-28
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Fix `__using__` macro for when Rustler is not loaded.
 | 
						|
 | 
						|
## [0.4.0] - 2022-04-28
 | 
						|
 | 
						|
### Changed
 | 
						|
 | 
						|
- Make Rustler an optional dependency. This makes installation faster for most of the users.
 | 
						|
 | 
						|
## [0.3.0] - 2022-03-26
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- Add the possibility to skip the download of unavailable NIFs when generating the
 | 
						|
  checksum file - thanks [@fahchen](https://github.com/fahchen)
 | 
						|
 | 
						|
## [0.2.0] - 2022-02-18
 | 
						|
 | 
						|
### Fixed
 | 
						|
 | 
						|
- Fix validation of URL in order to be compatible with Elixir ~> 1.11.
 | 
						|
  The previous implementation was restricted to Elixir ~> 1.13.
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- Add `:force_build` option that fallback to `Rustler`. It passes all options
 | 
						|
  except the ones used by `RustlerPrecompiled` down to `Rustler`.
 | 
						|
  This option will be by default `false`, but if the project is using a pre-release,
 | 
						|
  then it will always be set to `true`.
 | 
						|
  With this change the project starts depending on Rustler.
 | 
						|
 | 
						|
### Changed
 | 
						|
 | 
						|
- Relax dependencies to the minor versions.
 | 
						|
 | 
						|
## [0.1.0] - 2022-02-16
 | 
						|
 | 
						|
### Added
 | 
						|
 | 
						|
- Add basic features to download and use the precompiled NIFs in a safe way.
 | 
						|
 | 
						|
[Unreleased]: https://github.com/philss/rustler_precompiled/compare/v0.8.3...HEAD
 | 
						|
[0.8.3]: https://github.com/philss/rustler_precompiled/compare/v0.8.2...v0.8.3
 | 
						|
[0.8.2]: https://github.com/philss/rustler_precompiled/compare/v0.8.1...v0.8.2
 | 
						|
[0.8.1]: https://github.com/philss/rustler_precompiled/compare/v0.8.0...v0.8.1
 | 
						|
[0.8.0]: https://github.com/philss/rustler_precompiled/compare/v0.7.3...v0.8.0
 | 
						|
[0.7.3]: https://github.com/philss/rustler_precompiled/compare/v0.7.2...v0.7.3
 | 
						|
[0.7.2]: https://github.com/philss/rustler_precompiled/compare/v0.7.1...v0.7.2
 | 
						|
[0.7.1]: https://github.com/philss/rustler_precompiled/compare/v0.7.0...v0.7.1
 | 
						|
[0.7.0]: https://github.com/philss/rustler_precompiled/compare/v0.6.3...v0.7.0
 | 
						|
[0.6.3]: https://github.com/philss/rustler_precompiled/compare/v0.6.2...v0.6.3
 | 
						|
[0.6.2]: https://github.com/philss/rustler_precompiled/compare/v0.6.1...v0.6.2
 | 
						|
[0.6.1]: https://github.com/philss/rustler_precompiled/compare/v0.6.0...v0.6.1
 | 
						|
[0.6.0]: https://github.com/philss/rustler_precompiled/compare/v0.5.5...v0.6.0
 | 
						|
[0.5.5]: https://github.com/philss/rustler_precompiled/compare/v0.5.4...v0.5.5
 | 
						|
[0.5.4]: https://github.com/philss/rustler_precompiled/compare/v0.5.3...v0.5.4
 | 
						|
[0.5.3]: https://github.com/philss/rustler_precompiled/compare/v0.5.2...v0.5.3
 | 
						|
[0.5.2]: https://github.com/philss/rustler_precompiled/compare/v0.5.1...v0.5.2
 | 
						|
[0.5.1]: https://github.com/philss/rustler_precompiled/compare/v0.5.0...v0.5.1
 | 
						|
[0.5.0]: https://github.com/philss/rustler_precompiled/compare/v0.4.1...v0.5.0
 | 
						|
[0.4.1]: https://github.com/philss/rustler_precompiled/compare/v0.4.0...v0.4.1
 | 
						|
[0.4.0]: https://github.com/philss/rustler_precompiled/compare/v0.3.0...v0.4.0
 | 
						|
[0.3.0]: https://github.com/philss/rustler_precompiled/compare/v0.2.0...v0.3.0
 | 
						|
[0.2.0]: https://github.com/philss/rustler_precompiled/compare/v0.1.0...v0.2.0
 | 
						|
[0.1.0]: https://github.com/philss/rustler_precompiled/releases/tag/v0.1.0
 |