defmodule Burrito.Util.ERTSUniversalMachineFetcher do
alias Burrito.Builder.Log
@beam_machine_openssl_version "3.1.4"
@windows_url "https://github.com/erlang/otp/releases/download/OTP-{OTP_VERSION}/otp_win64_{OTP_VERSION}.exe"
@linux_url "https://beam-machine-universal.b-cdn.net/OTP-{OTP_VERSION}/linux/{ARCH}/any/otp_{OTP_VERSION}_linux_any_{ARCH}_ssl_{OPENSSL_VERSION}.tar.gz"
@mac_url "https://beam-machine-universal.b-cdn.net/OTP-{OTP_VERSION}/macos/universal/otp_{OTP_VERSION}_macos_universal_ssl_{OPENSSL_VERSION}.tar.gz"
@please_do_not_abuse_these_downloads_bandwidth_costs_money "?please-respect-my-bandwidth-costs=thank-you"
@spec fetch_version(atom(), atom(), atom(), String.t()) :: URI.t() | {:error, atom()}
def fetch_version(os, _libc, cpu, otp_version)
when is_binary(otp_version) and is_atom(os) and is_atom(cpu) do
{:ok, _} = Application.ensure_all_started(:req)
final_url =
case os do
:darwin ->
@mac_url <> @please_do_not_abuse_these_downloads_bandwidth_costs_money
:linux ->
@linux_url <> @please_do_not_abuse_these_downloads_bandwidth_costs_money
:windows ->
@windows_url
end
|> String.replace("{OTP_VERSION}", otp_version)
|> String.replace("{ARCH}", Atom.to_string(cpu))
|> String.replace("{OPENSSL_VERSION}", @beam_machine_openssl_version)
Log.success(:step, "Remote ERTS From Beam Machine: #{final_url}")
URI.parse(final_url)
end
end