浏览代码

build: fixes a bug where nightly rpm builds would be handled as stable.

Leonard Gram 7 年之前
父节点
当前提交
8f0d3ff7ea

+ 9 - 5
scripts/build/release_publisher/externalrelease.go

@@ -16,10 +16,14 @@ type releaseFromExternalContent struct {
 
 func (re releaseFromExternalContent) prepareRelease(baseArchiveUrl, whatsNewUrl string, releaseNotesUrl string, nightly bool) (*release, error) {
 	version := re.rawVersion[1:]
-	isBeta := strings.Contains(version, "beta")
+	beta := strings.Contains(version, "beta")
 	var rt ReleaseType
-	if isBeta {
+	if beta {
 		rt = BETA
+	} else if nightly {
+		rt = NIGHTLY
+	} else {
+		rt = STABLE
 	}
 
 	builds := []build{}
@@ -34,9 +38,9 @@ func (re releaseFromExternalContent) prepareRelease(baseArchiveUrl, whatsNewUrl
 	r := release{
 		Version:         version,
 		ReleaseDate:     time.Now().UTC(),
-		Stable:          !isBeta && !nightly,
-		Beta:            isBeta,
-		Nightly:         nightly,
+		Stable:          rt.stable(),
+		Beta:            rt.beta(),
+		Nightly:         rt.nightly(),
 		WhatsNewUrl:     whatsNewUrl,
 		ReleaseNotesUrl: releaseNotesUrl,
 		Builds:          builds,

+ 3 - 0
scripts/build/release_publisher/localrelease.go

@@ -18,6 +18,9 @@ type releaseLocalSources struct {
 }
 
 func (r releaseLocalSources) prepareRelease(baseArchiveUrl, whatsNewUrl string, releaseNotesUrl string, nightly bool) (*release, error) {
+	if !nightly {
+		return nil, errors.New("Local releases only supported for nightly builds.")
+	}
 	buildData := r.findBuilds(baseArchiveUrl)
 
 	rel := release{

+ 14 - 2
scripts/build/release_publisher/publisher.go

@@ -69,13 +69,25 @@ const (
 	NIGHTLY
 )
 
+func (rt ReleaseType) beta() bool {
+	return rt == BETA
+}
+
+func (rt ReleaseType) stable() bool {
+	return rt == STABLE
+}
+
+func (rt ReleaseType) nightly() bool {
+	return rt == NIGHTLY
+}
+
 type buildArtifact struct {
 	os         string
 	arch       string
 	urlPostfix string
 }
 
-func (t buildArtifact) getUrl(baseArchiveUrl, version string, rt ReleaseType) string {
+func (t buildArtifact) getUrl(baseArchiveUrl, version string, releaseType ReleaseType) string {
 	prefix := "-"
 	rhelReleaseExtra := ""
 
@@ -83,7 +95,7 @@ func (t buildArtifact) getUrl(baseArchiveUrl, version string, rt ReleaseType) st
 		prefix = "_"
 	}
 
-	if rt == BETA && t.os == "rhel" {
+	if releaseType == STABLE && t.os == "rhel" {
 		rhelReleaseExtra = "-1"
 	}
 

+ 57 - 10
scripts/build/release_publisher/publisher_test.go

@@ -5,23 +5,61 @@ import "testing"
 func TestPreparingReleaseFromRemote(t *testing.T) {
 
 	cases := []struct {
-		version string
+		version         string
 		expectedVersion string
-		whatsNewUrl string
-		relNotesUrl string
-		expectedArch string
-		expectedOs string
-		buildArtifacts []buildArtifact
+		whatsNewUrl     string
+		relNotesUrl     string
+		nightly         bool
+		expectedBeta    bool
+		expectedStable  bool
+		expectedArch    string
+		expectedOs      string
+		expectedUrl     string
+		baseArchiveUrl  string
+		buildArtifacts  []buildArtifact
 	}{
 		{
 			version:         "v5.2.0-beta1",
 			expectedVersion: "5.2.0-beta1",
 			whatsNewUrl:     "https://whatsnews.foo/",
 			relNotesUrl:     "https://relnotes.foo/",
+			nightly:         false,
+			expectedBeta:    true,
+			expectedStable:  false,
 			expectedArch:    "amd64",
 			expectedOs:      "linux",
+			expectedUrl:     "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.0-beta1.linux-amd64.tar.gz",
+			baseArchiveUrl:  "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana",
 			buildArtifacts:  []buildArtifact{{"linux", "amd64", ".linux-amd64.tar.gz"}},
 		},
+		{
+			version:         "v5.2.3",
+			expectedVersion: "5.2.3",
+			whatsNewUrl:     "https://whatsnews.foo/",
+			relNotesUrl:     "https://relnotes.foo/",
+			nightly:         false,
+			expectedBeta:    false,
+			expectedStable:  true,
+			expectedArch:    "amd64",
+			expectedOs:      "rhel",
+			expectedUrl:     "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.3-1.x86_64.rpm",
+			baseArchiveUrl:  "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana",
+			buildArtifacts:  []buildArtifact{{"rhel", "amd64", ".x86_64.rpm"}},
+		},
+		{
+			version:         "v5.4.0-pre1asdf",
+			expectedVersion: "5.4.0-pre1asdf",
+			whatsNewUrl:     "https://whatsnews.foo/",
+			relNotesUrl:     "https://relnotes.foo/",
+			nightly:         true,
+			expectedBeta:    false,
+			expectedStable:  false,
+			expectedArch:    "amd64",
+			expectedOs:      "rhel",
+			expectedUrl:     "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.4.0-pre1asdf.x86_64.rpm",
+			baseArchiveUrl:  "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana",
+			buildArtifacts:  []buildArtifact{{"rhel", "amd64", ".x86_64.rpm"}},
+		},
 	}
 
 	for _, test := range cases {
@@ -32,10 +70,10 @@ func TestPreparingReleaseFromRemote(t *testing.T) {
 			artifactConfigurations: test.buildArtifacts,
 		}
 
-		rel, _ := builder.prepareRelease("https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana", test.whatsNewUrl, test.relNotesUrl, false)
+		rel, _ := builder.prepareRelease(test.baseArchiveUrl, test.whatsNewUrl, test.relNotesUrl, test.nightly)
 
-		if !rel.Beta || rel.Stable {
-			t.Errorf("%s should have been tagged as beta (not stable), but wasn't	.", test.version)
+		if rel.Beta != test.expectedBeta || rel.Stable != test.expectedStable {
+			t.Errorf("%s should have been tagged as beta=%v, stable=%v.", test.version, test.expectedBeta, test.expectedStable)
 		}
 
 		if rel.Version != test.expectedVersion {
@@ -53,7 +91,11 @@ func TestPreparingReleaseFromRemote(t *testing.T) {
 		}
 
 		if build.Os != test.expectedOs {
-			t.Errorf("Expected arch to be %v, but it was %v", test.expectedOs, build.Os)
+			t.Errorf("Expected os to be %v, but it was %v", test.expectedOs, build.Os)
+		}
+
+		if build.Url != test.expectedUrl {
+			t.Errorf("Expected url to be %v, but it was %v", test.expectedUrl, build.Url)
 		}
 	}
 }
@@ -129,4 +171,9 @@ func TestPreparingReleaseFromLocal(t *testing.T) {
 	if build.Os != expectedOs {
 		t.Fatalf("Expected os to be %s, but was %s", expectedOs, build.Os)
 	}
+
+	_, err := builder.prepareRelease("", "", "", false)
+	if err == nil {
+		t.Error("Error was nil, but expected an error as the local releaser only supports nightly builds.")
+	}
 }