浏览代码

build: publisher updated to support more architectures and OSs.

Leonard Gram 7 年之前
父节点
当前提交
3933cb6bf6
共有 2 个文件被更改,包括 155 次插入21 次删除
  1. 51 21
      scripts/build/publish.go
  2. 104 0
      scripts/build/publish_test.go

+ 51 - 21
scripts/build/publish.go

@@ -18,8 +18,15 @@ import (
 var apiUrl = flag.String("apiUrl", "https://grafana.com/api", "api url")
 var apiUrl = flag.String("apiUrl", "https://grafana.com/api", "api url")
 var apiKey = flag.String("apiKey", "", "api key")
 var apiKey = flag.String("apiKey", "", "api key")
 var version = ""
 var version = ""
-var versionRe = regexp.MustCompile(`grafana-(.*)\.(linux|windows)`)
+var versionRe = regexp.MustCompile(`grafana-(.*)(\.|_)(arm64|armv7|darwin|linux|windows|x86_64)`)
+var debVersionRe = regexp.MustCompile(`grafana_(.*)_(arm64|armv7|amd64)\.deb`)
 var builds = []build{}
 var builds = []build{}
+var architectureMapping = map[string]string{
+	"amd64":"amd64",
+	"armv7":"armv7",
+	"arm64":"arm64",
+	"x86_64":"amd64",
+}
 
 
 func main() {
 func main() {
 	flag.Parse()
 	flag.Parse()
@@ -60,45 +67,68 @@ func main() {
 	}
 	}
 }
 }
 
 
-func packageWalker(path string, f os.FileInfo, err error) error {
-	if f.Name() == "dist" || strings.Contains(f.Name(), "sha256") || strings.Contains(f.Name(), "latest") {
-		return nil
-	}
-
-	log.Printf("Finding package file %s", f.Name())
-	result := versionRe.FindSubmatch([]byte(f.Name()))
+func mapPackage(path string, name string, shaBytes []byte) (build, error) {
+	log.Printf("Finding package file %s", name)
+	result := versionRe.FindSubmatch([]byte(name))
+	debResult := debVersionRe.FindSubmatch([]byte(name))
 
 
 	if len(result) > 0 {
 	if len(result) > 0 {
 		version = string(result[1])
 		version = string(result[1])
 		log.Printf("Version detected: %v", version)
 		log.Printf("Version detected: %v", version)
-	}
-
-	shaBytes, err := ioutil.ReadFile(path + ".sha256")
-	if err != nil {
-		log.Fatalf("Failed to read sha256 file %v", err)
+	} else if (len(debResult) > 0) {
+		version = string(debResult[1])
 	}
 	}
 
 
 	os := ""
 	os := ""
-	if strings.Contains(f.Name(), "linux-x64.tar.gz") {
+	if strings.Contains(name, "linux") {
 		os = "linux"
 		os = "linux"
 	}
 	}
-	if strings.HasSuffix(f.Name(), "windows-x64.zip") {
+	if strings.HasSuffix(name, "windows-amd64.zip") {
 		os = "win"
 		os = "win"
 	}
 	}
-	if strings.HasSuffix(f.Name(), ".rpm") {
+	if strings.HasSuffix(name, "darwin-amd64.tar.gz") {
+		os = "darwin"
+	}
+	if strings.HasSuffix(name, ".rpm") {
 		os = "rhel"
 		os = "rhel"
 	}
 	}
-	if strings.HasSuffix(f.Name(), ".deb") {
+	if strings.HasSuffix(name, ".deb") {
 		os = "deb"
 		os = "deb"
 	}
 	}
 
 
-	builds = append(builds, build{
+	arch := ""
+	for archListed, archReal := range architectureMapping {
+		if strings.Contains(name, archListed) {
+			arch = archReal
+			break
+		}
+	}
+
+	return build{
 		Os:     os,
 		Os:     os,
-		Arch:   "amd64",
-		Url:    "https://s3-us-west-2.amazonaws.com/grafana-releases/master/" + f.Name(),
+		Arch:   arch,
+		Url:    "https://s3-us-west-2.amazonaws.com/grafana-releases/master/" + name,
 		Sha256: string(shaBytes),
 		Sha256: string(shaBytes),
-	})
+	}, nil
+}
+
+func packageWalker(path string, f os.FileInfo, err error) error {
+	if f.Name() == "dist" || strings.Contains(f.Name(), "sha256") || strings.Contains(f.Name(), "latest") {
+		return nil
+	}
+
+	shaBytes, err := ioutil.ReadFile(path + ".sha256")
+	if err != nil {
+		log.Fatalf("Failed to read sha256 file %v", err)
+	}
+
+	build, err := mapPackage(path, f.Name(), shaBytes)
+
+	if err != nil {
+		return err
+	}
 
 
+	builds = append(builds, build)
 	return nil
 	return nil
 }
 }
 
 

