Download, verify, and extract GitHub release artifacts effortlessly right from Elixir
Available in Hex, the package can be installed by adding
octo_fetch
to your list of dependencies in mix.exs
:
def deps do
[
{:octo_fetch, "~> 0.4.0"}
]
end
Documentation can be found at https://hexdocs.pm/octo_fetch.
If you rely on this library, it would much appreciated if you can give back to the project in order to help ensure its continued development.
If you want to create a downloader utility for a particular GitHub repository, you can use this library to take care of all of the boilerplate, validation, and archive extraction. For example, if you want to create a downloader for Litestream, you can do the following:
defmodule LiteStream.Downloader do
use OctoFetch,
latest_version: "0.3.9",
github_repo: "benbjohnson/litestream",
download_versions: %{
"0.3.9" => [
{:darwin, :amd64, "74599a34dc440c19544f533be2ef14cd4378ec1969b9b4fcfd24158946541869"},
{:linux, :amd64, "806e1cca4a2a105a36f219a4c212a220569d50a8f13f45f38ebe49e6699ab99f"},
{:linux, :arm64, "61acea9d960633f6df514972688c47fa26979fbdb5b4e81ebc42f4904394c5c5"}
],
"0.3.8" => [
{:darwin, :amd64, "d359a4edd1cb98f59a1a7c787bbd0ed30c6cc3126b02deb05a0ca501ff94a46a"},
{:linux, :amd64, "530723d95a51ee180e29b8eba9fee8ddafc80a01cab7965290fb6d6fc31381b3"},
{:linux, :arm64, "1d6fb542c65b7b8bf91c8859d99f2f48b0b3251cc201341281f8f2c686dd81e2"}
]
}
# You must implement this function to generate the names of the downloads based on the
# user's current running environment
@impl true
def download_name(version, :darwin, arch), do: "litestream-v\#{version}-darwin-\#{arch}.zip"
def download_name(version, :linux, arch), do: "litestream-v\#{version}-linux-\#{arch}.tar.gz"
end
You would then be able to download the release artifact by doing the following:
iex (1) > Litestream.Downloader.download(".")
{:ok, ["./litestream"], []}
It wouldn't be right to not include somewhere in this project a "thank you" to the various projects and people that helped make this possible:
- The logo for the project is an edited version of an SVG image from the unDraw project
- The work done in Phoenix Tailwind served as a baseline for how to structure this library.