class AnyCableRailsGenerators::DownloadGenerator
Downloads anycable-go binary
def download_bin
def download_bin out = options[:bin_path] || DEFAULT_BIN_PATH version = options[:version] || VERSION download_exe( release_url(version), to: out, file_name: "anycable-go" ) true end
def download_exe(url, to:, file_name:)
def download_exe(url, to:, file_name:) file_path = File.join(to, file_name) FileUtils.mkdir_p(to) unless File.directory?(to) run "#{sudo(to)}curl -L #{url} -o #{file_path}", abort_on_failure: true run "#{sudo(to)}chmod +x #{file_path}", abort_on_failure: true run "#{file_path} -v", abort_on_failure: true end
def latest_release_url(version)
def latest_release_url(version) "https://github.com/anycable/anycable-go/releases/latest/download/" \ "anycable-go-#{os_name}-#{cpu_name}" end
def legacy_release_url(version)
def legacy_release_url(version) "https://github.com/anycable/anycable-go/releases/download/#{version}/" \ "anycable-go-v#{version}-#{os_name}-#{cpu_name}" end
def new_release_url(version)
def new_release_url(version) "https://github.com/anycable/anycable-go/releases/download/#{version}/" \ "anycable-go-#{os_name}-#{cpu_name}" end
def release_url(version)
def release_url(version) return latest_release_url(version) if version == "latest" if Gem::Version.new(version).segments.first >= 1 new_release_url("v#{version}") else legacy_release_url("v#{version}") end end
def sudo(path)
def sudo(path) sudo = "" unless File.writable?(path) if yes? "Path is not writable 😕. Do you have sudo privileges?" sudo = "sudo " else say_status :error, "❌ Failed to install AnyCable-Go WebSocket server", :red raise StandardError, "Path #{path} is not writable!" end end sudo end