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

This commit is contained in:
Leonard Gram 2018-11-19 14:06:18 +01:00
parent 2d361eeabf
commit 8f0d3ff7ea
4 changed files with 83 additions and 17 deletions

View File

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

View File

@ -18,6 +18,9 @@ type releaseLocalSources struct {
} }
func (r releaseLocalSources) prepareRelease(baseArchiveUrl, whatsNewUrl string, releaseNotesUrl string, nightly bool) (*release, error) { 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) buildData := r.findBuilds(baseArchiveUrl)
rel := release{ rel := release{

View File

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

View File

@ -9,8 +9,13 @@ func TestPreparingReleaseFromRemote(t *testing.T) {
expectedVersion string expectedVersion string
whatsNewUrl string whatsNewUrl string
relNotesUrl string relNotesUrl string
nightly bool
expectedBeta bool
expectedStable bool
expectedArch string expectedArch string
expectedOs string expectedOs string
expectedUrl string
baseArchiveUrl string
buildArtifacts []buildArtifact buildArtifacts []buildArtifact
}{ }{
{ {
@ -18,10 +23,43 @@ func TestPreparingReleaseFromRemote(t *testing.T) {
expectedVersion: "5.2.0-beta1", expectedVersion: "5.2.0-beta1",
whatsNewUrl: "https://whatsnews.foo/", whatsNewUrl: "https://whatsnews.foo/",
relNotesUrl: "https://relnotes.foo/", relNotesUrl: "https://relnotes.foo/",
nightly: false,
expectedBeta: true,
expectedStable: false,
expectedArch: "amd64", expectedArch: "amd64",
expectedOs: "linux", 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"}}, 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 { for _, test := range cases {
@ -32,10 +70,10 @@ func TestPreparingReleaseFromRemote(t *testing.T) {
artifactConfigurations: test.buildArtifacts, 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 { if rel.Beta != test.expectedBeta || rel.Stable != test.expectedStable {
t.Errorf("%s should have been tagged as beta (not stable), but wasn't .", test.version) t.Errorf("%s should have been tagged as beta=%v, stable=%v.", test.version, test.expectedBeta, test.expectedStable)
} }
if rel.Version != test.expectedVersion { if rel.Version != test.expectedVersion {
@ -53,7 +91,11 @@ func TestPreparingReleaseFromRemote(t *testing.T) {
} }
if build.Os != test.expectedOs { 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 { if build.Os != expectedOs {
t.Fatalf("Expected os to be %s, but was %s", expectedOs, build.Os) 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.")
}
} }