Connect to Bugzilla API
Mix.install([
{:req, "~> 0.5.10"}
])
Setup Req
json_req =
[
base_url: "https://bugs.freebsd.org/bugzilla/rest",
params: [api_key: System.fetch_env!("LB_BUGZILLA_API_KEY")]
]
|> Req.new()
|> Req.Request.put_header("accept", "application/json")
|> Req.Request.put_header("content-type", "application/json")
json_rpc_req =
[
base_url: "https://bugs.freebsd.org/bugzilla/jsonrpc.cgi",
]
|> Req.new()
|> Req.Request.put_header("accept", "application/json")
|> Req.Request.put_header("content-type", "application/json")
Request version
Req.get!(json_req, url: "/version")
Request a single bug
Req.get!(json_req, url: "/bug/277488?include_fields=id,summary,tags,last_change_time")
Saved searches
%Req.Response{status: 200, body: body} = Req.get!(json_req, url: "/user/pat@patmaddox.com")
%{"users" => [user]} = body
searches = Enum.reduce(Map.fetch!(user, "saved_searches"), %{}, fn s, acc ->
Map.put(acc, Map.fetch!(s, "name"), s)
end)
search = Map.fetch!(searches, "untracked (base)")
search_params = Map.fetch!(search, "query")
bugs_resp = Req.get!(json_req, url: "/bug?limit=10&#{search_params}")
bugs = bugs_resp.body["bugs"]
Enum.at(bugs, 0)
Update bug
update_resp = Req.put!(json_req, url: "/bug/282634", body: JSON.encode!(%{"cc" => %{"remove" => ["pat@patmaddox.com"]}}))
update_tags_resp = Req.post!(json_rpc_req, body: JSON.encode!(%{"id" => "update_tags", "method" => "Bug.update_tags", "params" => [%{"Bugzilla_api_key" => System.fetch_env!("LB_BUGZILLA_API_KEY"), "ids" => [282634], "tags" => %{"add" => ["test"]}}]}))