Commit 0bfbb1c1 by Leonard Gram Committed by GitHub

Merge pull request #11920 from grafana/crosscompile

Crosscompile and packages Grafana on arm, windows, linux and darwin
parents 64053e19 bea4741a
aliases:
# Workflow filters
- &filter-only-release
branches:
ignore: /.*/
tags:
only: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/
- &filter-not-release
tags:
ignore: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/
version: 2 version: 2
jobs: jobs:
...@@ -46,7 +57,6 @@ jobs: ...@@ -46,7 +57,6 @@ jobs:
command: 'sudo npm install -g yarn --quiet' command: 'sudo npm install -g yarn --quiet'
- restore_cache: - restore_cache:
key: dependency-cache-{{ checksum "yarn.lock" }} key: dependency-cache-{{ checksum "yarn.lock" }}
# Could we skip this step if the cache has been restored? `[ -d node_modules ] || yarn install ...` should be able to apply to build step as well
- run: - run:
name: yarn install name: yarn install
command: 'yarn install --pure-lockfile --no-progress' command: 'yarn install --pure-lockfile --no-progress'
...@@ -68,15 +78,27 @@ jobs: ...@@ -68,15 +78,27 @@ jobs:
name: build backend and run go tests name: build backend and run go tests
command: './scripts/circle-test-backend.sh' command: './scripts/circle-test-backend.sh'
build: build-all:
docker: docker:
- image: grafana/build-container:v0.1 - image: grafana/build-container:1.0.0
working_directory: /go/src/github.com/grafana/grafana working_directory: /go/src/github.com/grafana/grafana
steps: steps:
- checkout - checkout
- run: - run:
name: prepare build tools
command: '/tmp/bootstrap.sh'
- restore_cache:
key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }}
- run:
name: download phantomjs binaries
command: './scripts/build/download-phantomjs.sh'
- save_cache:
key: phantomjs-binaries-{{ checksum "scripts/build/download-phantomjs.sh" }}
paths:
- /tmp/phantomjs
- run:
name: build and package grafana name: build and package grafana
command: './scripts/build/build.sh' command: './scripts/build/build-all.sh'
- run: - run:
name: sign packages name: sign packages
command: './scripts/build/sign_packages.sh' command: './scripts/build/sign_packages.sh'
...@@ -92,6 +114,8 @@ jobs: ...@@ -92,6 +114,8 @@ jobs:
- dist/grafana* - dist/grafana*
- scripts/*.sh - scripts/*.sh
- scripts/publish - scripts/publish
- store_artifacts:
path: dist
build-enterprise: build-enterprise:
docker: docker:
...@@ -154,45 +178,43 @@ workflows: ...@@ -154,45 +178,43 @@ workflows:
version: 2 version: 2
test-and-build: test-and-build:
jobs: jobs:
- build-all:
filters: *filter-not-release
- codespell: - codespell:
filters: filters: *filter-not-release
tags:
only: /.*/
- gometalinter: - gometalinter:
filters: filters: *filter-not-release
tags:
only: /.*/
- build:
filters:
tags:
only: /.*/
- test-frontend: - test-frontend:
filters: filters: *filter-not-release
tags:
only: /.*/
- test-backend: - test-backend:
filters: filters: *filter-not-release
tags:
only: /.*/
- deploy-master: - deploy-master:
requires: requires:
- build-all
- test-backend - test-backend
- test-frontend - test-frontend
- build - codespell
- gometalinter
filters: filters:
branches: branches:
only: master only: master
release:
jobs:
- build-all:
filters: *filter-only-release
- codespell:
filters: *filter-only-release
- gometalinter:
filters: *filter-only-release
- test-frontend:
filters: *filter-only-release
- test-backend:
filters: *filter-only-release
- deploy-release: - deploy-release:
requires: requires:
- build-all
- test-backend - test-backend
- test-frontend - test-frontend
- build - codespell
filters: - gometalinter
branches: filters: *filter-only-release
ignore: /.*/
tags:
only: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/
# - build-enterprise:
# filters:
# tags:
# only: /.*/
...@@ -12,6 +12,10 @@ module.exports = function (grunt) { ...@@ -12,6 +12,10 @@ module.exports = function (grunt) {
platform: process.platform.replace('win32', 'windows'), platform: process.platform.replace('win32', 'windows'),
}; };
if (grunt.option('platform')) {
config.platform = grunt.option('platform');
}
if (grunt.option('arch')) { if (grunt.option('arch')) {
config.arch = grunt.option('arch'); config.arch = grunt.option('arch');
} else { } else {
......
...@@ -38,16 +38,3 @@ artifacts: ...@@ -38,16 +38,3 @@ artifacts:
- path: grafana-*windows-*.* - path: grafana-*windows-*.*
name: binzip name: binzip
type: zip type: zip
deploy:
- provider: Environment
name: GrafanaReleaseMaster
on:
buildType: master
- provider: Environment
name: GrafanaReleaseRelease
on:
buildType: release
...@@ -27,8 +27,7 @@ var ( ...@@ -27,8 +27,7 @@ var (
goarch string goarch string
goos string goos string
gocc string gocc string
gocxx string cgo bool
cgo string
pkgArch string pkgArch string
version string = "v1" version string = "v1"
// deb & rpm does not support semver so have to handle their version a little differently // deb & rpm does not support semver so have to handle their version a little differently
...@@ -53,8 +52,7 @@ func main() { ...@@ -53,8 +52,7 @@ func main() {
flag.StringVar(&goarch, "goarch", runtime.GOARCH, "GOARCH") flag.StringVar(&goarch, "goarch", runtime.GOARCH, "GOARCH")
flag.StringVar(&goos, "goos", runtime.GOOS, "GOOS") flag.StringVar(&goos, "goos", runtime.GOOS, "GOOS")
flag.StringVar(&gocc, "cc", "", "CC") flag.StringVar(&gocc, "cc", "", "CC")
flag.StringVar(&gocxx, "cxx", "", "CXX") flag.BoolVar(&cgo, "cgo-enabled", cgo, "Enable cgo")
flag.StringVar(&cgo, "cgo-enabled", "", "CGO_ENABLED")
flag.StringVar(&pkgArch, "pkg-arch", "", "PKG ARCH") flag.StringVar(&pkgArch, "pkg-arch", "", "PKG ARCH")
flag.StringVar(&phjsToRelease, "phjs", "", "PhantomJS binary") flag.StringVar(&phjsToRelease, "phjs", "", "PhantomJS binary")
flag.BoolVar(&race, "race", race, "Use race detector") flag.BoolVar(&race, "race", race, "Use race detector")
...@@ -93,20 +91,24 @@ func main() { ...@@ -93,20 +91,24 @@ func main() {
build("grafana-server", "./pkg/cmd/grafana-server", []string{}) build("grafana-server", "./pkg/cmd/grafana-server", []string{})
case "build": case "build":
clean() //clean()
for _, binary := range binaries { for _, binary := range binaries {
build(binary, "./pkg/cmd/"+binary, []string{}) build(binary, "./pkg/cmd/"+binary, []string{})
} }
case "build-frontend":
grunt(gruntBuildArg("build")...)
case "test": case "test":
test("./pkg/...") test("./pkg/...")
grunt("test") grunt("test")
case "package": case "package":
grunt(gruntBuildArg("release")...) grunt(gruntBuildArg("build")...)
if runtime.GOOS != "windows" { packageGrafana()
createLinuxPackages()
} case "package-only":
packageGrafana()
case "pkg-rpm": case "pkg-rpm":
grunt(gruntBuildArg("release")...) grunt(gruntBuildArg("release")...)
...@@ -131,6 +133,22 @@ func main() { ...@@ -131,6 +133,22 @@ func main() {
} }
} }
func packageGrafana() {
platformArg := fmt.Sprintf("--platform=%v", goos)
previousPkgArch := pkgArch
if pkgArch == "" {
pkgArch = goarch
}
postProcessArgs := gruntBuildArg("package")
postProcessArgs = append(postProcessArgs, platformArg)
grunt(postProcessArgs...)
pkgArch = previousPkgArch
if goos == "linux" && goarch == "amd64"{
createLinuxPackages()
}
}
func makeLatestDistCopies() { func makeLatestDistCopies() {
files, err := ioutil.ReadDir("dist") files, err := ioutil.ReadDir("dist")
if err != nil { if err != nil {
...@@ -138,9 +156,9 @@ func makeLatestDistCopies() { ...@@ -138,9 +156,9 @@ func makeLatestDistCopies() {
} }
latestMapping := map[string]string{ latestMapping := map[string]string{
".deb": "dist/grafana_latest_amd64.deb", "_amd64.deb": "dist/grafana_latest_amd64.deb",
".rpm": "dist/grafana-latest-1.x86_64.rpm", ".x86_64.rpm": "dist/grafana-latest-1.x86_64.rpm",
".tar.gz": "dist/grafana-latest.linux-x64.tar.gz", ".linux-amd64.tar.gz": "dist/grafana-latest.linux-x64.tar.gz",
} }
for _, file := range files { for _, file := range files {
...@@ -386,7 +404,8 @@ func test(pkg string) { ...@@ -386,7 +404,8 @@ func test(pkg string) {
} }
func build(binaryName, pkg string, tags []string) { func build(binaryName, pkg string, tags []string) {
binary := "./bin/" + binaryName binary := fmt.Sprintf("./bin/%s-%s/%s", goos, goarch, binaryName)
if goos == "windows" { if goos == "windows" {
binary += ".exe" binary += ".exe"
} }
...@@ -408,6 +427,7 @@ func build(binaryName, pkg string, tags []string) { ...@@ -408,6 +427,7 @@ func build(binaryName, pkg string, tags []string) {
if !isDev { if !isDev {
setBuildEnv() setBuildEnv()
runPrint("go", "version") runPrint("go", "version")
fmt.Printf("Targeting %s/%s\n", goos, goarch)
} }
runPrint("go", args...) runPrint("go", args...)
...@@ -451,6 +471,14 @@ func clean() { ...@@ -451,6 +471,14 @@ func clean() {
func setBuildEnv() { func setBuildEnv() {
os.Setenv("GOOS", goos) os.Setenv("GOOS", goos)
if goos == "windows" {
// require windows >=7
os.Setenv("CGO_CFLAGS", "-D_WIN32_WINNT=0x0601")
}
if goarch != "amd64" || goos != "linux" {
// needed for all other archs
cgo = true
}
if strings.HasPrefix(goarch, "armv") { if strings.HasPrefix(goarch, "armv") {
os.Setenv("GOARCH", "arm") os.Setenv("GOARCH", "arm")
os.Setenv("GOARM", goarch[4:]) os.Setenv("GOARM", goarch[4:])
...@@ -460,15 +488,12 @@ func setBuildEnv() { ...@@ -460,15 +488,12 @@ func setBuildEnv() {
if goarch == "386" { if goarch == "386" {
os.Setenv("GO386", "387") os.Setenv("GO386", "387")
} }
if cgo != "" { if cgo {
os.Setenv("CGO_ENABLED", cgo) os.Setenv("CGO_ENABLED", "1")
} }
if gocc != "" { if gocc != "" {
os.Setenv("CC", gocc) os.Setenv("CC", gocc)
} }
if gocxx != "" {
os.Setenv("CXX", gocxx)
}
} }
func getGitSha() string { func getGitSha() string {
......
#!/bin/bash
#
# This script is executed from within the container.
#
CCARMV7=arm-linux-gnueabihf-gcc
CCARM64=aarch64-linux-gnu-gcc
CCOSX64=/tmp/osxcross/target/bin/o64-clang
CCWIN64=x86_64-w64-mingw32-gcc
CCX64=/tmp/x86_64-centos6-linux-gnu/bin/x86_64-centos6-linux-gnu-gcc
GOPATH=/go
REPO_PATH=$GOPATH/src/github.com/grafana/grafana
cd /go/src/github.com/grafana/grafana
echo "current dir: $(pwd)"
if [ "$CIRCLE_TAG" != "" ]; then
echo "Building releases from tag $CIRCLE_TAG"
go run build.go -goarch armv7 -cc ${CCARMV7} -includeBuildNumber=false build
go run build.go -goarch arm64 -cc ${CCARM64} -includeBuildNumber=false build
go run build.go -goos darwin -cc ${CCOSX64} -includeBuildNumber=false build
go run build.go -goos windows -cc ${CCWIN64} -includeBuildNumber=false build
CC=${CCX64} go run build.go -includeBuildNumber=false build
else
echo "Building incremental build for $CIRCLE_BRANCH"
go run build.go -goarch armv7 -cc ${CCARMV7} -buildNumber=${CIRCLE_BUILD_NUM} build
go run build.go -goarch arm64 -cc ${CCARM64} -buildNumber=${CIRCLE_BUILD_NUM} build
go run build.go -goos darwin -cc ${CCOSX64} -buildNumber=${CIRCLE_BUILD_NUM} build
go run build.go -goos windows -cc ${CCWIN64} -buildNumber=${CIRCLE_BUILD_NUM} build
CC=${CCX64} go run build.go -buildNumber=${CIRCLE_BUILD_NUM} build
fi
yarn install --pure-lockfile --no-progress
echo "current dir: $(pwd)"
if [ -d "dist" ]; then
rm -rf dist
fi
if [ "$CIRCLE_TAG" != "" ]; then
echo "Building frontend from tag $CIRCLE_TAG"
go run build.go -includeBuildNumber=false build-frontend
echo "Packaging a release from tag $CIRCLE_TAG"
go run build.go -goos linux -pkg-arch amd64 -includeBuildNumber=false package-only latest
go run build.go -goos linux -pkg-arch armv7 -includeBuildNumber=false package-only
go run build.go -goos linux -pkg-arch arm64 -includeBuildNumber=false package-only
if [ -d '/tmp/phantomjs/darwin' ]; then
cp /tmp/phantomjs/darwin/phantomjs tools/phantomjs/phantomjs
else
echo 'PhantomJS binaries for darwin missing!'
fi
go run build.go -goos darwin -pkg-arch amd64 -includeBuildNumber=false package-only
if [ -d '/tmp/phantomjs/windows' ]; then
cp /tmp/phantomjs/windows/phantomjs.exe tools/phantomjs/phantomjs.exe
rm tools/phantomjs/phantomjs
else
echo 'PhantomJS binaries for darwin missing!'
fi
go run build.go -goos windows -pkg-arch amd64 -includeBuildNumber=false package-only
else
echo "Building frontend for $CIRCLE_BRANCH"
go run build.go -buildNumber=${CIRCLE_BUILD_NUM} build-frontend
echo "Packaging incremental build for $CIRCLE_BRANCH"
go run build.go -goos linux -pkg-arch amd64 -buildNumber=${CIRCLE_BUILD_NUM} package-only latest
go run build.go -goos linux -pkg-arch armv7 -buildNumber=${CIRCLE_BUILD_NUM} package-only
go run build.go -goos linux -pkg-arch arm64 -buildNumber=${CIRCLE_BUILD_NUM} package-only
if [ -d '/tmp/phantomjs/darwin' ]; then
cp /tmp/phantomjs/darwin/phantomjs tools/phantomjs/phantomjs
else
echo 'PhantomJS binaries for darwin missing!'
fi
go run build.go -goos darwin -pkg-arch amd64 -buildNumber=${CIRCLE_BUILD_NUM} package-only
if [ -d '/tmp/phantomjs/windows' ]; then
cp /tmp/phantomjs/windows/phantomjs.exe tools/phantomjs/phantomjs.exe
rm tools/phantomjs/phantomjs
else
echo 'PhantomJS binaries for windows missing!'
fi
go run build.go -goos windows -pkg-arch amd64 -buildNumber=${CIRCLE_BUILD_NUM} package-only
fi
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
# This script is executed from within the container. # This script is executed from within the container.
# #
CCX64=/tmp/x86_64-centos6-linux-gnu/bin/x86_64-centos6-linux-gnu-gcc
GOPATH=/go GOPATH=/go
REPO_PATH=$GOPATH/src/github.com/grafana/grafana REPO_PATH=$GOPATH/src/github.com/grafana/grafana
...@@ -11,23 +13,29 @@ cd /go/src/github.com/grafana/grafana ...@@ -11,23 +13,29 @@ cd /go/src/github.com/grafana/grafana
echo "current dir: $(pwd)" echo "current dir: $(pwd)"
if [ "$CIRCLE_TAG" != "" ]; then if [ "$CIRCLE_TAG" != "" ]; then
echo "Building a release from tag $CIRCLE_TAG" echo "Building releases from tag $CIRCLE_TAG"
go run build.go -buildNumber=${CIRCLE_BUILD_NUM} -includeBuildNumber=false build CC=${CCX64} go run build.go -includeBuildNumber=false build
else else
echo "Building incremental build for $CIRCLE_BRANCH" echo "Building incremental build for $CIRCLE_BRANCH"
go run build.go -buildNumber=${CIRCLE_BUILD_NUM} build CC=${CCX64} go run build.go -buildNumber=${CIRCLE_BUILD_NUM} build
fi fi
yarn install --pure-lockfile --no-progress yarn install --pure-lockfile --no-progress
source /etc/profile.d/rvm.sh
echo "current dir: $(pwd)" echo "current dir: $(pwd)"
if [ -d "dist" ]; then
rm -rf dist
fi
if [ "$CIRCLE_TAG" != "" ]; then if [ "$CIRCLE_TAG" != "" ]; then
echo "Building frontend from tag $CIRCLE_TAG"
go run build.go -includeBuildNumber=false build-frontend
echo "Packaging a release from tag $CIRCLE_TAG" echo "Packaging a release from tag $CIRCLE_TAG"
go run build.go -buildNumber=${CIRCLE_BUILD_NUM} -includeBuildNumber=false package latest go run build.go -goos linux -pkg-arch amd64 -includeBuildNumber=false package-only latest
else else
echo "Building frontend for $CIRCLE_BRANCH"
go run build.go -buildNumber=${CIRCLE_BUILD_NUM} build-frontend
echo "Packaging incremental build for $CIRCLE_BRANCH" echo "Packaging incremental build for $CIRCLE_BRANCH"
go run build.go -buildNumber=${CIRCLE_BUILD_NUM} package latest go run build.go -goos linux -pkg-arch amd64 -buildNumber=${CIRCLE_BUILD_NUM} package-only latest
fi fi
#!/bin/bash -e
if [ ! -d '/tmp/phantomjs' ]; then
_version="2.1.1"
curl -L https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-$_version-windows.zip > /tmp/phantomjs-win.zip
curl -L https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-$_version-macosx.zip > /tmp/phantomjs-mac.zip
cd /tmp
unzip /tmp/phantomjs-win.zip
unzip /tmp/phantomjs-mac.zip
mkdir -p /tmp/phantomjs/windows /tmp/phantomjs/darwin
cp /tmp/phantomjs-$_version-windows/bin/phantomjs.exe /tmp/phantomjs/windows/phantomjs.exe
cp /tmp/phantomjs-$_version-macosx/bin/phantomjs /tmp/phantomjs/darwin/phantomjs
fi
...@@ -18,8 +18,15 @@ import ( ...@@ -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() { ...@@ -60,45 +67,68 @@ func main() {
} }
} }
func packageWalker(path string, f os.FileInfo, err error) error { func mapPackage(path string, name string, shaBytes []byte) (build, error) {
if f.Name() == "dist" || strings.Contains(f.Name(), "sha256") || strings.Contains(f.Name(), "latest") { log.Printf("Finding package file %s", name)
return nil result := versionRe.FindSubmatch([]byte(name))
} debResult := debVersionRe.FindSubmatch([]byte(name))
log.Printf("Finding package file %s", f.Name())
result := versionRe.FindSubmatch([]byte(f.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)
} } else if (len(debResult) > 0) {
version = string(debResult[1])
shaBytes, err := ioutil.ReadFile(path + ".sha256")
if err != nil {
log.Fatalf("Failed to read sha256 file %v", err)
} }
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", Arch: arch,
Url: "https://s3-us-west-2.amazonaws.com/grafana-releases/master/" + f.Name(), 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
} }
......
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)
}
}
}
...@@ -3,13 +3,20 @@ var path = require('path'); ...@@ -3,13 +3,20 @@ var path = require('path');
module.exports = function(grunt) { module.exports = function(grunt) {
"use strict"; "use strict";
// build, then zip and upload to s3 // build then zip
grunt.registerTask('release', [ grunt.registerTask('release', [
'build', 'build',
'build-post-process', 'build-post-process',
'compress:release' 'compress:release'
]); ]);
// package into archives
grunt.registerTask('package', [
'clean:temp',
'build-post-process',
'compress:release'
]);
grunt.registerTask('build-post-process', function() { grunt.registerTask('build-post-process', function() {
grunt.config('copy.public_to_temp', { grunt.config('copy.public_to_temp', {
expand: true, expand: true,
...@@ -18,7 +25,7 @@ module.exports = function(grunt) { ...@@ -18,7 +25,7 @@ module.exports = function(grunt) {
dest: '<%= tempDir %>/public/', dest: '<%= tempDir %>/public/',
}); });
grunt.config('copy.backend_bin', { grunt.config('copy.backend_bin', {
cwd: 'bin', cwd: 'bin/<%= platform %>-<%= arch %>',
expand: true, expand: true,
src: ['*'], src: ['*'],
options: { mode: true}, options: { mode: true},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment