Skip to content
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 111 additions & 2 deletions apps/workspace-engine/pkg/events/handler/deployment/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,38 @@ import (

"workspace-engine/pkg/events/handler"
"workspace-engine/pkg/oapi"
"workspace-engine/pkg/selector"
"workspace-engine/pkg/workspace"
"workspace-engine/pkg/workspace/releasemanager/deployment/jobs"

"github.com/charmbracelet/log"
)

func makeReleaseTargets(ctx context.Context, ws *workspace.Workspace, deployment *oapi.Deployment) ([]*oapi.ReleaseTarget, error) {
environments := ws.Systems().Environments(deployment.SystemId)
releaseTargets := make([]*oapi.ReleaseTarget, 0)
for _, environment := range environments {
resources, err := ws.Environments().Resources(ctx, environment.Id)
if err != nil {
return nil, err
}
for _, resource := range resources {
isMatch, err := selector.Match(ctx, deployment.ResourceSelector, resource)
if err != nil {
return nil, err
}
if isMatch {
releaseTargets = append(releaseTargets, &oapi.ReleaseTarget{
EnvironmentId: environment.Id,
DeploymentId: deployment.Id,
ResourceId: resource.Id,
})
}
}
}
return releaseTargets, nil
}

func HandleDeploymentCreated(
ctx context.Context,
ws *workspace.Workspace,
Expand All @@ -28,9 +54,58 @@ func HandleDeploymentCreated(
return err
}

releaseTargets, err := makeReleaseTargets(ctx, ws, deployment)
if err != nil {
return err
}
for _, releaseTarget := range releaseTargets {
err := ws.ReleaseTargets().Upsert(ctx, releaseTarget)
if err != nil {
return err
}

if deployment.JobAgentId != nil && *deployment.JobAgentId != "" {
ws.ReleaseManager().ReconcileTarget(ctx, releaseTarget, false)
}
}

return nil
}

func getRemovedReleaseTargets(oldReleaseTargets []*oapi.ReleaseTarget, newReleaseTargets []*oapi.ReleaseTarget) []*oapi.ReleaseTarget {
removedReleaseTargets := make([]*oapi.ReleaseTarget, 0)
for _, oldReleaseTarget := range oldReleaseTargets {
found := false
for _, newReleaseTarget := range newReleaseTargets {
if oldReleaseTarget.Key() == newReleaseTarget.Key() {
found = true
break
}
}
if !found {
removedReleaseTargets = append(removedReleaseTargets, oldReleaseTarget)
}
}
return removedReleaseTargets
}

func getAddedReleaseTargets(oldReleaseTargets []*oapi.ReleaseTarget, newReleaseTargets []*oapi.ReleaseTarget) []*oapi.ReleaseTarget {
addedReleaseTargets := make([]*oapi.ReleaseTarget, 0)
for _, newReleaseTarget := range newReleaseTargets {
found := false
for _, oldReleaseTarget := range oldReleaseTargets {
if oldReleaseTarget.Key() == newReleaseTarget.Key() {
found = true
break
}
}
if !found {
addedReleaseTargets = append(addedReleaseTargets, newReleaseTarget)
}
}
return addedReleaseTargets
}

