@@ -195,7 +195,7 @@ defmodule NervesHub.ManagedDeployments do
195195 Update a deployment
196196
197197 - Records audit logs depending on changes
198- - Creates deployment release record if firmware_id changed (requires user_id in params)
198+ - Creates deployment release record if firmware_id or archive_id changed
199199 """
200200 @ spec update_deployment_group ( DeploymentGroup . t ( ) , map , User . t ( ) ) ::
201201 { :ok , DeploymentGroup . t ( ) } | { :error , Changeset . t ( ) }
@@ -207,14 +207,17 @@ defmodule NervesHub.ManagedDeployments do
207207 |> Repo . preload ( :firmware )
208208 |> DeploymentGroup . update_changeset ( params )
209209
210+ create_deployment_release? =
211+ Map . has_key? ( changeset . changes , :firmware_id ) or
212+ Map . has_key? ( changeset . changes , :archive_id )
213+
210214 with { :ok , deployment_group } <- Repo . update ( changeset ) ,
211215 deployment_group = Repo . preload ( deployment_group , [ :firmware ] , force: true ) ,
212216 :ok <- create_audit_logs! ( deployment_group , changeset ) ,
213217 { :ok , _deployment_group } <-
214- maybe_create_deployment_release (
215- deployment_group ,
216- changeset . changes ,
217- user . id
218+ if ( create_deployment_release? ,
219+ do: create_deployment_release ( deployment_group , user . id ) ,
220+ else: { :ok , nil }
218221 ) do
219222 { :ok , { deployment_group , changeset } }
220223 end
@@ -240,9 +243,7 @@ defmodule NervesHub.ManagedDeployments do
240243 end
241244 end
242245
243- # Create deployment release if firmware or archive changed
244- defp maybe_create_deployment_release ( deployment_group , changes , user_id )
245- when is_map_key ( changes , :firmware_id ) or is_map_key ( changes , :archive_id ) do
246+ defp create_deployment_release ( deployment_group , user_id ) do
246247 % DeploymentRelease { }
247248 |> DeploymentRelease . changeset ( % {
248249 deployment_group_id: deployment_group . id ,
@@ -253,8 +254,6 @@ defmodule NervesHub.ManagedDeployments do
253254 |> Repo . insert ( )
254255 end
255256
256- defp maybe_create_deployment_release ( _deployment_group , _changes , _user_id ) , do: { :ok , nil }
257-
258257 defp create_audit_logs! ( deployment_group , changeset ) do
259258 Enum . each ( changeset . changes , fn
260259 { :archive_id , archive_id } ->
@@ -348,11 +347,17 @@ defmodule NervesHub.ManagedDeployments do
348347 Ecto.Changeset . change ( % DeploymentGroup { } )
349348 end
350349
351- @ spec create_deployment_group ( map ( ) , Product . t ( ) ) ::
350+ @ spec create_deployment_group ( map ( ) , Product . t ( ) , User . t ( ) ) ::
352351 { :ok , DeploymentGroup . t ( ) } | { :error , Changeset . t ( ) }
353- def create_deployment_group ( params , % Product { } = product ) do
354- DeploymentGroup . create_changeset ( params , product )
355- |> Repo . insert ( )
352+ def create_deployment_group ( params , % Product { } = product , user ) do
353+ Repo . transact ( fn ->
354+ changeset = DeploymentGroup . create_changeset ( params , product )
355+
356+ with { :ok , deployment_group } <- Repo . insert ( changeset ) ,
357+ { :ok , _release } <- create_deployment_release ( deployment_group , user . id ) do
358+ { :ok , deployment_group }
359+ end
360+ end )
356361 |> case do
357362 { :ok , deployment_group } ->
358363 deployment_created_event ( deployment_group )
0 commit comments