Skip to content

Commit 3187eb7

Browse files
committed
Apply default values to profiles
Fixes #493 Signed-off-by: David Gageot <[email protected]>
1 parent 3c521be commit 3187eb7

File tree

2 files changed

+105
-48
lines changed

2 files changed

+105
-48
lines changed

pkg/skaffold/config/profile_test.go

+65-16
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ import (
2525

2626
func TestApplyProfiles(t *testing.T) {
2727
tests := []struct {
28-
description string
29-
config SkaffoldConfig
30-
profile string
31-
expectedConfig SkaffoldConfig
32-
shouldErr bool
28+
description string
29+
config SkaffoldConfig
30+
profile string
31+
expected SkaffoldConfig
32+
shouldErr bool
3333
}{
3434
{
3535
description: "unknown profile",
@@ -61,14 +61,25 @@ func TestApplyProfiles(t *testing.T) {
6161
},
6262
},
6363
},
64-
expectedConfig: SkaffoldConfig{
64+
expected: SkaffoldConfig{
6565
Build: v1alpha2.BuildConfig{
6666
Artifacts: []*v1alpha2.Artifact{
67-
{ImageName: "image"},
67+
{
68+
ImageName: "image",
69+
Workspace: ".",
70+
ArtifactType: v1alpha2.ArtifactType{
71+
DockerArtifact: &v1alpha2.DockerArtifact{
72+
DockerfilePath: "Dockerfile",
73+
},
74+
},
75+
},
6876
},
6977
BuildType: v1alpha2.BuildType{
7078
GoogleCloudBuild: &v1alpha2.GoogleCloudBuild{},
7179
},
80+
TagPolicy: v1alpha2.TagPolicy{
81+
GitTagger: &v1alpha2.GitTagger{},
82+
},
7283
},
7384
Deploy: v1alpha2.DeployConfig{},
7485
},
@@ -93,12 +104,23 @@ func TestApplyProfiles(t *testing.T) {
93104
},
94105
},
95106
},
96-
expectedConfig: SkaffoldConfig{
107+
expected: SkaffoldConfig{
97108
Build: v1alpha2.BuildConfig{
98109
Artifacts: []*v1alpha2.Artifact{
99-
{ImageName: "image"},
110+
{
111+
ImageName: "image",
112+
Workspace: ".",
113+
ArtifactType: v1alpha2.ArtifactType{
114+
DockerArtifact: &v1alpha2.DockerArtifact{
115+
DockerfilePath: "Dockerfile",
116+
},
117+
},
118+
},
100119
},
101120
TagPolicy: v1alpha2.TagPolicy{ShaTagger: &v1alpha2.ShaTagger{}},
121+
BuildType: v1alpha2.BuildType{
122+
LocalBuild: &v1alpha2.LocalBuild{},
123+
},
102124
},
103125
Deploy: v1alpha2.DeployConfig{},
104126
},
@@ -126,13 +148,32 @@ func TestApplyProfiles(t *testing.T) {
126148
},
127149
},
128150
},
129-
expectedConfig: SkaffoldConfig{
151+
expected: SkaffoldConfig{
130152
Build: v1alpha2.BuildConfig{
131153
Artifacts: []*v1alpha2.Artifact{
132-
{ImageName: "image"},
133-
{ImageName: "imageProd"},
154+
{
155+
ImageName: "image",
156+
Workspace: ".",
157+
ArtifactType: v1alpha2.ArtifactType{
158+
DockerArtifact: &v1alpha2.DockerArtifact{
159+
DockerfilePath: "Dockerfile",
160+
},
161+
},
162+
},
163+
{
164+
ImageName: "imageProd",
165+
Workspace: ".",
166+
ArtifactType: v1alpha2.ArtifactType{
167+
DockerArtifact: &v1alpha2.DockerArtifact{
168+
DockerfilePath: "Dockerfile",
169+
},
170+
},
171+
},
134172
},
135173
TagPolicy: v1alpha2.TagPolicy{GitTagger: &v1alpha2.GitTagger{}},
174+
BuildType: v1alpha2.BuildType{
175+
LocalBuild: &v1alpha2.LocalBuild{},
176+
},
136177
},
137178
Deploy: v1alpha2.DeployConfig{},
138179
},
@@ -158,21 +199,29 @@ func TestApplyProfiles(t *testing.T) {
158199
},
159200
},
160201
},
161-
expectedConfig: SkaffoldConfig{
162-
Build: v1alpha2.BuildConfig{},
202+
expected: SkaffoldConfig{
203+
Build: v1alpha2.BuildConfig{
204+
TagPolicy: v1alpha2.TagPolicy{
205+
GitTagger: &v1alpha2.GitTagger{},
206+
},
207+
BuildType: v1alpha2.BuildType{
208+
LocalBuild: &v1alpha2.LocalBuild{},
209+
},
210+
},
163211
Deploy: v1alpha2.DeployConfig{
164212
DeployType: v1alpha2.DeployType{
165213
HelmDeploy: &v1alpha2.HelmDeploy{},
166214
},
167215
},
168216
},
169-
}}
217+
},
218+
}
170219

171220
for _, test := range tests {
172221
t.Run(test.description, func(t *testing.T) {
173222
err := test.config.ApplyProfiles([]string{test.profile})
174223

175-
testutil.CheckErrorAndDeepEqual(t, test.shouldErr, err, test.expectedConfig, test.config)
224+
testutil.CheckErrorAndDeepEqual(t, test.shouldErr, err, test.expected, test.config)
176225
})
177226
}
178227
}

pkg/skaffold/schema/v1alpha2/config.go

+40-32
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ type SkaffoldConfig struct {
3737
Profiles []Profile `yaml:"profiles,omitempty"`
3838
}
3939

40-
func (config *SkaffoldConfig) GetVersion() string {
41-
return config.APIVersion
40+
func (c *SkaffoldConfig) GetVersion() string {
41+
return c.APIVersion
4242
}
4343

4444
// BuildConfig contains all the configuration for the build steps
@@ -156,17 +156,38 @@ type BazelArtifact struct {
156156
BuildTarget string `yaml:"target"`
157157
}
158158

159-
func defaultToLocalBuild(config *SkaffoldConfig) {
160-
if config.Build.BuildType != (BuildType{}) {
159+
// Parse reads a SkaffoldConfig from yaml.
160+
func (c *SkaffoldConfig) Parse(contents []byte, useDefaults bool) error {
161+
if err := yaml.Unmarshal(contents, c); err != nil {
162+
return err
163+
}
164+
165+
if useDefaults {
166+
c.setDefaultValues()
167+
}
168+
169+
return nil
170+
}
171+
172+
func (c *SkaffoldConfig) setDefaultValues() {
173+
c.defaultToLocalBuild()
174+
c.defaultToDockerArtifacts()
175+
c.setDefaultTagger()
176+
c.setDefaultDockerfiles()
177+
c.setDefaultWorkspaces()
178+
}
179+
180+
func (c *SkaffoldConfig) defaultToLocalBuild() {
181+
if c.Build.BuildType != (BuildType{}) {
161182
return
162183
}
163184

164185
logrus.Debugf("Defaulting build type to local build")
165-
config.Build.BuildType.LocalBuild = &LocalBuild{}
186+
c.Build.BuildType.LocalBuild = &LocalBuild{}
166187
}
167188

168-
func defaultToDockerArtifacts(config *SkaffoldConfig) {
169-
for _, artifact := range config.Build.Artifacts {
189+
func (c *SkaffoldConfig) defaultToDockerArtifacts() {
190+
for _, artifact := range c.Build.Artifacts {
170191
if artifact.ArtifactType != (ArtifactType{}) {
171192
continue
172193
}
@@ -177,24 +198,24 @@ func defaultToDockerArtifacts(config *SkaffoldConfig) {
177198
}
178199
}
179200

180-
func setDefaultTagger(cfg *SkaffoldConfig) {
181-
if cfg.Build.TagPolicy != (TagPolicy{}) {
201+
func (c *SkaffoldConfig) setDefaultTagger() {
202+
if c.Build.TagPolicy != (TagPolicy{}) {
182203
return
183204
}
184205

185-
cfg.Build.TagPolicy = TagPolicy{GitTagger: &GitTagger{}}
206+
c.Build.TagPolicy = TagPolicy{GitTagger: &GitTagger{}}
186207
}
187208

188-
func setDefaultDockerfiles(config *SkaffoldConfig) {
189-
for _, artifact := range config.Build.Artifacts {
209+
func (c *SkaffoldConfig) setDefaultDockerfiles() {
210+
for _, artifact := range c.Build.Artifacts {
190211
if artifact.DockerArtifact != nil && artifact.DockerArtifact.DockerfilePath == "" {
191212
artifact.DockerArtifact.DockerfilePath = constants.DefaultDockerfilePath
192213
}
193214
}
194215
}
195216

196-
func setDefaultWorkspaces(config *SkaffoldConfig) {
197-
for _, artifact := range config.Build.Artifacts {
217+
func (c *SkaffoldConfig) setDefaultWorkspaces() {
218+
for _, artifact := range c.Build.Artifacts {
198219
if artifact.Workspace == "" {
199220
artifact.Workspace = "."
200221
}
@@ -203,23 +224,24 @@ func setDefaultWorkspaces(config *SkaffoldConfig) {
203224

204225
// ApplyProfiles returns configuration modified by the application
205226
// of a list of profiles.
206-
func (config *SkaffoldConfig) ApplyProfiles(profiles []string) error {
227+
func (c *SkaffoldConfig) ApplyProfiles(profiles []string) error {
207228
var err error
208229

209-
byName := profilesByName(config.Profiles)
230+
byName := profilesByName(c.Profiles)
210231
for _, name := range profiles {
211232
profile, present := byName[name]
212233
if !present {
213234
return fmt.Errorf("couldn't find profile %s", name)
214235
}
215236

216-
err = applyProfile(config, profile)
237+
err = applyProfile(c, profile)
217238
if err != nil {
218239
return errors.Wrapf(err, "applying profile %s", name)
219240
}
220241
}
221242

222-
config.Profiles = nil
243+
c.setDefaultValues()
244+
c.Profiles = nil
223245

224246
return nil
225247
}
@@ -242,17 +264,3 @@ func profilesByName(profiles []Profile) map[string]Profile {
242264
}
243265
return byName
244266
}
245-
246-
func (config *SkaffoldConfig) Parse(contents []byte, useDefaults bool) error {
247-
if err := yaml.Unmarshal(contents, config); err != nil {
248-
return err
249-
}
250-
if useDefaults {
251-
defaultToLocalBuild(config)
252-
defaultToDockerArtifacts(config)
253-
setDefaultTagger(config)
254-
setDefaultDockerfiles(config)
255-
setDefaultWorkspaces(config)
256-
}
257-
return nil
258-
}

0 commit comments

Comments
 (0)