Skip to content
This repository was archived by the owner on Mar 24, 2023. It is now read-only.

Commit 8068d6c

Browse files
authored
Merge pull request #104 from dexhorthy/dex/ship-dig
Refactor for better DI
2 parents 41c54dc + 6bca9de commit 8068d6c

Some content is hidden

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

63 files changed

+6647
-489
lines changed

Gopkg.lock

+7-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Makefile

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ build-deps:
88
go get -u github.com/golang/lint/golint
99
go get golang.org/x/tools/cmd/goimports
1010

11-
-dep-deps:
11+
dep-deps:
1212
go get -u github.com/golang/dep/cmd/dep
1313

1414
docker:
@@ -62,8 +62,9 @@ _mockgen:
6262

6363
mockgen: _mockgen fmt
6464

65-
dep:
66-
dep ensure
65+
deps:
66+
dep ensure -v; dep prune -v
67+
6768

6869
fmt:
6970
goimports -w pkg

pkg/cli/root.go

+3-12
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import (
44
"fmt"
55
"os"
66

7-
"context"
8-
97
"strings"
108

11-
"github.com/pkg/errors"
9+
"context"
10+
1211
"github.com/replicatedcom/ship/pkg/cli/devtool_releaser"
1312
"github.com/replicatedcom/ship/pkg/e2e"
1413
"github.com/replicatedcom/ship/pkg/ship"
@@ -33,15 +32,7 @@ application specs to be used in on-prem installations.
3332
SilenceUsage: true,
3433
SilenceErrors: true,
3534
RunE: func(cmd *cobra.Command, args []string) error {
36-
rc, err := ship.FromViper(viper.GetViper())
37-
if err != nil {
38-
return errors.Wrap(err, "initialize")
39-
}
40-
err = rc.Execute(context.Background())
41-
if err != nil {
42-
rc.ExitWithError(err)
43-
}
44-
return nil // let ExitWithError handle it ^
35+
return ship.RunE(context.Background())
4536
},
4637
}
4738
cobra.OnInitialize(initConfig)

pkg/e2e/case.go

+12-15
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@ package e2e
33
import (
44
"testing"
55

6-
"context"
76
"encoding/json"
87
"io/ioutil"
98
"net/url"
109

1110
"time"
1211

12+
"context"
13+
1314
"github.com/replicatedcom/ship/pkg/api"
1415
"github.com/replicatedcom/ship/pkg/ship"
15-
"github.com/spf13/viper"
1616
"github.com/stretchr/testify/require"
1717
)
1818

1919
type CaseRunner struct {
2020
t *testing.T
21-
assert *require.Assertions
21+
req *require.Assertions
2222
testcase testcase
2323
}
2424