+ 104 - 0
scripts/build/publish_test.go

@@ -0,0 +1,104 @@
+package main
+
+import (
+	"testing"
+)
+
+type testPackage struct {
+	path    string
+	version string
+	os      string
+	arch    string
+}
+
+var testData = []testPackage{
+	{
+		path:    "grafana-5.2.0-474pre1.arm64.rpm",
+		version: "5.2.0-474pre1",
+		os:      "rhel",
+		arch:    "arm64",
+	},
+	{
+		path:    "grafana-5.2.0-474pre1.armv7.rpm",
+		version: "5.2.0-474pre1",
+		os:      "rhel",
+		arch:    "armv7",
+	},
+	{
+		path:    "grafana-5.2.0-474pre1.darwin-amd64.tar.gz",
+		version: "5.2.0-474pre1",
+		os:      "darwin",
+		arch:    "amd64",
+	},
+	{
+		path:    "grafana-5.2.0-474pre1.linux-amd64.tar.gz",
+		version: "5.2.0-474pre1",
+		os:      "linux",
+		arch:    "amd64",
+	},
+	{
+		path:    "grafana-5.2.0-474pre1.linux-arm64.tar.gz",
+		version: "5.2.0-474pre1",
+		os:      "linux",
+		arch:    "arm64",
+	},
+	{
+		path:    "grafana-5.2.0-474pre1.linux-armv7.tar.gz",
+		version: "5.2.0-474pre1",
+		os:      "linux",
+		arch:    "armv7",
+	},
+	{
+		path:    "grafana-5.2.0-474pre1.windows-amd64.zip",
+		version: "5.2.0-474pre1",
+		os:      "win",
+		arch:    "amd64",
+	},
+	{
+		path:    "grafana-5.2.0-474pre1.x86_64.rpm",
+		version: "5.2.0-474pre1",
+		os:      "rhel",
+		arch:    "amd64",
+	},
+	{
+		path:    "grafana_5.2.0-474pre1_amd64.deb",
+		version: "5.2.0-474pre1",
+		os:      "deb",
+		arch:    "amd64",
+	},
+	{
+		path:    "grafana_5.2.0-474pre1_arm64.deb",
+		version: "5.2.0-474pre1",
+		os:      "deb",
+		arch:    "arm64",
+	},
+	{
+		path:    "grafana_5.2.0-474pre1_armv7.deb",
+		version: "5.2.0-474pre1",
+		os:      "deb",
+		arch:    "armv7",
+	},
+}
+
+func TestFileWalker(t *testing.T) {
+	for _, packageInfo := range testData {
+		version = ""
+		actualPackageInfo, err := mapPackage(packageInfo.path, packageInfo.path, []byte{})
+		if err != nil {
+			t.Error(err)
+			continue
+		}
+
+		if version != packageInfo.version {
+			t.Errorf("Testing (%v), expected %v to be %v.", packageInfo.path, version, packageInfo.version)
+		}
+
+		if actualPackageInfo.Os != packageInfo.os {
+			t.Errorf("Testing (%v), expected %v to be %v.", packageInfo.path, actualPackageInfo.Os, packageInfo.os)
+		}
+
+		if actualPackageInfo.Arch != packageInfo.arch {
+			t.Errorf("Testing (%v), expected %v to be %v.", packageInfo.path, actualPackageInfo.Arch, packageInfo.arch)
+		}
+	}
+}