Skip to content

Commit c62a03c

Browse files
authored
fix(ui,cdsctl): merge args tmpl bulk, ui load instance with no workflow (#5193)
1 parent 34f304d commit c62a03c

File tree

8 files changed

+69
-31
lines changed

8 files changed

+69
-31
lines changed

cli/cdsctl/template_bulk.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ type templateBulkFileInstance struct {
7979
Parameters []string `json:"parameters" yaml:"parameters"`
8080
}
8181

82+
func templateInstanceKey(w sdk.WorkflowTemplateInstance) string {
83+
return fmt.Sprintf("%s/%s", w.Project.Key, w.Request.WorkflowName)
84+
}
85+
8286
func templateExtractAndValidateInstances(instanceKeys []string) (map[string]templateBulkInstancePath, error) {
8387
minstances := make(map[string]templateBulkInstancePath)
8488
for i := range instanceKeys {
@@ -269,7 +273,7 @@ func templateAskForInstances(wt *sdk.WorkflowTemplate, mwtis map[string]sdk.Work
269273
info = cli.Green("up to date")
270274
}
271275

272-
_, instanceGivenAsParam := moperations[instance.Key()]
276+
_, instanceGivenAsParam := moperations[templateInstanceKey(instance)]
273277
// selected by default if given as param or if no instances given as param an not up to date
274278
defaultSelected := instanceGivenAsParam || (instance.Workflow != nil && notUpToDate && len(moperations) == 0)
275279

@@ -360,7 +364,7 @@ func templateBulkRun(v cli.Values) error {
360364

361365
mwtis := make(map[string]sdk.WorkflowTemplateInstance, len(wtis))
362366
for _, i := range wtis {
363-
mwtis[i.Key()] = i
367+
mwtis[templateInstanceKey(i)] = i
364368
}
365369

366370
moperations := templateInitOperationFromParams(mwtis, fileOperations, minstances, params)
@@ -377,7 +381,7 @@ func templateBulkRun(v cli.Values) error {
377381

378382
// ask interactively for params if prompt not disabled
379383
if !v.GetBool("no-interactive") {
380-
sort.Slice(wtis, func(i, j int) bool { return wtis[i].Key() < wtis[j].Key() })
384+
sort.Slice(wtis, func(i, j int) bool { return templateInstanceKey(wtis[i]) < templateInstanceKey(wtis[j]) })
381385
if err := templateAskForInstances(wt, mwtis, minstances, moperations); err != nil {
382386
return err
383387
}
@@ -505,7 +509,7 @@ func templateBulkRun(v cli.Values) error {
505509
}
506510

507511
if len(moperations) == 0 {
508-
fmt.Printf("Nothing to do")
512+
fmt.Println("Nothing to do")
509513
return nil
510514
}
511515

engine/api/templates.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"strconv"
1313

1414
"github.com/gorilla/mux"
15+
"github.com/sirupsen/logrus"
1516

1617
"github.com/ovh/cds/engine/api/application"
1718
"github.com/ovh/cds/engine/api/ascode"
@@ -565,7 +566,10 @@ func (api *API) postTemplateBulkHandler() service.Handler {
565566

566567
errorDefer := func(err error) error {
567568
if err != nil {
568-
log.Error(ctx, "%+v", err)
569+
err = sdk.WrapError(err, "error occurred in template bulk with id %d", bulk.ID)
570+
log.ErrorWithFields(ctx, logrus.Fields{
571+
"stack_trace": fmt.Sprintf("%+v", err),
572+
}, "%s", err)
569573
bulk.Operations[i].Status = sdk.OperationStatusError
570574
bulk.Operations[i].Error = fmt.Sprintf("%s", sdk.Cause(err))
571575
if err := workflowtemplate.UpdateBulk(api.mustDB(), &bulk); err != nil {

sdk/workflow_template.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -397,15 +397,6 @@ type WorkflowTemplateInstance struct {
397397
Workflow *Workflow `json:"workflow,omitempty" db:"-"`
398398
}
399399

400-
// Key returns unique key for instance.
401-
func (w WorkflowTemplateInstance) Key() string {
402-
workflowName := w.WorkflowName
403-
if w.Workflow != nil {
404-
workflowName = w.Workflow.Name
405-
}
406-
return fmt.Sprintf("%s/%s", w.Project.Key, workflowName)
407-
}
408-
409400
// WorkflowTemplateInstancesToIDs returns ids of given workflow template instances.
410401
func WorkflowTemplateInstancesToIDs(wtis []*WorkflowTemplateInstance) []int64 {
411402
ids := make([]int64, len(wtis))

ui/.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
ui.tar.gz
1+
ui.tar.gz
2+
private.proxy.conf.json

ui/src/app/model/workflow-template.model.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export class WorkflowTemplateInstance implements WithKey {
6464
request: WorkflowTemplateRequest;
6565
project: Project;
6666
workflow: Workflow;
67+
workflow_id: Workflow;
6768
first_audit: AuditWorkflowTemplateInstance;
6869
last_audit: AuditWorkflowTemplateInstance;
6970
workflow_name: string;

ui/src/app/shared/workflow-template/apply-modal/workflow-template.apply-modal.component.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import { WorkflowTemplateService } from 'app/service/workflow-template/workflow-
1717
import { WorkflowService } from 'app/service/workflow/workflow.service';
1818
import { calculateWorkflowTemplateDiff } from 'app/shared/diff/diff';
1919
import { Item } from 'app/shared/diff/list/diff.list.component';
20-
import { finalize } from 'rxjs/operators';
2120
import { forkJoin } from 'rxjs/internal/observable/forkJoin';
21+
import { finalize } from 'rxjs/operators';
2222

2323
@Component({
2424
selector: 'app-workflow-template-apply-modal',
@@ -94,6 +94,17 @@ export class WorkflowTemplateApplyModalComponent implements OnChanges {
9494
if (this.workflowTemplateIn && this.workflowTemplateInstanceIn) {
9595
this.workflowTemplate = this.workflowTemplateIn;
9696
this.workflowTemplateInstance = this.workflowTemplateInstanceIn;
97+
98+
if (!this.workflowTemplateInstance.workflow) {
99+
this._projectService.getProject(this.workflowTemplateInstanceIn.project.key, [new LoadOpts('withKeys', 'keys')])
100+
.pipe(finalize(() => this._cd.markForCheck()))
101+
.subscribe(p => {
102+
this.project = p;
103+
this.loadAudits();
104+
});
105+
return;
106+
}
107+
97108
forkJoin([
98109
this._projectService.getProject(this.workflowTemplateInstanceIn.project.key, [new LoadOpts('withKeys', 'keys')]),
99110
this._workflowService.getWorkflow(this.workflowTemplateInstance.project.key, this.workflowTemplateInstance.workflow_name)

ui/src/app/views/settings/worker-model/list/worker-model.list.component.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@ export class WorkerModelListComponent {
2727
this.filter = f => {
2828
const lowerFilter = f.toLowerCase();
2929
return d => {
30-
return d.name.toLowerCase().indexOf(lowerFilter) !== -1 ||
31-
d.type.toLowerCase().indexOf(lowerFilter) !== -1;
30+
let s = `${d.group.name}/${d.name}`.toLowerCase();
31+
return s.indexOf(lowerFilter) !== -1 ||
32+
d.type.toLowerCase().indexOf(lowerFilter) !== -1 ||
33+
d.description.toLowerCase().indexOf(lowerFilter) !== -1 ||
34+
this.getImageName(d).toLowerCase().indexOf(lowerFilter) !== -1;
3235
}
3336
};
3437

@@ -40,6 +43,11 @@ export class WorkerModelListComponent {
4043
}];
4144

4245
this.columns = [
46+
<Column<WorkerModel>>{
47+
name: 'worker_model_group',
48+
class: 'three',
49+
selector: (wm: WorkerModel) => wm.group.name
50+
},
4351
<Column<WorkerModel>>{
4452
type: ColumnType.ROUTER_LINK_WITH_ICONS,
4553
name: 'common_name',
@@ -98,11 +106,6 @@ export class WorkerModelListComponent {
98106
class: 'three',
99107
selector: this.getImageName
100108
},
101-
<Column<WorkerModel>>{
102-
name: 'worker_model_group',
103-
class: 'three',
104-
selector: (wm: WorkerModel) => wm.group.name
105-
},
106109
];
107110

108111
this.loadWorkerModels();
@@ -116,7 +119,14 @@ export class WorkerModelListComponent {
116119
this._cd.markForCheck();
117120
}))
118121
.subscribe(wms => {
119-
this.workerModels = wms;
122+
this.workerModels = wms.sort((a, b) => {
123+
let aG = a.group.name.toLowerCase();
124+
let bG = b.group.name.toLowerCase();
125+
if (aG === bG) {
126+
return a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1;
127+
}
128+
return aG > bG ? 1 : -1;
129+
});
120130
});
121131
}
122132

ui/src/app/views/settings/workflow-template/list/workflow-template.list.component.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export class WorkflowTemplateListComponent {
2222
const lowerFilter = f.toLowerCase();
2323
return d => {
2424
let s = `${d.group.name}/${d.name}`.toLowerCase();
25-
return s.indexOf(lowerFilter) !== -1;
25+
return s.indexOf(lowerFilter) !== -1 || d.description.toLowerCase().indexOf(lowerFilter) !== -1;
2626
}
2727
};
2828

@@ -34,24 +34,31 @@ export class WorkflowTemplateListComponent {
3434
}];
3535

3636
this.columns = [
37+
<Column<WorkflowTemplate>>{
38+
name: 'common_group',
39+
class: 'three',
40+
selector: (wt: WorkflowTemplate) => wt.group.name
41+
},
3742
<Column<WorkflowTemplate>>{
3843
type: ColumnType.ROUTER_LINK,
3944
name: 'common_name',
45+
class: 'four',
4046
selector: (wt: WorkflowTemplate) => {
4147
return {
4248
link: `/settings/workflow-template/${wt.group.name}/${wt.slug}`,
4349
value: wt.name
4450
};
4551
}
4652
},
47-
<Column<WorkflowTemplate>>{
48-
name: 'common_group',
49-
selector: (wt: WorkflowTemplate) => wt.group.name
50-
},
5153
<Column<WorkflowTemplate>>{
5254
type: ColumnType.MARKDOWN,
5355
name: 'common_description',
54-
selector: (wt: WorkflowTemplate) => wt.description
56+
selector: (wt: WorkflowTemplate) => {
57+
if (wt.description && wt.description.length > 100) {
58+
return wt.description.substr(0, 100) + '...';
59+
}
60+
return wt.description;
61+
}
5562
}
5663
];
5764

@@ -65,6 +72,15 @@ export class WorkflowTemplateListComponent {
6572
this.loading = false;
6673
this._cd.markForCheck();
6774
}))
68-
.subscribe(wts => { this.workflowTemplates = wts; });
75+
.subscribe(wts => {
76+
this.workflowTemplates = wts.sort((a, b) => {
77+
let aG = a.group.name.toLowerCase();
78+
let bG = b.group.name.toLowerCase();
79+
if (aG === bG) {
80+
return a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1;
81+
}
82+
return aG > bG ? 1 : -1;
83+
});
84+
});
6985
}
7086
}

0 commit comments

Comments
 (0)