func HandleDeploymentUpdated(
ctx context.Context,
ws *workspace.Workspace,
Expand All @@ -46,8 +121,33 @@ func HandleDeploymentUpdated(
return err
}

// Check if this deployment now has a valid job agent configured and
// if there are any InvalidJobAgent jobs that need to be retriggered
oldReleaseTargets, err := ws.ReleaseTargets().GetForDeployment(ctx, deployment.Id)
if err != nil {
return err
}

releaseTargets, err := makeReleaseTargets(ctx, ws, deployment)
if err != nil {
return err
}

removedReleaseTargets := getRemovedReleaseTargets(oldReleaseTargets, releaseTargets)
addedReleaseTargets := getAddedReleaseTargets(oldReleaseTargets, releaseTargets)

for _, removedReleaseTarget := range removedReleaseTargets {
ws.ReleaseTargets().Remove(removedReleaseTarget.Key())
}
for _, addedReleaseTarget := range addedReleaseTargets {
err := ws.ReleaseTargets().Upsert(ctx, addedReleaseTarget)
if err != nil {
return err
}

if deployment.JobAgentId != nil && *deployment.JobAgentId != "" {
ws.ReleaseManager().ReconcileTarget(ctx, addedReleaseTarget, false)
}
}

if shouldRetriggerJobs(ws, deployment) {
retriggerInvalidJobAgentJobs(ctx, ws, deployment)
}
Expand All @@ -67,6 +167,15 @@ func HandleDeploymentDeleted(

ws.Deployments().Remove(ctx, deployment.Id)

oldReleaseTargets, err := ws.ReleaseTargets().GetForDeployment(ctx, deployment.Id)
if err != nil {
return err
}

for _, oldReleaseTarget := range oldReleaseTargets {
ws.ReleaseTargets().Remove(oldReleaseTarget.Key())
}

return nil
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,26 @@ package deploymentvariables
import (
"context"
"encoding/json"
"fmt"
"workspace-engine/pkg/events/handler"
"workspace-engine/pkg/oapi"
"workspace-engine/pkg/workspace"
)

func getReleaseTargets(ctx context.Context, ws *workspace.Workspace, deploymentVariableValue *oapi.DeploymentVariableValue) ([]*oapi.ReleaseTarget, error) {
deploymentVariable, ok := ws.DeploymentVariables().Get(deploymentVariableValue.DeploymentVariableId)
if !ok {
return nil, fmt.Errorf("deployment variable %s not found", deploymentVariableValue.DeploymentVariableId)
}

releaseTargets, err := ws.ReleaseTargets().GetForDeployment(ctx, deploymentVariable.DeploymentId)
if err != nil {
return nil, err
}
return releaseTargets, nil

}

func HandleDeploymentVariableValueCreated(
ctx context.Context,
ws *workspace.Workspace,
Expand All @@ -20,6 +35,13 @@ func HandleDeploymentVariableValueCreated(

ws.DeploymentVariableValues().Upsert(ctx, deploymentVariableValue.Id, deploymentVariableValue)

releaseTargets, err := getReleaseTargets(ctx, ws, deploymentVariableValue)
if err != nil {
return err
}
for _, releaseTarget := range releaseTargets {
ws.ReleaseManager().ReconcileTarget(ctx, releaseTarget, false)
}
return nil
}

Expand All @@ -35,6 +57,14 @@ func HandleDeploymentVariableValueUpdated(

ws.DeploymentVariableValues().Upsert(ctx, deploymentVariableValue.Id, deploymentVariableValue)

releaseTargets, err := getReleaseTargets(ctx, ws, deploymentVariableValue)
if err != nil {
return err
}
for _, releaseTarget := range releaseTargets {
ws.ReleaseManager().ReconcileTarget(ctx, releaseTarget, false)
}

return nil
}

Expand All @@ -48,5 +78,13 @@ func HandleDeploymentVariableValueDeleted(
return err
}
ws.DeploymentVariableValues().Remove(ctx, deploymentVariableValue.Id)

releaseTargets, err := getReleaseTargets(ctx, ws, deploymentVariableValue)
if err != nil {
return err
}
for _, releaseTarget := range releaseTargets {
ws.ReleaseManager().ReconcileTarget(ctx, releaseTarget, false)
}
return nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@ func HandleDeploymentVariableCreated(

ws.DeploymentVariables().Upsert(ctx, deploymentVariable.Id, deploymentVariable)

releaseTargets, err := ws.ReleaseTargets().GetForDeployment(ctx, deploymentVariable.DeploymentId)
if err != nil {
return err
}
for _, releaseTarget := range releaseTargets {
ws.ReleaseManager().ReconcileTarget(ctx, releaseTarget, false)
}

return nil
}

Expand All @@ -36,6 +44,14 @@ func HandleDeploymentVariableUpdated(

ws.DeploymentVariables().Upsert(ctx, deploymentVariable.Id, deploymentVariable)

releaseTargets, err := ws.ReleaseTargets().GetForDeployment(ctx, deploymentVariable.DeploymentId)
if err != nil {
return err
}
for _, releaseTarget := range releaseTargets {
ws.ReleaseManager().ReconcileTarget(ctx, releaseTarget, false)
}

return nil
}

Expand All @@ -51,5 +67,12 @@ func HandleDeploymentVariableDeleted(

ws.DeploymentVariables().Remove(ctx, deploymentVariable.Id)

releaseTargets, err := ws.ReleaseTargets().GetForDeployment(ctx, deploymentVariable.DeploymentId)
if err != nil {
return err
}
for _, releaseTarget := range releaseTargets {
ws.ReleaseManager().ReconcileTarget(ctx, releaseTarget, false)
}
return nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ func HandleDeploymentVersionCreated(

ws.DeploymentVersions().Upsert(ctx, deploymentVersion.Id, deploymentVersion)

releaseTargets, err := ws.ReleaseTargets().GetForDeployment(ctx, deploymentVersion.DeploymentId)
if err != nil {
return err
}

for _, releaseTarget := range releaseTargets {
ws.ReleaseManager().ReconcileTarget(ctx, releaseTarget, false)
}

return nil
}

Expand All @@ -36,6 +45,14 @@ func HandleDeploymentVersionUpdated(

ws.DeploymentVersions().Upsert(ctx, deploymentVersion.Id, deploymentVersion)

releaseTargets, err := ws.ReleaseTargets().GetForDeployment(ctx, deploymentVersion.DeploymentId)
if err != nil {
return err
}
for _, releaseTarget := range releaseTargets {
ws.ReleaseManager().ReconcileTarget(ctx, releaseTarget, false)
}

return nil
}

Expand All @@ -51,5 +68,13 @@ func HandleDeploymentVersionDeleted(

ws.DeploymentVersions().Remove(ctx, deploymentVersion.Id)

releaseTargets, err := ws.ReleaseTargets().GetForDeployment(ctx, deploymentVersion.DeploymentId)
if err != nil {
return err
}
for _, releaseTarget := range releaseTargets {
ws.ReleaseManager().ReconcileTarget(ctx, releaseTarget, false)
}

return nil
}
Loading
Loading