A command line tool to download release assets from GitHub.
Why should I use dra? • Installation • Usage • Contributing • License
Why should I use dra?
You can do everything dra does with the official GitHub cli.
dra helps you download release assets more easily:
- No authentication for public repository (you cannot use
ghwithout authentication) - Built-in generation of pattern to select an asset to download
(with
ghyou need to provide glob pattern that you need to create manually). - Automatically select and download an asset based on your operating system and architecture
- Download and install assets, with support for the most common formats (e.g. tar/zip archives, deb/rpm packages...)
Installation
dra is available on Linux (x86_64, armv6, arm64), macOS (x86_64, arm64) and Windows.
Prebuilt binaries
Download the prebuilt versions of dra for all supported platforms from
the latest release.
You can use this bash script to automatically download the latest release across all supported platforms.
Replace <DESTINATION> with the path where you want to place dra (e.g ~/.local/bin).
If you omit --to option, the default value is the current working directory.
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/devmatteini/dra/refs/heads/main/install.sh | bash -s -- --to <DESTINATION>
Debian-based distributions
Download the latest .deb package from the release page and
install it via:
sudo dpkg -i dra_x.y.z_amd64.deb # adapt version numberArch Linux
dra can be installed from the community repository:
macOS/Linux with Homebrew
dra can be installed from Homebrew:
From source
git clone https://github.com/devmatteini/dra && cd dra make release ./target/release/dra --version
Update dra
The method to update dra depends on how you initially installed it.
If you used a package manager (e.g Homebrew or pacman), use the
corresponding package manager commands to update dra.
If you downloaded a prebuilt binary from GitHub Releases, you have two options:
Option 1: Use dra to update itself
- Linux (Note that you can't replace a binary while it's executing)
dra download -a -i -o dra-new devmatteini/dra && mv dra-new /path/to/dra - macOS
dra download -a -i -o /path/to/dra devmatteini/dra
- Windows (Note that you can't replace a binary while it's executing)
dra download -a -i -o dra-new.exe devmatteini/dra && mv dra-new.exe /path/to/dra.exe
Option 2: Use the automated bash script
Follow the installation instructions on how to use the automated bash script
Usage
- Download assets with interactive mode
- Download assets with non-interactive mode
- Download options
- Install assets
- Authentication
- Shell completion
- Examples
Interactive download
Manually select and download an asset from a repository
dra download devmatteini/dra-tests
Non-Interactive download
This mode is useful to be used in automated scripts.
There are two modes to download assets: automatic and selection.
Automatic
Automatically select and download an asset based on your operating system and architecture
# you can use -a or --automatic
dra download -a devmatteini/dra-testsImportant
Since there is no naming convention for release assets,
be aware that this mode may fail if no asset matches your system based on dra rules for recognizing an asset.
Selection
Select and download the first asset that matches a given pattern
dra download --select <PATTERN> devmatteini/dra-tests
You can pass one of the following patterns:
Literal
The exact name of the asset.
dra download --select helloworld.tar.gz devmatteini/dra-tests
Untagged
A version-free pattern of your asset. Most of the time, this is the pattern you will use.
It's useful when release assets contain the release tag in their name, and you want a stable pattern to download across different releases.
First, you need to generate an untagged asset name:
dra untag devmatteini/dra-tests
# Output: helloworld_{tag}.tar.gzCopy the output and run:
dra download --select "helloworld_{tag}.tar.gz" devmatteini/dra-testsWildcard
A wildcard pattern, using * and/or ? special characters.
It's useful when release assets contain sections that change for each release (e.g. a build number or timestamp).
dra download --select 'helloworld*_amd64.deb' devmatteini/dra-testsDownload options
All dra-download options works with both interactive and non-interactive modes.
Select and download an asset to custom path
dra download --output /tmp/dra-example devmatteini/dra-tests # or save to custom directory path dra download --output ~/Downloads devmatteini/dra-tests
Select and download an asset from a specific release
dra download --tag 0.1.1 devmatteini/dra-tests
Select and download source code archives
dra download devmatteini/dra-tests
Release tag is 0.1.5
? Pick the asset to download ›
helloworld_0.1.5.tar.gz
❯ Source code (tar.gz)
Source code (zip)Install assets
Download and install an asset (on both interactive and non-interactive modes)
dra download --install devmatteini/dra-tests
Supported assets that can be installed are:
- Debian packages (requires elevated privileges)
- RPM packages (requires elevated privileges)
- Tar archives with executable(s)
- Zip files with executable(s)
- 7-Zip files with executable(s) (requires
7zcli to be installed and in yourPATH) - Compressed executable files
- Executable files
- AppImage files
You can use -I/--install-file <INSTALL_FILE> option when a tar/zip archive contains many executables or
when dra can't automatically detect which one to install:
dra download -s helloworld-many-executables-unix.tar.gz -I helloworld-v2 devmatteini/dra-tests
You can also specify this option multiple times to install multiples executables
dra download -s helloworld-many-executables-unix.tar.gz -I helloworld-v2 -I random-script devmatteini/dra-tests
Authentication
In order to download assets from private repositories and avoid rate limit
issues (60 requests per hour
is the default for unauthenticated users), dra must make authenticated requests to GitHub.
You can create a personal access token and then export one of the following environment variables:
DRA_GITHUB_TOKENGITHUB_TOKENGH_TOKEN
If none of the above environment variables are set,
the GitHub cli token (if available) will be used as default value.
You need to install GitHub cli and then run gh auth login.
Disable authentication
If you would like to disable GitHub authentication, you can export the environment variable
DRA_DISABLE_GITHUB_AUTHENTICATION=true
Shell completion
Generate shell completion
dra completion bash > dra-completion source dra-completion
See all supported shell with dra completion -h
Examples
Install an executable from a tar archive
dra download -s helloworld.tar.gz -i devmatteini/dra-tests ./helloworld
Install and move the executable to a custom directory
dra download -a -i -o ~/.local/bin/ devmatteini/dra-tests ~/.local/bin/helloworld
Install an executable file
dra download -s helloworld-unix -i devmatteini/dra-tests ./helloworld-unix
Install an executable from a compressed file
dra download -s helloworld-compressed-unix.bz2 -i devmatteini/dra-tests ./helloworld-compressed-unix
Install and rename the executable (useful when downloading an executable or compressed file)
dra download -s helloworld-unix -i -o helloworld devmatteini/dra-tests ./helloworld
Install a specific executable when many are available
dra download -s helloworld-many-executables-unix.tar.gz -I helloworld-v2 devmatteini/dra-tests ./helloworld-v2
Install multiple executables from a tar/zip archive
dra download -s helloworld-many-executables-unix.tar.gz -I helloworld-v2 -I random-script devmatteini/dra-tests ./helloworld-v2 ./random-script
For more information on args/flags/options/commands run:
dra --help dra <command> --help
Contributing
Take a look at the CONTRIBUTING.md guidelines.
Found a Bug?
If you find a bug in the source code, you can help us by submitting an issue to our GitHub Repository. Even better, you can submit a Pull Request with a fix.
Missing a Feature?
You can request a new feature by submitting a discussion to our GitHub Repository. If you would like to implement a new feature, please consider the size of the change and reach out to better coordinate our efforts and prevent duplication of work.
License
dra is made available under the terms of the MIT License.
See the LICENSE file for license details.
