Skip to content

Commit aba2b78

Browse files
authored
Merge pull request #986 from dgageot/projectid
Extract code from GCB
2 parents 3f96779 + bfe1480 commit aba2b78

File tree

3 files changed

+27
-41
lines changed

3 files changed

+27
-41
lines changed

pkg/skaffold/build/gcb/cloud_build.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/color"
3030
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/constants"
3131
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/docker"
32+
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/gcp"
3233
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/v1alpha3"
3334
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
3435
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/version"
@@ -63,9 +64,14 @@ func (b *Builder) buildArtifact(ctx context.Context, out io.Writer, tagger tag.T
6364
}
6465
defer c.Close()
6566

66-
projectID, err := b.guessProjectID(artifact)
67-
if err != nil {
68-
return "", errors.Wrap(err, "getting projectID")
67+
projectID := b.ProjectID
68+
if projectID == "" {
69+
guessedProjectID, err := gcp.ExtractProjectID(artifact.ImageName)
70+
if err != nil {
71+
return "", errors.Wrap(err, "extracting projectID from image name")
72+
}
73+
74+
projectID = guessedProjectID
6975
}
7076

7177
cbBucket := fmt.Sprintf("%s%s", projectID, constants.GCSBucketSuffix)

pkg/skaffold/build/gcb/project.go renamed to pkg/skaffold/gcp/projectid.go

+10-16
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,21 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package gcb
17+
package gcp
1818

1919
import (
2020
"fmt"
2121
"strings"
2222

23-
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/v1alpha3"
2423
"github.com/docker/distribution/reference"
2524
"github.com/docker/docker/registry"
2625
"github.com/pkg/errors"
2726
)
2827

29-
func (b *Builder) guessProjectID(artifact *v1alpha3.Artifact) (string, error) {
30-
if b.ProjectID != "" {
31-
return b.ProjectID, nil
32-
}
33-
34-
ref, err := reference.ParseNormalizedNamed(artifact.ImageName)
28+
// ExtractProjectID extracts the GCP projectID from a docker image name
29+
// This only works if the imageName is pushed to gcr.io.
30+
func ExtractProjectID(imageName string) (string, error) {
31+
ref, err := reference.ParseNormalizedNamed(imageName)
3532
if err != nil {
3633
return "", errors.Wrap(err, "parsing image name for registry")
3734
}
@@ -42,15 +39,12 @@ func (b *Builder) guessProjectID(artifact *v1alpha3.Artifact) (string, error) {
4239
}
4340

4441
index := repoInfo.Index
45-
if !index.Official {
46-
switch index.Name {
47-
case "gcr.io", "us.gcr.io", "eu.gcr.io", "asia.gcr.io", "staging-k8s.gcr.io":
48-
parts := strings.Split(repoInfo.Name.String(), "/")
49-
if len(parts) >= 2 {
50-
return parts[1], nil
51-
}
42+
if index.Name == "gcr.io" || strings.HasSuffix(index.Name, ".gcr.io") {
43+
parts := strings.Split(repoInfo.Name.String(), "/")
44+
if len(parts) >= 2 {
45+
return parts[1], nil
5246
}
5347
}
5448

55-
return "", fmt.Errorf("unable to guess GCP projectID from image name [%s]", artifact.ImageName)
49+
return "", fmt.Errorf("unable to guess GCP projectID from image name [%s]", imageName)
5650
}

pkg/skaffold/build/gcb/project_test.go renamed to pkg/skaffold/gcp/projectid_test.go

+8-22
Original file line numberDiff line numberDiff line change
@@ -14,60 +14,46 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package gcb
17+
package gcp
1818

1919
import (
2020
"testing"
2121

22-
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/v1alpha3"
2322
"github.com/GoogleContainerTools/skaffold/testutil"
2423
)
2524

26-
func TestGuessProjectID(t *testing.T) {
25+
func TestExtractProjectID(t *testing.T) {
2726
var tests = []struct {
2827
description string
29-
config *v1alpha3.GoogleCloudBuild
30-
artifact *v1alpha3.Artifact
28+
imageName string
3129
expected string
3230
shouldErr bool
3331
}{
34-
{
35-
description: "fixed projectId",
36-
config: &v1alpha3.GoogleCloudBuild{ProjectID: "fixed"},
37-
artifact: &v1alpha3.Artifact{ImageName: "any"},
38-
expected: "fixed",
39-
},
4032
{
4133
description: "gcr.io",
42-
config: &v1alpha3.GoogleCloudBuild{},
43-
artifact: &v1alpha3.Artifact{ImageName: "gcr.io/project/image"},
34+
imageName: "gcr.io/project/image",
4435
expected: "project",
4536
},
4637
{
4738
description: "eu.gcr.io",
48-
config: &v1alpha3.GoogleCloudBuild{},
49-
artifact: &v1alpha3.Artifact{ImageName: "gcr.io/project/image"},
39+
imageName: "gcr.io/project/image",
5040
expected: "project",
5141
},
5242
{
5343
description: "docker hub",
54-
config: &v1alpha3.GoogleCloudBuild{},
55-
artifact: &v1alpha3.Artifact{ImageName: "project/image"},
44+
imageName: "project/image",
5645
shouldErr: true,
5746
},
5847
{
5948
description: "invalid GCR image",
60-
config: &v1alpha3.GoogleCloudBuild{},
61-
artifact: &v1alpha3.Artifact{ImageName: "gcr.io"},
49+
imageName: "gcr.io",
6250
shouldErr: true,
6351
},
6452
}
6553

6654
for _, test := range tests {
6755
t.Run(test.description, func(t *testing.T) {
68-
builder := NewBuilder(test.config)
69-
70-
projectID, err := builder.guessProjectID(test.artifact)
56+
projectID, err := ExtractProjectID(test.imageName)
7157

7258
testutil.CheckErrorAndDeepEqual(t, test.shouldErr, err, test.expected, projectID)
7359
})

0 commit comments

Comments
 (0)