@@ -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 ( ) }
@@ -348,11 +348,17 @@ defmodule NervesHub.ManagedDeployments do
348348 Ecto.Changeset . change ( % DeploymentGroup { } )
349349 end
350350
351- @ spec create_deployment_group ( map ( ) , Product . t ( ) ) ::
351+ @ spec create_deployment_group ( map ( ) , Product . t ( ) , User . t ( ) ) ::
352352 { :ok , DeploymentGroup . t ( ) } | { :error , Changeset . t ( ) }
353- def create_deployment_group ( params , % Product { } = product ) do
354- DeploymentGroup . create_changeset ( params , product )
355- |> Repo . insert ( )
353+ def create_deployment_group ( params , % Product { } = product , user ) do
354+ Repo . transact ( fn ->
355+ changeset = DeploymentGroup . create_changeset ( params , product )
356+
357+ with { :ok , deployment_group } <- Repo . insert ( changeset ) ,
358+ { :ok , _release } <- maybe_create_initial_deployment_release ( deployment_group , user ) do
359+ { :ok , deployment_group }
360+ end
361+ end )
356362 |> case do
357363 { :ok , deployment_group } ->
358364 deployment_created_event ( deployment_group )
@@ -364,6 +370,20 @@ defmodule NervesHub.ManagedDeployments do
364370 end
365371 end
366372
373+ # Create initial deployment release if firmware is set during creation
374+ defp maybe_create_initial_deployment_release ( % { firmware_id: nil } , _user ) , do: { :ok , nil }
375+
376+ defp maybe_create_initial_deployment_release ( deployment_group , user ) do
377+ % DeploymentRelease { }
378+ |> DeploymentRelease . changeset ( % {
379+ deployment_group_id: deployment_group . id ,
380+ firmware_id: deployment_group . firmware_id ,
381+ archive_id: deployment_group . archive_id ,
382+ created_by_id: user . id
383+ } )
384+ |> Repo . insert ( )
385+ end
386+
367387 @ doc """
368388 List all deployment releases for a deployment group, ordered by most recent first.
369389 """
0 commit comments