Skip to content

Commit 91291ff

Browse files
committed
First working version of tasks in separate packages
1 parent 70fc13a commit 91291ff

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1103
-913
lines changed

tasks/builder.go renamed to builder/builder.go

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package tasks
1+
package builder
22

33
import (
44
"errors"
@@ -8,7 +8,9 @@ import (
88
"github.com/sirupsen/logrus"
99
"gopkg.in/yaml.v2"
1010

11+
"github.com/realvnc-labs/tacoscript/builder/parser"
1112
"github.com/realvnc-labs/tacoscript/conv"
13+
"github.com/realvnc-labs/tacoscript/tasks"
1214
"github.com/realvnc-labs/tacoscript/utils"
1315
)
1416

@@ -17,29 +19,20 @@ const (
1719
)
1820

1921
type Builder interface {
20-
Build(typeName, path string, params interface{}) (Task, error)
22+
Build(typeName, path string, params interface{}) (tasks.Task, error)
2123
}
2224

2325
type BuildRouter struct {
2426
Builders map[string]Builder
2527
}
2628

27-
type taskFieldParseFn func(t Task, path string, val interface{}) error
28-
29-
type taskField struct {
30-
parseFn taskFieldParseFn
31-
fieldName string
32-
}
33-
34-
type taskFieldsParserConfig map[string]taskField
35-
3629
func NewBuilderRouter(builders map[string]Builder) BuildRouter {
3730
return BuildRouter{
3831
Builders: builders,
3932
}
4033
}
4134

42-
func (br BuildRouter) Build(typeName, path string, params interface{}) (Task, error) {
35+
func (br BuildRouter) Build(typeName, path string, params interface{}) (tasks.Task, error) {
4336
builder, ok := br.Builders[typeName]
4437
if !ok {
4538
return nil, fmt.Errorf("no builders registered for task type '%s'", typeName)
@@ -49,27 +42,27 @@ func (br BuildRouter) Build(typeName, path string, params interface{}) (Task, er
4942
}
5043

5144
func Build(
52-
typeName, path string, inputFields interface{}, outputTask Task, taskFields taskFieldsParserConfig) (
45+
typeName, path string, inputFields interface{}, outputTask tasks.Task, taskFields parser.TaskFieldsParserConfig) (
5346
errs *utils.Errors) {
5447
logrus.Debugf("Parsing task %s, %s", typeName, path)
5548
errs = &utils.Errors{}
5649

57-
var mapper FieldNameMapper
58-
var tracker FieldStatusTracker
50+
var mapper tasks.FieldNameMapper
51+
var tracker tasks.FieldStatusTracker
5952

60-
taskWithTracker, hasTracker := outputTask.(TaskWithFieldTracker)
53+
taskWithTracker, hasTracker := outputTask.(tasks.TaskWithFieldTracker)
6154

6255
if hasTracker {
6356
// if TrackWithFieldTracker then the task is using the field name mapper and the status tracker
6457
// so we need to initialize those.
65-
combinedFieldTracker := newFieldCombinedTracker()
58+
combinedFieldTracker := tasks.NewFieldCombinedTracker()
6659
tracker = combinedFieldTracker
6760
mapper = combinedFieldTracker
6861
taskWithTracker.SetMapper(combinedFieldTracker)
6962
taskWithTracker.SetTracker(combinedFieldTracker)
7063
} else {
7164
// if just a regular task then we only need a local mapper for the reflection based value parsing
72-
mapper = newFieldNameMapper()
65+
mapper = tasks.NewFieldNameMapper()
7366
}
7467

7568
mapper.BuildFieldMap(outputTask)
@@ -86,11 +79,11 @@ func Build(
8679

8780
if fieldName != "" {
8881
if hasTracker {
89-
tracker.SetFieldStatus(fieldName, FieldStatus{})
82+
tracker.SetFieldStatus(fieldName, tasks.FieldStatus{})
9083

9184
// when unsetting a field then no need to parse value etc. just mark to clear and then
9285
// continue to the next field.
93-
if inputVal == UnsetKeyword && !sharedField(inputKey) && taskWithTracker.IsChangeField(fieldName) {
86+
if inputVal == UnsetKeyword && !tasks.SharedField(inputKey) && taskWithTracker.IsChangeField(fieldName) {
9487
err := tracker.SetClear(fieldName)
9588
if err != nil {
9689
errs.Add(errWithField(err, inputKey))
@@ -115,7 +108,7 @@ func Build(
115108
}
116109

117110
if hasTracker {
118-
if !sharedField(inputKey) && taskWithTracker.IsChangeField(fieldName) {
111+
if !tasks.SharedField(inputKey) && taskWithTracker.IsChangeField(fieldName) {
119112
err = tracker.SetHasNewValue(fieldName)
120113
if err != nil {
121114
errs.Add(errWithField(err, inputKey))
@@ -134,7 +127,7 @@ func Build(
134127
continue
135128
}
136129

137-
err := taskParam.parseFn(outputTask, path, inputVal)
130+
err := taskParam.ParseFn(outputTask, path, inputVal)
138131
if err != nil {
139132
errs.Add(errWithField(err, inputKey))
140133
continue

tasks/builder_test.go renamed to builder/builder_test.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
1-
package tasks
1+
package builder
22

33
import (
44
"errors"
55
"testing"
66

77
"github.com/stretchr/testify/assert"
8+
9+
"github.com/realvnc-labs/tacoscript/tasks"
10+
"github.com/realvnc-labs/tacoscript/tasks/cmdrun"
811
)
912

1013
type BuilderMock struct {
1114
TypeName string
1215
Path string
1316
Context interface{}
14-
TaskToReturn Task
17+
TaskToReturn tasks.Task
1518
ErrToReturn error
1619
}
1720

18-
func (bm *BuilderMock) Build(typeName, path string, ctx interface{}) (Task, error) {
21+
func (bm *BuilderMock) Build(typeName, path string, ctx interface{}) (tasks.Task, error) {
1922
bm.TypeName = typeName
2023
bm.Path = path
2124
bm.Context = ctx
@@ -25,12 +28,12 @@ func (bm *BuilderMock) Build(typeName, path string, ctx interface{}) (Task, erro
2528

2629
func TestBuildWithRouting(t *testing.T) {
2730
successBuilder := &BuilderMock{
28-
TaskToReturn: &CmdRunTask{TypeName: "successTask", Path: "someSuccessPath"},
31+
TaskToReturn: &cmdrun.CmdRunTask{TypeName: "successTask", Path: "someSuccessPath"},
2932
ErrToReturn: nil,
3033
}
3134

3235
failBuilder := &BuilderMock{
33-
TaskToReturn: &CmdRunTask{TypeName: "failedTask", Path: "someFailedPath"},
36+
TaskToReturn: &cmdrun.CmdRunTask{TypeName: "failedTask", Path: "someFailedPath"},
3437
ErrToReturn: errors.New("some error"),
3538
}
3639

builder/parser/parser.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package parser
2+
3+
import "github.com/realvnc-labs/tacoscript/tasks"
4+
5+
type TaskFieldParseFn func(t tasks.Task, path string, val interface{}) error
6+
7+
type TaskField struct {
8+
ParseFn TaskFieldParseFn
9+
FieldName string
10+
}
11+
12+
type TaskFieldsParserConfig map[string]TaskField

pkgmanager/darwinContext.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"fmt"
88
"strings"
99

10-
"github.com/realvnc-labs/tacoscript/tasks"
10+
"github.com/realvnc-labs/tacoscript/tasks/pkgtask"
1111
)
1212

1313
func BuildManagementCmdsProviders() ([]ManagementCmdsProvider, error) {
@@ -18,7 +18,7 @@ func BuildManagementCmdsProviders() ([]ManagementCmdsProvider, error) {
1818

1919
type OsPackageManagerCmdProvider struct{}
2020

21-
func (ecb OsPackageManagerCmdProvider) GetManagementCmds(t *tasks.PkgTask) (*ManagementCmds, error) {
21+
func (ecb OsPackageManagerCmdProvider) GetManagementCmds(t *pkgtask.PkgTask) (*ManagementCmds, error) {
2222
rawCmds := t.Named.GetNames()
2323
rawInstallCmds := make([]string, 0, len(rawCmds))
2424
if t.Version != "" {

pkgmanager/manager.go

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import (
66
"fmt"
77
"strings"
88

9+
"github.com/realvnc-labs/tacoscript/tasks/pkgtask"
910
"github.com/realvnc-labs/tacoscript/utils"
1011

1112
"github.com/realvnc-labs/tacoscript/conv"
1213
"github.com/realvnc-labs/tacoscript/exec"
13-
"github.com/realvnc-labs/tacoscript/tasks"
1414
"github.com/sirupsen/logrus"
1515
)
1616

@@ -25,15 +25,15 @@ type ManagementCmds struct {
2525
}
2626

2727
type ManagementCmdsProvider interface {
28-
GetManagementCmds(t *tasks.PkgTask) (*ManagementCmds, error)
28+
GetManagementCmds(t *pkgtask.PkgTask) (*ManagementCmds, error)
2929
}
3030

3131
type PackageTaskManager struct {
3232
Runner exec.Runner
3333
ManagementCmdsProviderBuildFunc func() ([]ManagementCmdsProvider, error)
3434
}
3535

36-
func (pm PackageTaskManager) ExecuteTask(ctx context.Context, t *tasks.PkgTask) (res *tasks.PackageManagerExecutionResult, err error) {
36+
func (pm PackageTaskManager) ExecuteTask(ctx context.Context, t *pkgtask.PkgTask) (res *pkgtask.PackageManagerExecutionResult, err error) {
3737
managementCmdProviders, err := pm.ManagementCmdsProviderBuildFunc()
3838
if err != nil {
3939
return nil, err
@@ -44,7 +44,7 @@ func (pm PackageTaskManager) ExecuteTask(ctx context.Context, t *tasks.PkgTask)
4444
return
4545
}
4646

47-
res = &tasks.PackageManagerExecutionResult{}
47+
res = &pkgtask.PackageManagerExecutionResult{}
4848

4949
var managementCmds *ManagementCmds
5050
foundSupportedPackageManager := false
@@ -57,7 +57,7 @@ func (pm PackageTaskManager) ExecuteTask(ctx context.Context, t *tasks.PkgTask)
5757

5858
logrus.Debugf("will execute version command %s to check if package manager is installed", managementCmds.VersionCmd)
5959

60-
versionResult := &tasks.PackageManagerExecutionResult{}
60+
versionResult := &pkgtask.PackageManagerExecutionResult{}
6161
err = pm.run(ctx, t, versionResult, managementCmds.VersionCmd)
6262
if err != nil {
6363
triedCommands = append(triedCommands, fmt.Sprintf("%s: %v", managementCmds.VersionCmd, err))
@@ -104,24 +104,24 @@ func (pm PackageTaskManager) ExecuteTask(ctx context.Context, t *tasks.PkgTask)
104104

105105
func (pm PackageTaskManager) executePackageMethod(
106106
ctx context.Context,
107-
t *tasks.PkgTask,
107+
t *pkgtask.PkgTask,
108108
managementCmds *ManagementCmds,
109-
res *tasks.PackageManagerExecutionResult,
109+
res *pkgtask.PackageManagerExecutionResult,
110110
) (err error) {
111111
switch t.ActionType {
112-
case tasks.ActionInstall:
112+
case pkgtask.ActionInstall:
113113
err = pm.installPackages(ctx, t, managementCmds, res)
114114
if err != nil {
115115
return err
116116
}
117117
res.Comment = fmt.Sprintf("The following packages are ensured to be installed: %s", pm.getAffectedPackagesStr(t))
118-
case tasks.ActionUninstall:
118+
case pkgtask.ActionUninstall:
119119
err = pm.uninstallPackages(ctx, t, managementCmds, res)
120120
if err != nil {
121121
return err
122122
}
123123
res.Comment = fmt.Sprintf("The following packages are ensured to be uninstalled: %s", pm.getAffectedPackagesStr(t))
124-
case tasks.ActionUpdate:
124+
case pkgtask.ActionUpdate:
125125
err = pm.updatePackages(ctx, t, managementCmds, res)
126126
if err != nil {
127127
return err
@@ -137,7 +137,7 @@ func (pm PackageTaskManager) executePackageMethod(
137137
func (pm PackageTaskManager) getPackageDiff(
138138
ctx context.Context,
139139
managementCmds *ManagementCmds,
140-
t *tasks.PkgTask,
140+
t *pkgtask.PkgTask,
141141
packagesListBefore []string,
142142
) map[string]string {
143143
res := map[string]string{}
@@ -163,7 +163,7 @@ func (pm PackageTaskManager) getPackageDiff(
163163
return res
164164
}
165165

166-
func (pm PackageTaskManager) getAffectedPackagesStr(t *tasks.PkgTask) string {
166+
func (pm PackageTaskManager) getAffectedPackagesStr(t *pkgtask.PkgTask) string {
167167
packages := make([]string, 0, len(t.Named.Names)+1)
168168
if t.Named.Name != "" {
169169
packages = append(packages, t.Named.Name)
@@ -180,9 +180,9 @@ func (pm PackageTaskManager) getAffectedPackagesStr(t *tasks.PkgTask) string {
180180

181181
func (pm PackageTaskManager) installPackages(
182182
ctx context.Context,
183-
t *tasks.PkgTask,
183+
t *pkgtask.PkgTask,
184184
mngtCmds *ManagementCmds,
185-
res *tasks.PackageManagerExecutionResult,
185+
res *pkgtask.PackageManagerExecutionResult,
186186
) (err error) {
187187
logrus.Debugf("will install packages by executing %s", conv.ConvertSourceToJSONStrIfPossible(mngtCmds.InstallCmds))
188188

@@ -193,9 +193,9 @@ func (pm PackageTaskManager) installPackages(
193193

194194
func (pm PackageTaskManager) uninstallPackages(
195195
ctx context.Context,
196-
t *tasks.PkgTask,
196+
t *pkgtask.PkgTask,
197197
mngtCmds *ManagementCmds,
198-
res *tasks.PackageManagerExecutionResult,
198+
res *pkgtask.PackageManagerExecutionResult,
199199
) (err error) {
200200
logrus.Debugf("will uninstall packages by executing %s", conv.ConvertSourceToJSONStrIfPossible(mngtCmds.UninstallCmds))
201201

@@ -206,9 +206,9 @@ func (pm PackageTaskManager) uninstallPackages(
206206

207207
func (pm PackageTaskManager) updatePackages(
208208
ctx context.Context,
209-
t *tasks.PkgTask,
209+
t *pkgtask.PkgTask,
210210
mngtCmds *ManagementCmds,
211-
res *tasks.PackageManagerExecutionResult,
211+
res *pkgtask.PackageManagerExecutionResult,
212212
) (err error) {
213213
logrus.Debugf("will upgrade packages by executing %s", conv.ConvertSourceToJSONStrIfPossible(mngtCmds.UpgradeCmds))
214214

@@ -219,14 +219,14 @@ func (pm PackageTaskManager) updatePackages(
219219

220220
func (pm PackageTaskManager) updatePkgManagerIfNeeded(
221221
ctx context.Context,
222-
t *tasks.PkgTask,
222+
t *pkgtask.PkgTask,
223223
mngtCmds *ManagementCmds,
224224
) (err error) {
225225
if !t.ShouldRefresh {
226226
return
227227
}
228228

229-
res := &tasks.PackageManagerExecutionResult{}
229+
res := &pkgtask.PackageManagerExecutionResult{}
230230
logrus.Debugf("will update package manager: %s", mngtCmds.UpgradeCmd)
231231
err = pm.run(ctx, t, res, mngtCmds.UpgradeCmd)
232232
if err != nil {
@@ -239,12 +239,12 @@ func (pm PackageTaskManager) updatePkgManagerIfNeeded(
239239

240240
func (pm PackageTaskManager) getPackagesList(
241241
ctx context.Context,
242-
t *tasks.PkgTask,
242+
t *pkgtask.PkgTask,
243243
mngtCmds *ManagementCmds,
244244
) (packagesList []string, err error) {
245245
logrus.Debugf("will fetch packages list: %s", mngtCmds.ListCmd)
246246

247-
res := &tasks.PackageManagerExecutionResult{}
247+
res := &pkgtask.PackageManagerExecutionResult{}
248248

249249
err = pm.run(ctx, t, res, mngtCmds.ListCmd)
250250
if err != nil {
@@ -263,8 +263,8 @@ func (pm PackageTaskManager) getPackagesList(
263263

264264
func (pm PackageTaskManager) run(
265265
ctx context.Context,
266-
t *tasks.PkgTask,
267-
res *tasks.PackageManagerExecutionResult,
266+
t *pkgtask.PkgTask,
267+
res *pkgtask.PackageManagerExecutionResult,
268268
rawCmds ...string,
269269
) (err error) {
270270
var stdoutBuf, stderrBuf bytes.Buffer

0 commit comments

Comments
 (0)