From 84832cb6cb7480b58e7dc650b1d89018c632e97f Mon Sep 17 00:00:00 2001 From: Leonard Gram Date: Mon, 19 Nov 2018 16:55:30 +0100 Subject: [PATCH] build: releaser supports releasing only some artifacts. --- .circleci/config.yml | 3 ++ scripts/build/publish.sh | 4 +- scripts/build/release_publisher/main.go | 37 +++++++++++++------ scripts/build/release_publisher/publisher.go | 28 +++++++++++++- .../build/release_publisher/publisher_test.go | 26 ++++++++++++- 5 files changed, 83 insertions(+), 15 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 424744324ae..f8f0ba6789a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -359,6 +359,9 @@ jobs: - run: name: deploy to gcp command: '/opt/google-cloud-sdk/bin/gsutil cp ./enterprise-dist/* gs://$GCP_BUCKET_NAME/enterprise/release' + - run: + name: Deploy to Grafana.com + command: './scripts/build/publish.sh --enterprise' deploy-master: docker: diff --git a/scripts/build/publish.sh b/scripts/build/publish.sh index c03146eb910..e688748b8b1 100755 --- a/scripts/build/publish.sh +++ b/scripts/build/publish.sh @@ -2,6 +2,8 @@ # no relation to publish.go +EXTRA_OPTS="$@" + # Right now we hack this in into the publish script. # Eventually we might want to keep a list of all previous releases somewhere. _releaseNoteUrl="https://community.grafana.com/t/release-notes-v5-3-x/10244" @@ -11,4 +13,4 @@ _whatsNewUrl="http://docs.grafana.org/guides/whats-new-in-v5-3/" --wn ${_whatsNewUrl} \ --rn ${_releaseNoteUrl} \ --version ${CIRCLE_TAG} \ - --apikey ${GRAFANA_COM_API_KEY} + --apikey ${GRAFANA_COM_API_KEY} ${EXTRA_OPTS} diff --git a/scripts/build/release_publisher/main.go b/scripts/build/release_publisher/main.go index 27430d4cb64..d31c01b1a84 100644 --- a/scripts/build/release_publisher/main.go +++ b/scripts/build/release_publisher/main.go @@ -41,30 +41,43 @@ func main() { var builder releaseBuilder var product string + archiveProviderRoot := "https://s3-us-west-2.amazonaws.com" + buildArtifacts := completeBuildArtifactConfigurations + + if enterprise { + product = "grafana-enterprise" + baseUrl = createBaseUrl(archiveProviderRoot, "grafana-enterprise-releases", product, nightly) + var err error + buildArtifacts, err = filterBuildArtifacts([]artifactFilter{ + {os: "deb", arch: "amd64"}, + {os: "rpm", arch: "amd64"}, + {os: "linux", arch: "amd64"}, + {os: "windows", arch: "amd64"}, + }) + + if err != nil { + log.Fatalf("Could not filter to the selected build artifacts, err=%v", err) + } + + } else { + product = "grafana" + baseUrl = createBaseUrl(archiveProviderRoot, "grafana-releases", product, nightly) + } + if fromLocal { path, _ := os.Getwd() builder = releaseLocalSources{ path: path, - artifactConfigurations: buildArtifactConfigurations, + artifactConfigurations: buildArtifacts, } } else { builder = releaseFromExternalContent{ getter: getHttpContents{}, rawVersion: version, - artifactConfigurations: buildArtifactConfigurations, + artifactConfigurations: buildArtifacts, } } - archiveProviderRoot := "https://s3-us-west-2.amazonaws.com" - - if enterprise { - product = "grafana-enterprise" - baseUrl = createBaseUrl(archiveProviderRoot, "grafana-enterprise-releases", product, nightly) - } else { - product = "grafana" - baseUrl = createBaseUrl(archiveProviderRoot, "grafana-releases", product, nightly) - } - p := publisher{ apiKey: apiKey, apiUri: "https://grafana.com/api", diff --git a/scripts/build/release_publisher/publisher.go b/scripts/build/release_publisher/publisher.go index ad54a1ccb9b..1d93c1e306e 100644 --- a/scripts/build/release_publisher/publisher.go +++ b/scripts/build/release_publisher/publisher.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/json" "fmt" + "github.com/pkg/errors" "io/ioutil" "log" "net/http" @@ -103,7 +104,7 @@ func (t buildArtifact) getUrl(baseArchiveUrl, version string, releaseType Releas return url } -var buildArtifactConfigurations = []buildArtifact{ +var completeBuildArtifactConfigurations = []buildArtifact{ { os: "deb", arch: "arm64", @@ -161,6 +162,31 @@ var buildArtifactConfigurations = []buildArtifact{ }, } +type artifactFilter struct { + os string + arch string +} + +func filterBuildArtifacts(filters []artifactFilter) ([]buildArtifact, error) { + var artifacts []buildArtifact + for _, f := range filters { + matched := false + + for _, a := range completeBuildArtifactConfigurations { + if f.os == a.os && f.arch == a.arch { + artifacts = append(artifacts, a) + matched = true + break + } + } + + if !matched { + return nil, errors.New(fmt.Sprintf("No buildArtifact for os=%v, arch=%v", f.os, f.arch)) + } + } + return artifacts, nil +} + func newBuild(baseArchiveUrl string, ba buildArtifact, version string, rt ReleaseType, sha256 string) build { return build{ Os: ba.os, diff --git a/scripts/build/release_publisher/publisher_test.go b/scripts/build/release_publisher/publisher_test.go index 1d5fb683b2c..a7ac3bb8483 100644 --- a/scripts/build/release_publisher/publisher_test.go +++ b/scripts/build/release_publisher/publisher_test.go @@ -115,7 +115,7 @@ func TestPreparingReleaseFromLocal(t *testing.T) { testDataPath := "testdata" builder = releaseLocalSources{ path: testDataPath, - artifactConfigurations: buildArtifactConfigurations, + artifactConfigurations: completeBuildArtifactConfigurations, } relAll, _ := builder.prepareRelease("https://s3-us-west-2.amazonaws.com/grafana-enterprise-releases/master/grafana-enterprise", whatsNewUrl, relNotesUrl, true) @@ -176,3 +176,27 @@ func TestPreparingReleaseFromLocal(t *testing.T) { t.Error("Error was nil, but expected an error as the local releaser only supports nightly builds.") } } + +func TestFilterBuildArtifacts(t *testing.T) { + buildArtifacts, _ := filterBuildArtifacts([]artifactFilter{ + {os: "deb", arch: "amd64"}, + {os: "rhel", arch: "amd64"}, + {os: "linux", arch: "amd64"}, + {os: "win", arch: "amd64"}, + }) + + if len(buildArtifacts) != 4 { + t.Errorf("Expected 4 build artifacts after filtering, but was %v", len(buildArtifacts)) + } + + _, err := filterBuildArtifacts([]artifactFilter{ + {os: "foobar", arch: "amd64"}, + }) + + + + if err == nil { + t.Errorf("Expected an error as a we tried to filter on a nonexiststant os.") + } + +}