Skip to content

Commit 8303faa

Browse files
authored
fix(api): return more info for error on worker set-version (#5813)
1 parent 70909f2 commit 8303faa

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

engine/api/workflow/dao_run.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/ovh/cds/engine/api/authentication"
2020
"github.com/ovh/cds/engine/api/database/gorpmapping"
2121
"github.com/ovh/cds/engine/api/services"
22+
"github.com/ovh/cds/engine/gorpmapper"
2223
"github.com/ovh/cds/sdk"
2324
"github.com/ovh/cds/sdk/telemetry"
2425
)
@@ -84,7 +85,12 @@ func UpdateWorkflowRun(ctx context.Context, db gorp.SqlExecutor, wr *sdk.Workflo
8485

8586
runDB := Run(*wr)
8687
if _, err := db.Update(&runDB); err != nil {
87-
return sdk.WrapError(err, "Unable to update workflow run")
88+
if e, ok := err.(*pq.Error); ok {
89+
if e.Code == gorpmapper.ViolateUniqueKeyPGCode {
90+
return sdk.NewError(sdk.ErrConflictData, e)
91+
}
92+
}
93+
return sdk.WrapError(err, "unable to update workflow run")
8894
}
8995
wr.ID = runDB.ID
9096
return nil
@@ -284,7 +290,7 @@ func LoadRunsIDsToDelete(db gorp.SqlExecutor, offset int64, limit int64) ([]int6
284290
}
285291

286292
var ids []int64
287-
querySelect := `SELECT id FROM workflow_run
293+
querySelect := `SELECT id FROM workflow_run
288294
WHERE to_delete = true
289295
ORDER BY workflow_run.start ASC limit $1 offset $2`
290296
_, err = db.Select(&ids, querySelect, limit, offset)

engine/api/workflow_queue.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -1228,11 +1228,14 @@ func (api *API) postWorkflowJobSetVersionHandler() service.Handler {
12281228
}
12291229

12301230
if workflowRun.Version != nil && *workflowRun.Version != data.Value {
1231-
return sdk.NewErrorFrom(sdk.ErrForbidden, "cannot change existing workflow run version value")
1231+
return sdk.NewErrorFrom(sdk.ErrForbidden, "cannot change existing workflow run version value %q", *workflowRun.Version)
12321232
}
12331233

12341234
workflowRun.Version = &data.Value
12351235
if err := workflow.UpdateWorkflowRun(ctx, tx, workflowRun); err != nil {
1236+
if sdk.ErrorIs(err, sdk.ErrConflictData) {
1237+
return sdk.NewErrorFrom(err, "version %q already used by another workflow run", data.Value)
1238+
}
12361239
return err
12371240
}
12381241

sdk/workflow_run.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ type WorkflowRunVersion struct {
192192
func (w WorkflowRunVersion) IsValid() error {
193193
_, err := semver.ParseTolerant(w.Value)
194194
if err != nil {
195-
return NewError(ErrWrongRequest, fmt.Errorf("value '%s' is not semver compatible: %v", w.Value, err))
195+
return NewError(ErrWrongRequest, fmt.Errorf("value %q is not semver compatible: %v", w.Value, err))
196196
}
197197
return nil
198198
}

0 commit comments

Comments
 (0)