Skip to content

Latest commit

 

History

History
222 lines (171 loc) · 7.85 KB

File metadata and controls

222 lines (171 loc) · 7.85 KB

Latest Release Downloads SLSA: Level 3 License
Tests & Scans Security Scans CodeQL
Test Coverage (%) Test Condition Coverage (%) Duplicated Lines (%) SonarQube Code Issues SonarQube Security Hotspots

ToolFetch

ToolFetch is a CLI for fetching and installing external tools from release URLs (e.g. GitHub releases) using a YAML configuration file.

It is designed for:

  • setting up new developer machines quickly and consistently
  • reproducible tool installations

Demo

Installation

  1. Download the latest release for your OS/architecture from Releases
  2. Move the toolfetch binary to a directory in your $PATH (e.g., system-wide: /usr/local/bin or user-specific: $HOME/.local/bin)

Verify Releases

See VERIFICATION.md for details.

Usage

Given the following configuration file named toolfetch.yaml:

destination: /opt
tools:
  - id: dbeaver
    url: "https://dbeaver.io/files/dbeaver-ce-latest-linux.gtk.x86_64.tar.gz"

When you invoke the command: toolfetch --config "toolfetch.yaml", the latest version of the tool will be installed like this:

/opt
|-- dbeaver

You can use optional placeholder: ${version} in url which will be replaced with version value at runtime:

destination: "/opt"
tools:
  - id: kitty
    version: "0.44.0"
    url: "https://github.com/kovidgoyal/kitty/releases/download/v${version}/kitty-${version}-x86_64.txz"
  - id: firefox
    version: "146.0.1"
    url: "https://ftp.mozilla.org/pub/firefox/releases/${version}/linux-x86_64/en-US/firefox-${version}.tar.xz"

When you invoke the command again, tools will be installed like this:

/opt
|-- kitty
|-- firefox

You can optionally define a destination key for a specific tool to install it somewhere else:

destination: "/opt"
tools:
  - id: kitty
    version: "0.44.0"
    url: "https://github.com/kovidgoyal/kitty/releases/download/v${version}/kitty-${version}-x86_64.txz"
    destination: "/opt/tools"
  - id: firefox
    version: "146.0.1"
    url: "https://ftp.mozilla.org/pub/firefox/releases/${version}/linux-x86_64/en-US/firefox-${version}.tar.xz"

Now, when you invoke the same command, tools will be installed like this:

/opt
|-- firefox
|-- tools
    |-- kitty

You can optionally define a checksums key for a specific tool to verify the downloaded archive before it is extracted:

destination: "/opt"
tools:
  - id: kitty
    version: "0.44.0"
    url: "https://github.com/kovidgoyal/kitty/releases/download/v${version}/kitty-${version}-x86_64.txz"
    checksums:
      sha256: "5b502801c8814c9fc5a2e8d9cfdf1c2ec5ee78b3e647f898704ad537a2ff452d"
  - id: firefox
    version: "146.0.1"
    url: "https://ftp.mozilla.org/pub/firefox/releases/${version}/linux-x86_64/en-US/firefox-${version}.tar.xz"
    checksums:
      sha256: "36a4dc0e3be8af2d49d8388021abf790976d2398162b9d13a6d758cc8c37f8dd"

Archive and Compression Formats

Currently, the following Archive Formats are supported:

  • tar
  • zip
  • jar

Warning

7z support is planned

and Compression Formats:

  • brotli
  • bzip2
  • deflate
  • gzip
  • lz4
  • lzma
  • pack200 (for jars)
  • snappy (excluding iwa)
  • xz
  • z
  • zstandard
  • concatenated streams for bzip2, gzip, xz and lz4

Checksum Verification Formats

Currently, the following Checksum Verification Formats are supported:

  • sha256
  • sha384
  • sha512

Custom Certificate Authorities

Warning

TrustStore configuration support in toolfetch.yaml is planned

If your organization uses custom Certificate Authorities, you may need to configure a Java TrustStore.

Pass JVM options directly to toolfetch:

  • -Djavax.net.ssl.trustStore=path/to/truststore
  • -Djavax.net.ssl.trustStorePassword=changeit

Otherwise, you may encounter an exception like:

(certificate_unknown) PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

💖 Support

Hey there! If you enjoy my work and would like to support me, consider buying me a coffee! 🙂 Your contributions help me keep creating, and I truly appreciate every bit of support you offer.

Buy me a Coffee

Also, please consider giving this project a ⭐ on GitHub. This kind of support helps promote the project and lets others know that it's worth checking out.

Thank you for being amazing!

©️ License

Copyright 2026 JDHeim.com

This project is licensed under the Apache License, Version 2.0. See the LICENSE file for full license terms.