Skip to content

Commit 5025367

Browse files
authored
fix: add git and gitlab support for tasks (#98)
1 parent 57b3456 commit 5025367

File tree

5 files changed

+129
-0
lines changed

5 files changed

+129
-0
lines changed

hooks_processor/lib/hooks_processor/hooks/grpc/server.ex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,13 @@ defmodule HooksProcessor.Hooks.Grpc.Server do
142142
defp repo_html_url(repository = %{integration_type: :GITHUB_OAUTH_TOKEN}), do: repo_html_url(:github, repository)
143143
defp repo_html_url(repository = %{integration_type: :GITHUB_APP}), do: repo_html_url(:github, repository)
144144
defp repo_html_url(repository = %{integration_type: :BITBUCKET}), do: repo_html_url(:bitbucket, repository)
145+
defp repo_html_url(repository = %{integration_type: :GITLAB}), do: repo_html_url(:gitlab, repository)
146+
defp repo_html_url(repository = %{integration_type: :GIT}), do: repo_html_url(:git, repository)
145147

146148
defp repo_html_url(:github, repository), do: "https://github.com/#{repository.owner}/#{repository.name}"
147149
defp repo_html_url(:bitbucket, repository), do: "https://bitbucket.org/#{repository.owner}/#{repository.name}"
150+
defp repo_html_url(:gitlab, repository), do: "https://gitlab.com/#{repository.owner}/#{repository.name}"
151+
defp repo_html_url(_, _), do: ""
148152

149153
defp form_response(:create, hook) do
150154
%CreateResponse{
@@ -180,4 +184,6 @@ defmodule HooksProcessor.Hooks.Grpc.Server do
180184
defp provider(:GITHUB_OAUTH_TOKEN), do: "github"
181185
defp provider(:GITHUB_APP), do: "github"
182186
defp provider(:BITBUCKET), do: "bitbucket"
187+
defp provider(:GITLAB), do: "gitlab"
188+
defp provider(:GIT), do: "git"
183189
end

periodic_scheduler/scheduler/lib/internal_api/plumber_w_f.workflow.pb.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ defmodule InternalApi.PlumberWF.ScheduleRequest.ServiceType do
2525
field :LOCAL, 1
2626
field :SNAPSHOT, 2
2727
field :BITBUCKET, 3
28+
field :GITLAB, 4
29+
field :GIT, 5
2830
end
2931

3032
defmodule InternalApi.PlumberWF.ListLatestWorkflowsRequest.Order do

periodic_scheduler/scheduler/lib/internal_api/repository_integrator.pb.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ defmodule InternalApi.RepositoryIntegrator.IntegrationType do
55
field :GITHUB_OAUTH_TOKEN, 0
66
field :GITHUB_APP, 1
77
field :BITBUCKET, 2
8+
field :GITLAB, 3
9+
field :GIT, 4
810
end
911

1012
defmodule InternalApi.RepositoryIntegrator.IntegrationScope do

periodic_scheduler/scheduler/lib/scheduler/actions/schedule_wf_impl.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ defmodule Scheduler.Actions.ScheduleWfImpl do
140140
defp schedule_workflow_service_type(:GITHUB_OAUTH_TOKEN), do: :GIT_HUB
141141
defp schedule_workflow_service_type(:GITHUB_APP), do: :GIT_HUB
142142
defp schedule_workflow_service_type(:BITBUCKET), do: :BITBUCKET
143+
defp schedule_workflow_service_type(:GITLAB), do: :GITLAB
144+
defp schedule_workflow_service_type(:GIT), do: :GIT
143145

144146
defp parameter_values_to_env_vars(parameter_values) do
145147
Enum.into(parameter_values, [], &parameter_value_to_env_var/1)

periodic_scheduler/scheduler/test/actions/schedule_wf_impl_test.exs

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,123 @@ defmodule Scheduler.Actions.ScheduleWfImpl.Test do
170170
assert schedule_params.triggered_by == :SCHEDULE
171171
end
172172

173+
test "schedule() - schedule params are correctly formed for gitlab in JustRun case", ctx do
174+
alias Scheduler.Actions.ScheduleWfImpl
175+
176+
use_mock_workflow_service()
177+
mock_workflow_service_response("just_run")
178+
reset_mock_feature_service()
179+
mock_feature_response("just_run")
180+
use_mock_project_service()
181+
mock_projecthub_response("ok")
182+
use_mock_repository_service()
183+
mock_repositoryhub_response("ok")
184+
185+
ts_before = DateTime.utc_now()
186+
timestamp = Timex.shift(ts_before, minutes: -1)
187+
188+
periodic =
189+
ctx.periodic
190+
|> Periodics.changeset("v1.1", %{
191+
parameters: [
192+
%{name: "param_gitlab1", required: true, default_value: "value1"},
193+
%{name: "param_gitlab2", required: false, default_value: "value2"},
194+
%{name: "param_gitlab3", required: false, default_value: "value3"},
195+
%{name: "param_gitlab4", required: false}
196+
]
197+
})
198+
|> Scheduler.PeriodicsRepo.update!()
199+
200+
assert {:ok, _pid} = ScheduleWfImpl.start_schedule_task(ctx.periodic.id, timestamp)
201+
202+
:timer.sleep(2_000)
203+
204+
assert {:ok, [tr]} = PTQueries.get_n_by_periodic_id(ctx.periodic.id, 1)
205+
206+
assert tr.scheduling_status == "passed"
207+
assert tr.scheduled_workflow_id == "wf_id"
208+
assert tr.error_description == nil
209+
210+
assert Map.new(tr.parameter_values, &{&1.name, &1.value}) ==
211+
%{
212+
"param_gitlab1" => "value1",
213+
"param_gitlab2" => "value2",
214+
"param_gitlab3" => "value3"
215+
}
216+
217+
assert tr.attempts == 1
218+
219+
assert DateTime.compare(tr.scheduled_at, ts_before) == :gt
220+
221+
repository = %{id: UUID.uuid4(), integration_type: :GITLAB}
222+
223+
assert {:ok, schedule_params} =
224+
ScheduleWfImpl.form_just_run_schedule_params(periodic, tr, repository)
225+
226+
assert schedule_params.service == :GITLAB
227+
assert schedule_params.requester_id == periodic.requester_id
228+
assert schedule_params.triggered_by == :SCHEDULE
229+
end
230+
231+
test "schedule() - schedule params are correctly formed for git agnostic in JustRun case",
232+
ctx do
233+
alias Scheduler.Actions.ScheduleWfImpl
234+
235+
use_mock_workflow_service()
236+
mock_workflow_service_response("just_run")
237+
reset_mock_feature_service()
238+
mock_feature_response("just_run")
239+
use_mock_project_service()
240+
mock_projecthub_response("ok")
241+
use_mock_repository_service()
242+
mock_repositoryhub_response("ok")
243+
244+
ts_before = DateTime.utc_now()
245+
timestamp = Timex.shift(ts_before, minutes: -1)
246+
247+
periodic =
248+
ctx.periodic
249+
|> Periodics.changeset("v1.1", %{
250+
parameters: [
251+
%{name: "param_git1", required: true, default_value: "value1"},
252+
%{name: "param_git2", required: false, default_value: "value2"},
253+
%{name: "param_git3", required: false, default_value: "value3"},
254+
%{name: "param_git4", required: false}
255+
]
256+
})
257+
|> Scheduler.PeriodicsRepo.update!()
258+
259+
assert {:ok, _pid} = ScheduleWfImpl.start_schedule_task(ctx.periodic.id, timestamp)
260+
261+
:timer.sleep(2_000)
262+
263+
assert {:ok, [tr]} = PTQueries.get_n_by_periodic_id(ctx.periodic.id, 1)
264+
265+
assert tr.scheduling_status == "passed"
266+
assert tr.scheduled_workflow_id == "wf_id"
267+
assert tr.error_description == nil
268+
269+
assert Map.new(tr.parameter_values, &{&1.name, &1.value}) ==
270+
%{
271+
"param_git1" => "value1",
272+
"param_git2" => "value2",
273+
"param_git3" => "value3"
274+
}
275+
276+
assert tr.attempts == 1
277+
278+
assert DateTime.compare(tr.scheduled_at, ts_before) == :gt
279+
280+
repository = %{id: UUID.uuid4(), integration_type: :GIT}
281+
282+
assert {:ok, schedule_params} =
283+
ScheduleWfImpl.form_just_run_schedule_params(periodic, tr, repository)
284+
285+
assert schedule_params.service == :GIT
286+
assert schedule_params.requester_id == periodic.requester_id
287+
assert schedule_params.triggered_by == :SCHEDULE
288+
end
289+
173290
test "schedule() - when project service fails for JustRun case then workflow is not scheduled",
174291
ctx do
175292
use_mock_workflow_service()

0 commit comments

Comments
 (0)