• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mendersoftware / workflows / 1565759653

29 Nov 2024 07:56AM UTC coverage: 67.786% (-14.5%) from 82.255%
1565759653

push

gitlab-ci

web-flow
Merge pull request #336 from alfrunes/2.6.x

chore(deps): Update golang builder images to latest

1050 of 1549 relevant lines covered (67.79%)

5.01 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/app/processor/job.go
1
// Copyright 2023 Northern.tech AS
2
//
3
//    Licensed under the Apache License, Version 2.0 (the "License");
4
//    you may not use this file except in compliance with the License.
5
//    You may obtain a copy of the License at
6
//
7
//        http://www.apache.org/licenses/LICENSE-2.0
8
//
9
//    Unless required by applicable law or agreed to in writing, software
10
//    distributed under the License is distributed on an "AS IS" BASIS,
11
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
//    See the License for the specific language governing permissions and
13
//    limitations under the License.
14

15
package processor
16

17
import (
18
        "strings"
19

20
        "go.mongodb.org/mongo-driver/bson"
21
        "go.mongodb.org/mongo-driver/bson/primitive"
22

23
        "github.com/mendersoftware/workflows/model"
24
)
25

26
type JobProcessor struct {
27
        job *model.Job
28
}
29

30
type JsonOptions struct {
31
}
32

33
func NewJobProcessor(job *model.Job) *JobProcessor {
×
34
        return &JobProcessor{
×
35
                job: job,
×
36
        }
×
37
}
×
38

39
func (j JobProcessor) ProcessJSON(
40
        data interface{},
41
        ps *JobStringProcessor,
42
        options ...*JsonOptions,
43
) interface{} {
×
44
        switch value := data.(type) {
×
45
        case []interface{}:
×
46
                result := make([]interface{}, len(value))
×
47
                for i, item := range value {
×
48
                        result[i] = j.ProcessJSON(item, ps)
×
49
                }
×
50
                return result
×
51
        case map[string]interface{}:
×
52
                result := make(map[string]interface{})
×
53
                for key, item := range value {
×
54
                        result[key] = j.ProcessJSON(item, ps)
×
55
                }
×
56
                return result
×
57
        case string:
×
58
                if len(value) > 3 && value[0:2] == "${" && value[len(value)-1:] == "}" {
×
59
                        key := value[2 : len(value)-1]
×
60
                        if strings.HasPrefix(key, workflowInputVariable) &&
×
61
                                len(key) > len(workflowInputVariable) {
×
62
                                key = key[len(workflowInputVariable):]
×
63
                                for _, param := range j.job.InputParameters {
×
64
                                        if param.Name == key && param.Raw != nil {
×
65
                                                return j.ProcessJSON(param.Raw, ps)
×
66
                                        }
×
67
                                }
68
                                return nil
×
69
                        }
70
                }
71
                return ps.ProcessJobString(value)
×
72
        case primitive.D:
×
73
                result := make(map[string]interface{})
×
74
                var mapValue bson.M
×
75
                bsonValue, err := bson.Marshal(value)
×
76
                if err != nil {
×
77
                        return nil
×
78
                }
×
79
                err = bson.Unmarshal(bsonValue, &mapValue)
×
80
                if err != nil {
×
81
                        return nil
×
82
                }
×
83
                for key, item := range mapValue {
×
84
                        result[key] = j.ProcessJSON(item, ps)
×
85
                }
×
86
                return result
×
87
        case []primitive.D:
×
88
                result := make([]interface{}, len(value))
×
89
                for i, item := range value {
×
90
                        result[i] = j.ProcessJSON(item, ps)
×
91
                }
×
92
                return result
×
93
        }
94
        return data
×
95
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc