Skip to content

Commit dbad2d7

Browse files
committed
feat(builder): add DRYCC_BUILDER specify builder
1 parent b890847 commit dbad2d7

4 files changed

Lines changed: 64 additions & 26 deletions

File tree

pkg/gitreceive/build.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,8 @@ func build(
142142
return fmt.Errorf("running %s (%s)", strings.Join(tarCmd.Args, " "), err)
143143
}
144144

145-
var bType buildType
146-
if buildPackURL != "" {
147-
bType = buildTypeProcfile
148-
} else {
149-
bType = getBuildTypeForDir(tmpDir)
150-
}
151-
152-
usingDockerfile := bType == buildTypeDockerfile
145+
bType := getBuildType(tmpDir, appConf)
146+
usingDockerfile := bType == buildTypeDockerbuilder
153147

154148
appTgzdata, err := ioutil.ReadFile(absAppTgz)
155149
if err != nil {
@@ -370,7 +364,7 @@ func getProcFile(getter storage.ObjectGetter, dirName, procfileKey string, bType
370364
}
371365
return procType, nil
372366
}
373-
if bType != buildTypeProcfile {
367+
if bType != buildTypeSlugbuilder {
374368
return procType, nil
375369
}
376370
log.Debug("Procfile not present. Getting it from the buildpack")

pkg/gitreceive/build_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func TestGetProcFileFromRepoSuccess(t *testing.T) {
122122
}
123123
}()
124124
getter := &storage.FakeObjectGetter{}
125-
procType, err := getProcFile(getter, tmpDir, objKey, buildTypeProcfile)
125+
procType, err := getProcFile(getter, tmpDir, objKey, buildTypeSlugbuilder)
126126
actualData := api.ProcessType{}
127127
yaml.Unmarshal(data, &actualData)
128128
assert.NoErr(t, err)
@@ -144,7 +144,7 @@ func TestGetProcFileFromRepoFailure(t *testing.T) {
144144
}
145145
}()
146146
getter := &storage.FakeObjectGetter{}
147-
_, err = getProcFile(getter, tmpDir, objKey, buildTypeProcfile)
147+
_, err = getProcFile(getter, tmpDir, objKey, buildTypeSlugbuilder)
148148

149149
assert.True(t, err != nil, "no error received when there should have been")
150150
}
@@ -157,7 +157,7 @@ func TestGetProcFileFromServerSuccess(t *testing.T) {
157157
},
158158
}
159159

160-
procType, err := getProcFile(getter, "", objKey, buildTypeProcfile)
160+
procType, err := getProcFile(getter, "", objKey, buildTypeSlugbuilder)
161161
actualData := api.ProcessType{}
162162
yaml.Unmarshal(data, &actualData)
163163
assert.NoErr(t, err)
@@ -172,7 +172,7 @@ func TestGetProcFileFromServerFailure(t *testing.T) {
172172
},
173173
}
174174

175-
_, err := getProcFile(getter, "", objKey, buildTypeProcfile)
175+
_, err := getProcFile(getter, "", objKey, buildTypeSlugbuilder)
176176
assert.Err(t, err, fmt.Errorf("error in reading %s (%s)", objKey, expectedErr))
177177
assert.True(t, err != nil, "no error received when there should have been")
178178
}

pkg/gitreceive/build_type.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package gitreceive
22

33
import (
44
"fmt"
5+
"github.com/drycc/controller-sdk-go/api"
56
"os"
67
)
78

@@ -12,14 +13,32 @@ func (b buildType) String() string {
1213
}
1314

1415
const (
15-
buildTypeProcfile buildType = "procfile"
16-
buildTypeDockerfile buildType = "dockerfile"
16+
buildTypeSlugbuilder buildType = "slugbuilder"
17+
buildTypeDockerbuilder buildType = "dockerbuilder"
1718
)
1819

19-
func getBuildTypeForDir(dirName string) buildType {
20-
_, err := os.Stat(fmt.Sprintf("%s/Dockerfile", dirName))
21-
if err == nil {
22-
return buildTypeDockerfile
20+
func getBuildType(dirName string, config api.Config) buildType {
21+
22+
hasDockerfile := false
23+
if _, err := os.Stat(fmt.Sprintf("%s/Dockerfile", dirName)); err == nil {
24+
hasDockerfile = true
25+
}
26+
27+
hasProcfile := false
28+
if _, err := os.Stat(fmt.Sprintf("%s/Procfile", dirName)); err == nil {
29+
hasProcfile = true
30+
}
31+
if hasDockerfile && hasProcfile {
32+
if bTypeInterface, ok := config.Values["DRYCC_BUILDER"]; ok {
33+
if strType, ok := bTypeInterface.(string); ok {
34+
bType := buildType(strType)
35+
if bType == buildTypeSlugbuilder || bType == buildTypeDockerbuilder {
36+
return bType
37+
}
38+
}
39+
}
40+
} else if hasProcfile {
41+
return buildTypeSlugbuilder
2342
}
24-
return buildTypeProcfile
43+
return buildTypeDockerbuilder
2544
}

pkg/gitreceive/build_type_test.go

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,52 @@
11
package gitreceive
22

33
import (
4+
"github.com/drycc/controller-sdk-go/api"
45
"os"
56
"testing"
67
)
78

8-
func TestGetBuildTypeForDir(t *testing.T) {
9+
func TestGetBuildType(t *testing.T) {
910
tmpDir := os.TempDir()
10-
bType := getBuildTypeForDir(tmpDir)
11-
if bType != buildTypeProcfile {
11+
config := api.Config{}
12+
bType := getBuildType(tmpDir, config)
13+
if bType != buildTypeDockerbuilder {
1214
t.Fatalf("expected procfile build, got %s", bType)
1315
}
1416
if _, err := os.Create(tmpDir + "/Dockerfile"); err != nil {
1517
t.Fatalf("error creating %s/Dockerfile (%s)", tmpDir, err)
1618
}
19+
20+
bType = getBuildType(tmpDir, config)
21+
if bType != buildTypeDockerbuilder {
22+
t.Fatalf("expected dockerfile build, got %s", bType)
23+
}
24+
25+
if _, err := os.Create(tmpDir + "/Procfile"); err != nil {
26+
t.Fatalf("error creating %s/Procfile (%s)", tmpDir, err)
27+
}
28+
1729
defer func() {
1830
if err := os.Remove(tmpDir + "/Dockerfile"); err != nil {
1931
t.Fatalf("failed to remove Dockerfile from %s (%s)", tmpDir, err)
2032
}
33+
if err := os.Remove(tmpDir + "/Procfile"); err != nil {
34+
t.Fatalf("failed to remove Procfile from %s (%s)", tmpDir, err)
35+
}
2136
}()
37+
config.Values = map[string]interface{}{
38+
"DRYCC_BUILDER": "slugbuilder",
39+
}
40+
bType = getBuildType(tmpDir, config)
41+
if bType != buildTypeSlugbuilder {
42+
t.Fatalf("expected procfile build, got %s", bType)
43+
}
2244

23-
bType = getBuildTypeForDir(tmpDir)
24-
if bType != buildTypeDockerfile {
25-
t.Fatalf("expected dockerfile build, got %s", bType)
45+
config.Values = map[string]interface{}{
46+
"DRYCC_BUILDER": "dockerbuilder",
47+
}
48+
bType = getBuildType(tmpDir, config)
49+
if bType != buildTypeDockerbuilder {
50+
t.Fatalf("expected Dockerfile build, got %s", bType)
2651
}
2752
}

0 commit comments

Comments
 (0)