Skip to content

Commit fbd4840

Browse files
committed
feat: add Github.remove_label/4
1 parent 007aa15 commit fbd4840

File tree

6 files changed

+39
-0
lines changed

6 files changed

+39
-0
lines changed

lib/algora/admin/admin.ex

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ defmodule Algora.Admin do
4141
end
4242
end
4343

44+
def remove_label(url, amount) do
45+
%{owner: owner, repo: repo, number: number} = parse_ticket_url(url)
46+
47+
with installation_id when not is_nil(installation_id) <- Workspace.get_installation_id_by_owner(owner),
48+
{:ok, token} <- Github.get_installation_token(installation_id) do
49+
Workspace.remove_amount_label(token, owner, repo, number, Money.parse(amount))
50+
end
51+
end
52+
4453
def add_label(url, amount) do
4554
%{owner: owner, repo: repo, number: number} = parse_ticket_url(url)
4655

@@ -55,6 +64,7 @@ defmodule Algora.Admin do
5564

5665
with installation_id when not is_nil(installation_id) <- Workspace.get_installation_id_by_owner(owner),
5766
{:ok, token} <- Github.get_installation_token(installation_id),
67+
# TODO: properly parse DELETE responses in Github.Client
5868
{:error, %Jason.DecodeError{data: ""}} <-
5969
Github.Client.fetch(token, "/repos/#{owner}/#{repo}/issues/comments/#{id}", "DELETE") do
6070
:ok

lib/algora/integrations/github/behaviour.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,5 @@ defmodule Algora.Github.Behaviour do
3232
@callback add_labels(token(), String.t(), String.t(), integer(), [String.t()]) :: {:ok, [map()]} | {:error, String.t()}
3333
@callback create_label(token(), String.t(), String.t(), map()) :: {:ok, map()} | {:error, String.t()}
3434
@callback get_label(token(), String.t(), String.t(), String.t()) :: {:ok, map()} | {:error, String.t()}
35+
@callback remove_label(token(), String.t(), String.t(), String.t()) :: {:ok, map()} | {:error, String.t()}
3536
end

lib/algora/integrations/github/client.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,4 +282,9 @@ defmodule Algora.Github.Client do
282282
def get_label(access_token, owner, repo, label) do
283283
fetch(access_token, "/repos/#{owner}/#{repo}/labels/#{label}")
284284
end
285+
286+
@impl true
287+
def remove_label(access_token, owner, repo, label) do
288+
fetch(access_token, "/repos/#{owner}/#{repo}/labels/#{label}", "DELETE")
289+
end
285290
end

lib/algora/integrations/github/github.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,4 +150,7 @@ defmodule Algora.Github do
150150

151151
@impl true
152152
def get_label(token, owner, repo, label), do: client().get_label(token, owner, repo, label)
153+
154+
@impl true
155+
def remove_label(token, owner, repo, label), do: client().remove_label(token, owner, repo, label)
153156
end

lib/algora/workspace/workspace.ex

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,4 +579,19 @@ defmodule Algora.Workspace do
579579
:error
580580
end
581581
end
582+
583+
def remove_amount_label(token, owner, repo, number, amount) do
584+
label = "$#{amount |> Money.to_decimal() |> Util.format_number_compact()}"
585+
586+
case Github.remove_label(token, owner, repo, label) do
587+
# TODO: properly parse DELETE responses in Github.Client
588+
{:error, %Jason.DecodeError{data: ""}} ->
589+
:ok
590+
591+
{:error, reason} ->
592+
Logger.error("Failed to remove label #{label} from #{owner}/#{repo}##{number}: #{inspect(reason)}")
593+
594+
:error
595+
end
596+
end
582597
end

test/support/github_mock.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,9 @@ defmodule Algora.Support.GithubMock do
180180
def get_label(_access_token, _owner, _repo, _label) do
181181
{:ok, %{"id" => random_id()}}
182182
end
183+
184+
@impl true
185+
def remove_label(_access_token, _owner, _repo, _label) do
186+
{:ok, %{"id" => random_id()}}
187+
end
183188
end

0 commit comments

Comments
 (0)