Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion cli/cdsctl/workflow_run.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ func workflowRunManualRun(v cli.Values) error {
}

// Check if we are on the same repository and if we have a git.branch in the default payload
if wf.WorkflowData != nil && wf.WorkflowData.Node.Context != nil && wf.WorkflowData.Node.Context.ApplicationID != 0 {
if wf.WorkflowData.Node.Context != nil && wf.WorkflowData.Node.Context.ApplicationID != 0 {
app := wf.GetApplication(wf.WorkflowData.Node.Context.ApplicationID)
if remoteURL != "" && strings.Contains(remoteURL, app.RepositoryFullname) && currentBranch != "" {
defaultPayload, err := wf.WorkflowData.Node.Context.DefaultPayloadToMap()
Expand Down
2 changes: 1 addition & 1 deletion engine/api/application/dao_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ func TestLoadByWorkflowID(t *testing.T) {
Name: "test_1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Type: sdk.NodeTypePipeline,
Context: &sdk.NodeContext{
Expand Down
2 changes: 1 addition & 1 deletion engine/api/ascode_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ vcs_ssh_key: proj-blabla
Name: sdk.RandomString(10),
ProjectID: p.ID,
ProjectKey: p.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "root",
Type: sdk.NodeTypePipeline,
Expand Down
2 changes: 1 addition & 1 deletion engine/api/pipeline/pipeline_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ func TestLoadByWorkflowID(t *testing.T) {
Name: "test_1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Type: sdk.NodeTypePipeline,
Context: &sdk.NodeContext{
Expand Down
2 changes: 1 addition & 1 deletion engine/api/project_group_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func Test_ProjectPerms(t *testing.T) {

newWf := sdk.Workflow{
Name: sdk.RandomString(10),
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "root",
Type: sdk.NodeTypePipeline,
Expand Down
3 changes: 2 additions & 1 deletion engine/api/repositories_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,7 @@ func (api *API) attachRepositoriesManagerHandler() service.Handler {
return err
}

// second load for publish the event below
wfOld, err := workflow.LoadByID(ctx, db, api.Cache, *proj, wf.ID, workflow.LoadOptions{})
if err != nil {
return err
Expand Down Expand Up @@ -585,7 +586,7 @@ func (api *API) attachRepositoriesManagerHandler() service.Handler {

wfDB.WorkflowData.Node.Context.DefaultPayload = defaultPayload

if err := workflow.Update(ctx, db, api.Cache, *proj, wfDB, workflow.UpdateOptions{DisableHookManagement: true, OldWorkflow: wfOld}); err != nil {
if err := workflow.Update(ctx, db, api.Cache, *proj, wfDB, workflow.UpdateOptions{DisableHookManagement: true}); err != nil {
return sdk.WrapError(err, "cannot update node context %d", wf.WorkflowData.Node.Context.ID)
}

Expand Down
4 changes: 3 additions & 1 deletion engine/api/repositories_manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,8 @@ func TestAPI_detachRepositoriesManagerHandler(t *testing.T) {
if err := enc.Encode(pr); err != nil {
return writeError(w, err)
}
case "/vcs/github/repos/sguiheux/demo/hooks?url=http%3A%2F%2Flolcat.host&id=666":
// do nothing
default:
t.Fatalf("UNKNOWN ROUTE: %s", r.URL.String())
}
Expand Down Expand Up @@ -194,7 +196,7 @@ vcs_ssh_key: proj-blabla
Name: "test_1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "node1",
Ref: "node1",
Expand Down
2 changes: 1 addition & 1 deletion engine/api/test/assets/assets.go
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ func InsertTestWorkflow(t *testing.T, db gorp.SqlExecutor, store cache.Store, pr
Name: name,
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "node1",
Ref: "node1",
Expand Down
2 changes: 1 addition & 1 deletion engine/api/worker_model_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ func Test_WorkerModelUsage(t *testing.T) {
Name: "workflow1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "root",
Context: &sdk.NodeContext{
Expand Down
6 changes: 1 addition & 5 deletions engine/api/workflow.go
Original file line number Diff line number Diff line change
Expand Up @@ -368,10 +368,6 @@ func (api *API) postWorkflowHandler() service.Handler {
return err
}

if data.WorkflowData == nil {
return sdk.WrapError(sdk.ErrWrongRequest, "no node found")
}

if err := workflow.RenameNode(ctx, api.mustDB(), &data); err != nil {
return err
}
Expand Down Expand Up @@ -457,7 +453,7 @@ func (api *API) putWorkflowHandler() service.Handler {
}
defer tx.Rollback() // nolint

if err := workflow.Update(ctx, tx, api.Cache, *p, &wf, workflow.UpdateOptions{OldWorkflow: oldW}); err != nil {
if err := workflow.Update(ctx, tx, api.Cache, *p, &wf, workflow.UpdateOptions{}); err != nil {
return sdk.WrapError(err, "cannot update workflow")
}

Expand Down
80 changes: 33 additions & 47 deletions engine/api/workflow/dao.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ type LoadOptions struct {
// UpdateOptions is option to parse a workflow
type UpdateOptions struct {
DisableHookManagement bool
OldWorkflow *sdk.Workflow
}

// CountVarInWorkflowData represents the result of CountVariableInWorkflow function
Expand Down Expand Up @@ -190,8 +189,8 @@ func (w *Workflow) PostGet(db gorp.SqlExecutor) error {
}
w.PurgeTags = purgeTags

data := &sdk.WorkflowData{}
if err := gorpmapping.JSONNullString(res.WorkflowData, data); err != nil {
data := sdk.WorkflowData{}
if err := gorpmapping.JSONNullString(res.WorkflowData, &data); err != nil {
return sdk.WrapError(err, "Unable to unmarshall workflow data")
}
if data.Node.ID != 0 {
Expand Down Expand Up @@ -901,86 +900,77 @@ func RenameNode(ctx context.Context, db gorp.SqlExecutor, w *sdk.Workflow) error
}

// Update updates a workflow
func Update(ctx context.Context, db gorp.SqlExecutor, store cache.Store, proj sdk.Project, w *sdk.Workflow, uptOption UpdateOptions) error {
func Update(ctx context.Context, db gorp.SqlExecutor, store cache.Store, proj sdk.Project, wf *sdk.Workflow, uptOption UpdateOptions) error {
ctx, end := observability.Span(ctx, "workflow.Update")
defer end()
if err := IsValid(ctx, store, db, w, proj, LoadOptions{}); err != nil {
if err := IsValid(ctx, store, db, wf, proj, LoadOptions{}); err != nil {
return err
}

if err := DeleteNotifications(db, w.ID); err != nil {
return sdk.WrapError(err, "unable to delete all notifications on workflow(%d - %s)", w.ID, w.Name)
if err := DeleteNotifications(db, wf.ID); err != nil {
return sdk.WrapError(err, "unable to delete all notifications on workflow(%d - %s)", wf.ID, wf.Name)
}

if err := integration.DeleteFromWorkflow(db, w.ID); err != nil {
return sdk.WrapError(err, "unable to delete all integrations on workflow(%d - %s)", w.ID, w.Name)
if err := integration.DeleteFromWorkflow(db, wf.ID); err != nil {
return sdk.WrapError(err, "unable to delete all integrations on workflow(%d - %s)", wf.ID, wf.Name)
}

// Delete workflow data
if uptOption.OldWorkflow != nil && uptOption.OldWorkflow.ID != 0 {
if err := DeleteWorkflowData(db, *uptOption.OldWorkflow); err != nil {
return sdk.WrapError(err, "unable to delete from old workflow data(%d - %s)", w.ID, w.Name)
}
} else {
oldW, err := Load(ctx, db, store, proj, w.Name, LoadOptions{})
if err != nil && !sdk.ErrorIs(err, sdk.ErrWorkflowNotFound) {
return sdk.WrapError(err, "unable to load old workflow to delete workflow data")
}
if err == nil {
if err := DeleteWorkflowData(db, *oldW); err != nil {
return sdk.WrapError(err, "unable to delete from workflow data(%d - %s)", oldW.ID, oldW.Name)
}
}
// reload workflow to delete the current workflow data
oldWf, err := LoadByID(ctx, db, store, proj, wf.ID, LoadOptions{})
if err != nil {
return sdk.WrapError(err, "Unable to load existing workflow with proj:%s ID:%d", proj.Key, wf.ID)
}
if err := DeleteWorkflowData(db, *oldWf); err != nil {
return sdk.WrapError(err, "unable to delete from old workflow data(%d - %s)", wf.ID, wf.Name)
}

// Delete all node ID
w.ResetIDs()
wf.ResetIDs()

filteredPurgeTags := []string{}
for _, t := range w.PurgeTags {
for _, t := range wf.PurgeTags {
if t != "" {
filteredPurgeTags = append(filteredPurgeTags, t)
}
}
w.PurgeTags = filteredPurgeTags

if w.WorkflowData.Node.Context != nil && w.WorkflowData.Node.Context.ApplicationID != 0 {
wf.PurgeTags = filteredPurgeTags
if wf.WorkflowData.Node.Context != nil && wf.WorkflowData.Node.Context.ApplicationID != 0 {
var err error
if w.WorkflowData.Node.Context.DefaultPayload, err = DefaultPayload(ctx, db, store, proj, w); err != nil {
if wf.WorkflowData.Node.Context.DefaultPayload, err = DefaultPayload(ctx, db, store, proj, wf); err != nil {
log.Warning(ctx, "workflow.Update> Cannot set default payload : %v", err)
}
}

if !uptOption.DisableHookManagement {
if err := hookRegistration(ctx, db, store, proj, w, uptOption.OldWorkflow); err != nil {
if err := hookRegistration(ctx, db, store, proj, wf, oldWf); err != nil {
return err
}
if uptOption.OldWorkflow != nil {
hookToDelete := computeHookToDelete(w, uptOption.OldWorkflow)
if oldWf != nil {
hookToDelete := computeHookToDelete(wf, oldWf)
if err := hookUnregistration(ctx, db, store, proj, hookToDelete); err != nil {
return err
}
}
}

if err := InsertWorkflowData(db, w); err != nil {
if err := InsertWorkflowData(db, wf); err != nil {
return sdk.WrapError(err, "Update> Unable to insert workflow data")
}

// Insert notifications
for i := range w.Notifications {
n := &w.Notifications[i]
if err := InsertNotification(db, w, n); err != nil {
return sdk.WrapError(err, "Unable to update workflow(%d) notification (%#v)", w.ID, n)
for i := range wf.Notifications {
n := &wf.Notifications[i]
if err := InsertNotification(db, wf, n); err != nil {
return sdk.WrapError(err, "Unable to update workflow(%d) notification (%#v)", wf.ID, n)
}
}

w.LastModified = time.Now()
dbw := Workflow(*w)
wf.LastModified = time.Now()
dbw := Workflow(*wf)
if _, err := db.Update(&dbw); err != nil {
return sdk.WrapError(err, "Unable to update workflow")
}
*w = sdk.Workflow(dbw)
*wf = sdk.Workflow(dbw)

return nil
}
Expand Down Expand Up @@ -1035,10 +1025,6 @@ func IsValid(ctx context.Context, store cache.Store, db gorp.SqlExecutor, w *sdk
return sdk.NewError(sdk.ErrWorkflowInvalid, fmt.Errorf("Invalid project key"))
}

if w.WorkflowData == nil {
return sdk.WithStack(fmt.Errorf("bad workflow, workflow data must not be null"))
}

if w.Icon != "" {
if !strings.HasPrefix(w.Icon, sdk.IconFormat) {
return sdk.WithStack(sdk.ErrIconBadFormat)
Expand Down Expand Up @@ -1386,8 +1372,8 @@ func Push(ctx context.Context, db *gorp.DbMap, store cache.Store, proj *sdk.Proj
var workflowExists bool
var oldWf *sdk.Workflow

if opts != nil && opts.OldWorkflow != nil {
oldWf = opts.OldWorkflow
if opts != nil && opts.OldWorkflow.ID > 0 {
oldWf = &opts.OldWorkflow
} else {
// load the workflow from database if exists
workflowExists, err = Exists(db, proj.Key, data.wrkflw.GetName())
Expand Down
13 changes: 5 additions & 8 deletions engine/api/workflow/dao_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,18 @@ func CountPipeline(db gorp.SqlExecutor, pipelineID int64) (bool, error) {
}

// DeleteWorkflowData delete the relation representation of the workflow
func DeleteWorkflowData(db gorp.SqlExecutor, w sdk.Workflow) error {
if w.WorkflowData == nil {
return nil
}
log.Debug("DeleteWorkflowData> deleting workflow data %d", w.ID)
func DeleteWorkflowData(db gorp.SqlExecutor, wf sdk.Workflow) error {
log.Debug("DeleteWorkflowData> deleting workflow data %d", wf.ID)

// Delete all JOINs
for _, j := range w.WorkflowData.Joins {
for _, j := range wf.WorkflowData.Joins {
if err := deleteJoinData(db, j); err != nil {
return sdk.WrapError(err, "DeleteWorkflowData> unable to delete all join on workflow(%d)", w.ID)
return sdk.WrapError(err, "DeleteWorkflowData> unable to delete all join on workflow(%d)", wf.ID)
}
}

//Delete root
if err := deleteNodeData(db, w.WorkflowData.Node); err != nil {
if err := deleteNodeData(db, wf.WorkflowData.Node); err != nil {
return sdk.WrapError(err, "DeleteWorkflowData> Unable to delete workflow root")
}

Expand Down
14 changes: 7 additions & 7 deletions engine/api/workflow/dao_run_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func TestCanBeRun(t *testing.T) {
Name: "test_1",
ProjectID: 1,
ProjectKey: "key",
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: nodeRoot,
},
},
Expand Down Expand Up @@ -196,7 +196,7 @@ vcs_ssh_key: proj-blabla
Name: "test_purge_1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "node1",
Ref: "node1",
Expand Down Expand Up @@ -284,7 +284,7 @@ func TestPurgeWorkflowRunWithRunningStatus(t *testing.T) {
Name: "test_purge_1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "node1",
Ref: "node1",
Expand Down Expand Up @@ -471,7 +471,7 @@ vcs_ssh_key: proj-blabla
Name: "test_purge_1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "node1",
Ref: "node1",
Expand Down Expand Up @@ -662,7 +662,7 @@ vcs_ssh_key: proj-blabla
Name: "test_purge_1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "node1",
Ref: "node1",
Expand Down Expand Up @@ -753,7 +753,7 @@ func TestPurgeWorkflowRunWithoutTags(t *testing.T) {
Name: "test_purge_1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "node1",
Ref: "node1",
Expand Down Expand Up @@ -839,7 +839,7 @@ func TestPurgeWorkflowRunWithoutTagsBiggerHistoryLength(t *testing.T) {
Name: "test_purge_1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "node1",
Ref: "node1",
Expand Down
2 changes: 1 addition & 1 deletion engine/api/workflow/dao_staticfiles_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func TestInsertStaticFiles(t *testing.T) {
Name: "test_staticfiles_1",
ProjectID: proj.ID,
ProjectKey: proj.Key,
WorkflowData: &sdk.WorkflowData{
WorkflowData: sdk.WorkflowData{
Node: sdk.Node{
Name: "node1",
Ref: "node1",
Expand Down
Loading