- Added a new
--min-age-daysflag that tellsubito only consider releases at least that old. This is useful for mitigating supply chain attacks, especially for projects that use GitHub's immutable releases feature. GH #145.
- This is the same as 0.8.3, but I had to publish this with a new tag because of a failed experiment with using GitHub's new immutable releases feature.
- Fixed a bug where
ubiwould pick an asset with64in the name when trying to pick the best match on a 64-bit platform. This could include things likeproject-Linux-1.64.0.tgz, where the64is part of the version. Now it uses a pickier regex that looks for actual CPU architecture names, likex86-64orarm64. - Made it possible to use
ubion Android. - Added
linuxstaticas a string to look for when checking for Linux asset names. Apparently, theyaotool produces assets with this string in the name (why the hate for dashes, I ask?). Reported by @egnor (Daniel Egnor). GH #142. - Improved libc matching. Previously, this only checked for literal substrings like
-gnuor-musl. This meant that an asset name with dashes, likefoo_linux_musl.tar.gz, would not be matched. Now this uses regexes to better match the libc name. Reported by @egnor (Daniel Egnor). GH #142. - When on a platform with musl as its libc,
ubiwill now prefer an asset with an explicit indication that it was compiled with musl over an asset with no libc indication in the name. In other words, it will preferproject-linux-x86-64-musl.tar.gzoverproject-linux-x86-64.tar.gz. Suggested by @egnor (Daniel Egnor). GH #142.
- Fixed a bug introduced in 0.8.0, which caused
ubito prefer thebrowser_download_urlover theurlfor a GitHub asset. When both are present, it will now use theurlfield. This is important because when downloading assets from a private repo, theurlwill work with the authentication headers thatubisets. Fixed by @rnaveiras (Raúl Naveiras). GH #139. - Added more context to errors and made
ubidisplay the full error context when it fails. This should help with debugging issues like #136.
- The change in 0.7.4 to look for "arm" on macOS caused
ubito not respect the--matchingoption. Reported (#137) and fixed (#138) by @prashantv.
- Added support for releases done via Codeberg/Forgejo. Based on PR #107 from @pepicrft (Pedro Piñera Buendía).
- Changed macOS on ARM artifact name matching to look for "arm", not just "arm64", before looking
for 64-bit names. This means that
ubiwill pick something like "foo-macos-arm.tgz" over "foo-macos-x86-64.tgz" on the macOS ARM platform. Implemented by !itochan (Kazunori Jo). GH #132. - Added support for Zstd compression with both standalone files and tarballs. Implemented by @alaviss. GH #134.
- Fixed handling of the
--rename-exe-tooption. For some file types, like.AppImagefiles, this would preserve the extension on the file even if the value passed to--rename-exe-todid not include the extension. This contradicted the documentation, which said that the name was used as given. Reported by @pale3(Marko Rakamaric). GH #129. - Fixed regressions introduced in 0.7.0 by eliminating default features for
clap, which made the CLI experience generally worse.
- Added support for 7-Zip archives (
.7z). Based on PR #115130 from @yjoer (Yeoh Joer). - Added support for projects on GitLab with more than one slash in the path name, like https://gitlab.com/gitlab-com/gl-infra/terra-transformer. GitLab allows for more path components in project names, unlike GitHub. Based on PR #115 from @suprememoocow (Andrew Newdigate).
- Added support for release artifacts with
.shand.pyextension. Based on PR #127 from @Finkregh (Oluf Lorenzen ).
- Added support for release artifacts with a
.pharextension. Based on PR #126 from @dpassen (Derek Passen).
- Set the minimum support Rust version (MSRV) of the
ubicrate to 1.85.
- Added a new
--matching-regexCLI flag andUbiBuilder::matching_regexmethod. This regex is matched against potential release filenames before attempting to find a release with a matching OS, architecture, etc. This is useful for doing things like filtering for a single tool when a project releases multiple tools in a single GitHub release. PR by @yjoer (Yeoh Joer). GH #122. - The logic for determining whether or not to include a top-level directory when
--extract-allis passed has been fixed. Previously, if the directory where the archive was extracted into was not empty, then whenubichecked for whether it should ignore a top-level directory in the archive, it would see these files, and never ignore the top-level directory. Now it extracts the archive into a temp directory and checks that. This makes the behavior of--extract-allmore predictable, and it means you can use to, for example, extract an archive into an existing tree, like~/.local, that contains~/.local/bin,~/.local/share, etc. Reported by @jinnatar (Jinna Kiisuo). GH #106. - Changed dependency declarations to mostly eliminate default features, which removed quite a few transitive dependencies.
- Upgraded the dependency on
zipto 2.4.1. Previously,ubipinnedzip2.2.3, which was yanked, because the 2.3.0 release brokeubi's tests.
- The
UbiBuilder::github_tokenandUbiBuilder::gitlab_tokenmethods are deprecated in favor of a newUbiBuilder::tokenmethod. These deprecated methods will be removed in a future release. - Added support for release artifacts with a
.jarextension. Based on PR #110 from @vemoo. ubicould incorrectly pick a release for Android when running on Linux aarch64 platforms. Reported by @jahands (Jacob Hands). GH #111.
- This is identical to 0.5.1, but it was necessary to work around a bug in my GitHub release automation. The 0.5.1 is no longer available on GitHub, but the crates.io releases still exist and there's no issue with using it.
- Fixed a bug introduced in the last release where
ubicould pick a file with a partial match over an exact match, but only with zip files. Reported by @oalders (Olaf Alders). GH #100.
- On Windows,
ubinow looks for files with.batextensions as an executable. This applies both to releases of standalone files and executables in an archive file (tarball or zip). Based on work by @timothysparg (Tim Sparg) in PR #97. - If there are no files that are an exact match for the project name in an archive file,
ubiwill now look for files that start with the project name. On non-Windows, boxes, this will only match executables. On Windows, this will only match.bator.exefiles. Based on work by @timothysparg (Tim Sparg) in PR #97.
- Added
allto the list of architecture strings to match against for macOS on ARM64. It looks like this is in use in the wild. See https://github.com/segmentio/golines/releases/tag/v0.12.2 for an example. Reported by Shyam Subramaniyam.
- Fixed a bug where
ubiwhere zip files containing a directory that matched the expected executable name causedubito extract the directory instead of the actual executable, resulting in a 0-length file. Based on a PR #89 from @fiadliel (Gary Coady). Fixes #88. - Added a new
UbiBuilder::rename_exe_tomethod, along with a--rename-exe-toCLI flag. When this is set, the installed executable will use the name given here, instead of the name that it has in the downloaded file. This is useful for projects that do releases where the executable name includes things like a version number of platform information. Based on discussion in #86. - Added support for release artifacts with a
.pyzextension. These are zip files containing Python code, and they can be directly executed. Based on PR #85 from @itochan (Kazunori Jo). - Added support for release artifacts with a
.AppImageextension. These will only be picked when running Linux. Requested by @saulh (Saul Reynolds-Haertle). GH #86. - Fixed a bug where
ubiwould consider an asset with.exeextension on non-Windows platforms. In practice, this would probably only have been an issue for projects with exactly one release artifact, where that artifact had a.exeextension. - The
--extract-allCLI option added in the previous release did not have any description in the help output. This has been fixed.
- The
ubiCLI tool now takes an optional--extract-allargument. If this is passed, it will only look for archive files and it will extract the entire contents of an archive it finds. There is also a new correspondingUbiBuilder::extract_allmethod. Requested by @Entze (Lukas Grassauer). GH #68. - The
UbiBuilder::install_dirmethod now takesAsRef<Path>instead ofPathBuf, which should make it more convenient to use. - Previously,
ubiwould create the install directory very early in its process, well before it had something to install. This meant that if it failed to find an asset, couldn't download the asset, or other errors happened, it would leave this directory behind. Now it creates this directory immediately before writing the executable it found to disk.
ubinow works with GitLab in addition to GitHub. For the command-line program, if the value you pass to--projecthas agitlab.comdomain, likehttps://gitlab.com/gitlab-org/cli, this will just work. If you just pass a project name, likegitlab-org/cli, then you will also need to pass--forge gitlabin order to tellubito use gitlab. The library interface works the same way, with a newUbiBuilder::forgemethod. Requested by @SangeloDev. GH #51.- When looking for macOS assets,
ubiwill now match againstmacosxin asset names, not justmacosandosx. Implemented by @kattouf (Vasiliy Kattouf). GH #80. - Added a new
--api-url-baseCLI argument. This should allow you to useubiwith Enterprise installations of GitHub and GitLab. Requested by @oalders (Olaf Alders). GH #69. - Renamed the
UbiBuilder::url_basemethod toapi_base_urland changed it to take a&strinstead of aString, which is consistent with all the other builder methods.
ubiwill now look for just "mac" or "Mac" in a filename when running on macOS. Previously,ubiwould not treat a filename like "foo-mac-x86-64.tar.gz" as a match for macOS. Reported by @jdx (Jeff Dickey). GH #79.
- Fixed the code to detect whether the filename includes a version number that looks like an
extension. If the filename ended with the version, like
foo-1.2.3, then this was not handled properly. It only worked if there something after the version as well, likefoo-1.2.3-linux-amd64. Based on a bug report by @FelisNivalis. GH #77.
- Added an
is_muslmethod to theUbiBuilderstruct to allow setting this manually. - Fix handling of file "extensions" that just contain the OS and architecture, like ".linux.amd64". Implemented by @jdx (Jeff Dickey). GH #71.
- When running on Linux,
ubinow checks to see if the platform is usingmusland will prefer a release artifact with "musl" in the name. Previously, it would usually pick a glibc artifact if there were multiple artifacts that matched the platform OS and architecture, which would not work on musl-based platforms like Alpine Linux. Reported by @Burner. GH #70. - Fixed a bug in the handling of release artifact names with version numbers in them that look like
extensions. This caused
ubito fail when trying to installshfmt3.10.0, and probably many other tools. Reported by @jimeh (Jim Myhrberg). GH #67. - Work around release artifacts that put the platform name after a period, so it looks like an
extension. This is the case with
direnv, at least with the v2.35.0 release, which has release artifacts like "direnv.linux-amd64". Reported by @jimeh (Jim Myhrberg). GH #67.
- For this release, the library and CLI code have been split into two crates. The library code now
has fewer dependencies, as there were a few dependencies that were only needed for the CLI code,
notably
clap,fern, andtokio.
-
Added several cargo features to control which crates
reqwestuses for TLS. The features are:rustls-tls(enabled by default) — enables therustls-tlsfeature for thereqwestcrate.rustls-tls-native-roots— enables therustls-tls-native-rootsfeature for thereqwestcrate.native-tls— enables thenative-tlsfeature for thereqwestcrate.native-tls-vendored— enables thenative-tls-vendoredfeature for thereqwestcrate.
Requested by @jdx. GH #62.
- Fix documentation links to link to the library docs, not the CLI docs.
- UBI can now be used as a library. See the
ubidocs on docs.rs for more details.
- Fix support for plain
.tarfiles with no compression. - Fix handling of files with a version in the filename and no extension, like
shfmt_v3.8.0_linux_arm64. This was fixed before but I broke it in the 0.0.31 release.
- Added support for the
.bz2and.tar.bz2file extensions.
- When a project's releases contain a mix of file names with and without an architecture,
ubiwill try one of the no-architecture names if it doesn't find any matches for the current architecture. An example of this is theyt-dlp/yt-dlpproject, which has releases namedyt-dlp_linuxandyt-dlp_linux_aarch64. ubiis now always compiled withrustls, instead of usingopensslon some platforms.
- If there is only one match for the platform's OS and the release filename has no architecture in
it,
ubiwill now pick that one (and hope that it works). This fixes an issue reported by @krisan. GH #48. - As of this release there are no longer binaries built for MIPS on Linux. These targets have been demoted to tier 3 support by the Rust compiler.
- Fixed a bug with tarballs that use the GNU sparse format. Such tarballs were not extracted
properly, leading to the extracted executable being garbled. This was an issue with the macOS
x86-64 release of ubi, which broke the
--self-upgradeflag on that platform. Reported by Olaf Alders. GH #45.
- The bootstrap script should handle more possible ARM processors correctly, including for the Raspberry Pi. Reported by Olaf Alders. GH #42.
- On macOS ARM, ubi will now pick an x86-64 macOS binary if no ARM binary is available. Reported by Olaf Alders. GH #44.
- The bootstrap script has been updated to try to handle more operating systems and CPU
architectures. In addition, you can bypass its platform detection entirely by setting a
FILENAMEenvironment variable, which should be the name of one of the release file assets. Reported by Ole-Andreas Nylund. Addresses GH #38. - On 32-bit platforms,
ubiwould always fail when given a--matchingoption on the command line. Reported by Ole-Andreas Nylund. Fixes #40.
- Help output is now line-wrapped based on your terminal width.
- Fix handling of tarballs that contain a directory matching the project name. In such cases,
ubiwould extract that directory instead of looking for the binary in the tarball. Reported by Rafael Bodill. GH #36.
- Fixed a bug when there were multiple potential matching releases for a platform, and either none of the releases were 64-bit or the platform itself was not a 64-bit platform.
- Fix match for the jq and mkcert projects. This expands the matching a bit on Linux x86 platforms to match "linux32" and "linux64". It also handles filenames with version strings like "mkcert-v1.4.4-linux-arm" properly. Previously, it treated the last bit after the "." in the version as an extension and rejected this as an invalid extension. Now there is a bit of a gross hack to check explicitly for versions in the filename that appear to be an extension. Addresses #34.
- The
--self-upgradeoption now works on Windows. However, it leaves behind a binary namedubi-old.exethat must be deleted manually. Addresses #21.
- Improved matching of OS and CPU architecture names in release asset names. This release should do a better job with more projects.
- This release includes a number of changes to support building on many more platforms.
- The full list of architectures that binaries are released for is:
- FreeBSD x86-64 new
- Linux x86-64
- Linux aarch64 (aka arm64)
- Linux arm (32-bit)
- Linux i586 (x86 32-bit) new
- Linux mips (32-bit) new
- Linux mipsel (32-bit little-endian) new
- Linux mips64 new
- Linux mips64el (little-endian) new
- Linux PowerPC (32-bit) new
- Linux PowerPC64 new
- Linux PowerPC64le (little-endian) new
- Linux riscv64 new
- Linux s390x new
- NetBSD x86-64 new
- Windows x86-64
- Windows i686 (32-bit) new
- Windows aarch64 (aka arm64) new
- macOS x86-64
- macOS aarch64 (aka arm64)
- The code supports some other OS and CPU architectures internally, but I do not have any way to
build these:
- Fuchsia x86-64 and aarch64 - not supported by
cross. - Illumos x86-64 - OpenSSL build fails with odd error about
granlibexecutable. - Linux Sparc64 - not supported by OpenSSL.
- Solaris x86-64 - supported by
crossbut building themiocrate fails. - Solaris Sparc - not supported by OpenSSL.
- Fuchsia x86-64 and aarch64 - not supported by
- In order to do this,
ubinow uses theopensslcrate under the hood instead ofrustls. That's becauserustlsdepends onring, which does not support nearly as many CPU architectures as OpenSSL. Thevendoredfeature for theopensslcrate is enabled, which causes it to compile and statically link a copy of OpenSSL into the resulting binary. This makes the resulting binary more portable at the cost of not using the system OpenSSL.
- The full list of architectures that binaries are released for is:
- Fixed handling of bare executables on Windows. It would reject these because it wasn't expecting
to download a file with a
.exeextension.
- Most errors no longer print out usage information. Now this is only printed for errors related to invalid CLI arguments. GH #22.
- Really fix handling of bare xz-compressed binaries. Based on PR #27 from Marco Fontani.
- Add support for bare bz-compressed binaries.
- Fixed handling of xz-compressed tarballs. These were ignored even though there was code to handle them properly. Reported by Danny Kirkham. GH #24.
- Fixed matching the "aarch64" architecture for macOS. At least with Go, these binaries end up
labeled as "arm64" instead of "aarch64", and
ubishould treat that as a match. Reported by Ajay Vijayakumar.
- Added a
--self-upgradeflag, which will useubito upgradeubi. Note that this flag does not work on Windows.
- Added a
--urlflag as an alternative to--project. This bypasses the need for using the GitHub API, so you don't have to worry about the API limits. This is a good choice for use in CI.
- Releases are now downloaded using the GitHub REST API instead of trying to just download a tarball
directly. This lets
ubidownload releases from private projects.
- Bare xz-compressed binaries are now handled properly. Previously ubi would download and "install" the compressed file as an executable. Now ubi will uncompress this file properly. Based on PR #19 from Marco Fontani.
- Fixed a bug in handling of xz-compressed tarballs. There was some support for this, but it wasn't complete. These should now be handled just like other compressed tarballs.
- Improved handling of urls passed to
--projectso any path that contains an org/user and repo works. For examplehttps://github.com/houseabsolute/precious/releasesandhttps://github.com/BurntSushi/ripgrep/pull/2049will now work. - All Linux binaries are now compiled with musl statically linked instead of dynamically linking glibc. This should increase portability.
- The Linux ARM target is now just "arm" instead of "armv7", without hard floats ("hf"). This should make the ARM binary more portable.
- Fixed releases for Linux ARM64 and ARM 32-bit. The 32-bit release was getting uploaded as aarch64.
- This release includes native binaries for Linux ARM64 and ARM (32-bit).
- Added a new flag,
--matching, which can be used to pick a specific release file when there are multiple matching options for your OS and CPU architecture. Based on PR #18 from Marco Fontani. Fixes #17. - When there multiple matches and
--matchingis not given, the same release file will always be picked. Previously this was not guaranteed. - Improved filtering of 32-bit executables when running on 64-bit machines.
- No code changes from the last release. The binary releases built by GitHub Actions now build on Ubuntu 18.04 instead of 20.04. This restores compatibility with systems using glibc 2.27. Reported by Olaf Alders. GH #16.
- This release also includes native ARM64 binaries for macOS 11+.
- Include "x64" as a match for the
x86_64architecture.
- Changed CPU architecture matching to be stricter based on the current platform's CPU.
- Changed file extension mapping to work of an allowed list of extensions. This is stricter than the
previous check, which just filtered out a few things like
.deband.rpm.
- Include s390 and s390x in possible arch list. This also fixes a bug where that arch might be used
when running
ubion any platform. - Ignore
.deband.rpmfiles. - Look for multiple valid files to download and prefer 64-bit binaries on 64-bit CPUs.
- Add support for releases which are either the bare executable or a gzipped executable, like rust-analyzer.
- Update tokio and other async deps to avoid panics and eliminate deprecated net2 crate from dep tree.
- When running on Windows, add ".exe" to the user-supplied --exe name if it doesn't already have it. This makes it simpler to use ubi with the exact same invocation across platforms.
- First release