nixpkgs/pkgs/desktops/pantheon/nixpkgs_github_update/lib/nixpkgs_github_update/github_latest_version.ex
2020-01-18 21:40:46 -05:00

43 lines
1 KiB
Elixir

defmodule NixpkgsGitHubUpdate.GitHubLatestVersion do
@user_agent 'httpc'
def fetch({owner, repo}) do
endpoint = releases_endpoint(owner, repo)
headers = construct_headers()
:httpc.request(:get, {endpoint, headers}, [], [])
|> handle_response
end
def releases_endpoint(owner, repo) do
'https://api.github.com/repos/#{owner}/#{repo}/releases/latest'
end
def construct_headers do
headers = %{'User-Agent' => @user_agent}
put_token(headers, get_token())
|> Map.to_list
end
defp get_token do
System.get_env("OAUTH_TOKEN")
end
defp put_token(headers, token) when token != nil do
Map.put_new(headers, 'Authorization', 'token #{String.to_charlist(token)}')
end
defp put_token(headers, _), do: headers
def handle_response({_, {{_httpv, status_code, _}, _headers, response}}) do
{
status_code |> check_for_error(),
response |> Poison.Parser.parse!(%{})
}
end
defp check_for_error(200), do: :ok
defp check_for_error(_), do: :error
end