Skip to content

Commit 62862a9

Browse files
committed
release history on deployment group creation
1 parent ec13c92 commit 62862a9

File tree

6 files changed

+134
-43
lines changed

6 files changed

+134
-43
lines changed

lib/nerves_hub/managed_deployments.ex

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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
"""

lib/nerves_hub/managed_deployments/deployment_group.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ defmodule NervesHub.ManagedDeployments.DeploymentGroup do
3838

3939
has_many(:inflight_updates, InflightUpdate, foreign_key: :deployment_id)
4040
has_many(:devices, Device, foreign_key: :deployment_id, on_delete: :nilify_all)
41-
has_many(:deployment_releases, DeploymentRelease)
41+
has_many(:deployment_releases, DeploymentRelease, on_delete: :delete_all)
4242
has_many(:update_stats, UpdateStat, on_delete: :nilify_all, foreign_key: :deployment_id)
4343

4444
embeds_one :conditions, __MODULE__.Conditions, primary_key: false, on_replace: :update do

lib/nerves_hub_web/controllers/api/deployment_group_controller.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ defmodule NervesHubWeb.API.DeploymentGroupController do
2929
uuid ->
3030
with {:ok, firmware} <- Firmwares.get_firmware_by_product_and_uuid(product, uuid),
3131
params = Map.put(params, "firmware_id", firmware.id),
32-
{:ok, deployment_group} <- ManagedDeployments.create_deployment_group(params, product) do
32+
{:ok, deployment_group} <- ManagedDeployments.create_deployment_group(params, product, user) do
3333
DeploymentGroupTemplates.audit_deployment_created(user, deployment_group)
3434

3535
conn

lib/nerves_hub_web/live/deployment_groups/new.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ defmodule NervesHubWeb.Live.DeploymentGroups.New do
143143

144144
%{user: user, org: org, product: product} = socket.assigns
145145

146-
ManagedDeployments.create_deployment_group(params, product)
146+
ManagedDeployments.create_deployment_group(params, product, user)
147147
|> case do
148148
{:ok, deployment_group} ->
149149
_ = DeploymentGroupTemplates.audit_deployment_created(user, deployment_group)

0 commit comments

Comments
 (0)