@@ -32,46 +32,43 @@ type testcase struct {
3232
func (r *CaseRunner) promoteRelease() {
3333

3434
gqlServer, err := url.Parse(r.testcase.config.GQL)
35-
r.assert.NoError(err)
35+
r.req.NoError(err)
3636
client := &GraphQLClient{
3737
GQLServer: gqlServer,
3838
Token: r.testcase.config.Token,
3939
}
4040

4141
spec, err := json.Marshal(r.testcase.Spec)
42-
r.assert.NoError(err)
42+
r.req.NoError(err)
4343

4444
_, err = client.PromoteRelease(
4545
string(spec),
4646
r.testcase.config.ChannelID,
4747
r.testcase.config.Semver,
4848
`Integration test run on `+time.Now().String(),
4949
)
50-
r.assert.NoError(err)
50+
r.req.NoError(err)
5151

5252
}
5353

5454
func (r *CaseRunner) Run() {
55-
5655
r.promoteRelease()
5756
r.runShipForCustomer()
5857
r.validateFiles()
59-
6058
}
59+
6160
func (r *CaseRunner) runShipForCustomer() {
62-
// todo do each testcase in its own tmp directory,
63-
// also maybe fork or docker run or something
64-
s, err := ship.FromViper(viper.GetViper())
65-
r.assert.NoError(err)
61+
s, err := ship.Get()
62+
r.req.NoError(err)
6663

6764
err = s.Execute(context.Background())
68-
r.assert.NoError(err)
65+
r.req.NoError(err)
6966
}
7067
func (r *CaseRunner) validateFiles() {
7168
for path, expected := range r.testcase.Expect {
7269
actual, err := ioutil.ReadFile(path)
73-
r.assert.NoError(err)
74-
r.assert.Equal(expected, string(actual))
70+
r.req.NoError(err)
71+
r.req.Equal(expected, string(actual))
7572
}
7673

7774
}

pkg/e2e/suite.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func (r *Runner) TestCase(test testcase) func(t *testing.T) {
4747
return func(t *testing.T) {
4848
(&CaseRunner{
4949
t: t,
50-
assert: require.New(t),
50+
req: require.New(t),
5151
testcase: test,
5252
}).Run()
5353
}

pkg/lifecycle/message/api.go

+2
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ import (
1313
"github.com/replicatedcom/ship/pkg/lifecycle/render/config"
1414
"github.com/replicatedcom/ship/pkg/templates"
1515
"github.com/spf13/viper"
16+
"go.uber.org/dig"
1617
)
1718

1819
type DaemonMessenger struct {
20+
dig.In
1921
Logger log.Logger
2022
UI cli.Ui
2123
Viper *viper.Viper

pkg/lifecycle/message/cli.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@ import (
1212
"github.com/replicatedcom/ship/pkg/lifecycle/render/config"
1313
"github.com/replicatedcom/ship/pkg/templates"
1414
"github.com/spf13/viper"
15+
"go.uber.org/dig"
1516
)
1617

1718
var _ Messenger = &CLIMessenger{}
1819

1920
type CLIMessenger struct {
21+
dig.In
22+
2023
Logger log.Logger
2124
UI cli.Ui
2225
Viper *viper.Viper
@@ -50,7 +53,7 @@ func (e *CLIMessenger) Execute(ctx context.Context, release *api.Release, step *
5053

5154
func (e *CLIMessenger) getBuilder(release *api.Release) templates.Builder {
5255
builder := e.BuilderBuilder.NewBuilder(
53-
templates.NewStaticContext(),
56+
e.BuilderBuilder.NewStaticContext(),
5457
builderContext{
5558
logger: e.Logger,
5659
viper: e.Viper,

pkg/lifecycle/message/messenger.go

+7-15
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import (
55

66
"github.com/replicatedcom/ship/pkg/api"
77
"github.com/replicatedcom/ship/pkg/lifecycle/render/config"
8-
"github.com/replicatedcom/ship/pkg/logger"
98
"github.com/replicatedcom/ship/pkg/templates"
10-
"github.com/replicatedcom/ship/pkg/ui"
119
"github.com/spf13/viper"
1210
)
1311

@@ -16,22 +14,16 @@ type Messenger interface {
1614
WithDaemon(d config.Daemon) Messenger
1715
}
1816

19-
func FromViper(v *viper.Viper) Messenger {
17+
func NewMessenger(
18+
v *viper.Viper,
19+
cli CLIMessenger,
20+
daemon DaemonMessenger,
21+
) Messenger {
2022
if v.GetBool("headless") {
21-
return &CLIMessenger{
22-
Logger: logger.FromViper(v),
23-
UI: ui.FromViper(v),
24-
Viper: v,
25-
BuilderBuilder: templates.BuilderBuilderFromViper(v),
26-
}
23+
return &cli
2724
}
2825

29-
return &DaemonMessenger{
30-
Logger: logger.FromViper(v),
31-
UI: ui.FromViper(v),
32-
Viper: v,
33-
BuilderBuilder: templates.BuilderBuilderFromViper(v),
34-
}
26+
return &daemon
3527
}
3628

3729
func (m *DaemonMessenger) WithDaemon(d config.Daemon) Messenger {

pkg/lifecycle/render/config/daemon.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ type ShipDaemon struct {
4545
Fs afero.Afero
4646
Viper *viper.Viper
4747
UI cli.Ui
48-
StateManager *state.StateManager
48+
StateManager *state.Manager
4949
ConfigRenderer *APIConfigRenderer
5050

5151
sync.Mutex

pkg/lifecycle/render/config/headless_daemon.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
)
1515

1616
type HeadlessDaemon struct {
17-
StateManager *state.StateManager
17+
StateManager *state.Manager
1818
Logger log.Logger
1919
UI cli.Ui
2020
ConfigRenderer *APIConfigRenderer

pkg/lifecycle/render/config/headless_daemon_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ func TestHeadlessDaemon(t *testing.T) {
466466
Viper: v,
467467
}
468468

469-
manager := &state.StateManager{
469+
manager := &state.Manager{
470470
Logger: testLogger,
471471
FS: fakeFS,
472472
}

pkg/lifecycle/render/config/resolver.go

+49-19
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ package config
33
import (
44
"context"
55

6+
"github.com/go-kit/kit/log"
7+
"github.com/mitchellh/cli"
68
"github.com/replicatedcom/ship/pkg/api"
7-
"github.com/replicatedcom/ship/pkg/fs"
89
"github.com/replicatedcom/ship/pkg/lifecycle/render/state"
9-
"github.com/replicatedcom/ship/pkg/logger"
1010
"github.com/replicatedcom/ship/pkg/templates"
1111
"github.com/replicatedcom/ship/pkg/ui"
12+
"github.com/spf13/afero"
1213
"github.com/spf13/viper"
1314
)
1415

@@ -18,9 +19,9 @@ type Resolver interface {
1819
WithDaemon(d Daemon) Resolver
1920
}
2021

21-
func ResolverFromViper(v *viper.Viper) Resolver {
22+
func NewResolver(logger log.Logger) Resolver {
2223
return &DaemonResolver{
23-
Logger: logger.FromViper(v),
24+
Logger: logger,
2425
}
2526

2627
}
@@ -29,31 +30,60 @@ func (r *DaemonResolver) WithDaemon(d Daemon) Resolver {
2930
return r
3031
}
3132

32-
func DaemonFromViper(v *viper.Viper) Daemon {
33+
func NewDaemon(
34+
v *viper.Viper,
35+
headless *HeadlessDaemon,
36+
headed *ShipDaemon,
37+
) Daemon {
38+
if v.GetBool("headless") {
39+
return headless
40+
}
41+
return headed
42+
}
3343

34-
renderer := &APIConfigRenderer{
35-
Logger: logger.FromViper(v),
44+
func NewRenderer(
45+
logger log.Logger,
46+
v *viper.Viper,
47+
builderBuilder *templates.BuilderBuilder,
48+
) *APIConfigRenderer {
49+
return &APIConfigRenderer{
50+
Logger: logger,
3651
Viper: v,
37-
BuilderBuilder: templates.BuilderBuilderFromViper(v),
52+
BuilderBuilder: builderBuilder,
3853
}
54+
}
3955

40-
if v.GetBool("headless") {
41-
return &HeadlessDaemon{
42-
StateManager: state.ManagerFromViper(v),
43-
Logger: logger.FromViper(v),
44-
UI: ui.FromViper(v),
45-
ConfigRenderer: renderer,
46-
}
56+
func NewHeadlessDaemon(
57+
v *viper.Viper,
58+
logger log.Logger,
59+
renderer *APIConfigRenderer,
60+
stateManager *state.Manager,
61+
) *HeadlessDaemon {
62+
return &HeadlessDaemon{
63+
StateManager: stateManager,
64+
Logger: logger,
65+
UI: ui.FromViper(v),
66+
ConfigRenderer: renderer,
4767
}
68+
}
4869

70+
func NewHeadedDaemon(
71+
v *viper.Viper,
72+
renderer *APIConfigRenderer,
73+
stateManager *state.Manager,
74+
logger log.Logger,
75+
ui cli.Ui,
76+
fs afero.Afero,
77+
) *ShipDaemon {
4978
return &ShipDaemon{
50-
Logger: logger.FromViper(v),
51-
Fs: fs.FromViper(v),
52-
UI: ui.FromViper(v),
53-
StateManager: state.ManagerFromViper(v),
79+
Logger: logger,
80+
Fs: fs,
81+
UI: ui,
82+
StateManager: stateManager,
5483
Viper: v,
5584
ConfigSaved: make(chan interface{}),
5685
MessageConfirmed: make(chan string, 1),
5786
ConfigRenderer: renderer,
5887
}
88+
5989
}

pkg/lifecycle/render/docker/image.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import (
1111
"github.com/go-kit/kit/log"
1212
"github.com/go-kit/kit/log/level"
1313
"github.com/replicatedcom/ship/pkg/api"
14-
"github.com/replicatedcom/ship/pkg/logger"
15-
"github.com/spf13/viper"
1614
)
1715

1816
type PullURLResolver interface {
@@ -25,9 +23,9 @@ type URLResolver struct {
2523
Logger log.Logger
2624
}
2725

28-
func URLResolverFromViper(v *viper.Viper) PullURLResolver {
26+
func URLResolverFromViper(logger log.Logger) PullURLResolver {
2927
return &URLResolver{
30-
Logger: logger.FromViper(v),
28+
Logger: logger,
3129
}
3230
}
3331

0 commit comments

Comments
 (0)