travis build/release, makefile

This commit is contained in:
Thomas Skowron
2016-10-05 10:24:05 +02:00
parent 319c6ef85b
commit 5df86f8a29
5 changed files with 49 additions and 148 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
build/

27
.travis.yml Normal file
View File

@ -0,0 +1,27 @@
language: go
go:
- 1.7
script:
- make build
- make test
before_deploy: make release-build
deploy:
provider: releases
api_key:
secure: Qa1P/aaFUOfSkkolxDg8848GRTgE9CKT/hYMJq11dz0zbmdvyCqMUzsaLuFeeYEwvyvZ6hlCarVopt2+6o/jbJZ8xcTncujXAqfxM6dtf9UoCDUwDtCu8OJOe/RgSm+vfcu3dKGKmOa70wP5Y2nKVaaIv76nXbqpt1nlsuJHv/5Vh3FiNdgAKautmhT5lFjJoFgPafFMAsBJGsqfivxJCi7B7Qt+a+OulR4n3eMMwANtqFOgu405QhpQNHbITLZVCRcBd++BWx00Q0tDUgw5seCzK57dzqPV6EUCbAp0Flf3GcITVg03YVdJ05KFp6I2EWBhpkUaYeC0/IBDFx7y675RcoJSyUjTheyoJ5eHxywkv4GS7ygkhOkux8Fg7JPMULaDrMAEW7z7+wuFGClfOCbOWX4Yf3zwOPc2SclHJ5d69LvsJOIZepBgW5H7Erj+pmfISGteCpJVSrGdH62ztNmzfE5PcJUAozdthEcoZIUea5K5b6VEzZbv5N+wy/Do3FU8yCN/K4JJk+pFq4DwSCj02bCA6Y/YffNvybcerZMDGcA8FxrXlDMDILfE+ZXRjUeomUY+8WkQRRzVxroGWV9SHV5H/KTVSRmNLbBiT7561Y3SE0JR+yt0Awrjamaaki0EGSrkaDYQCIYXU9Yr7JZFl1gtKUP0XSA+17zuMo0=
file:
- build/nsq_exporter_darwin_amd64
- build/nsq_exporter_freebsd_386
- build/nsq_exporter_freebsd_amd64
- build/nsq_exporter_linux_386
- build/nsq_exporter_linux_amd64
- build/nsq_exporter_linux_arm
- build/nsq_exporter_linux_arm64
- build/nsq_exporter_windows_386.exe
- build/nsq_exporter_windows_amd64.exe
on:
repo: lovoo/nsq_exporter
tags: true

View File

@ -1,4 +1,4 @@
Copyright (c) 2015, LOVOO GmbH Copyright (c) 2015-2016, LOVOO GmbH
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without

View File

@ -1,18 +1,22 @@
# Copyright 2015 The Prometheus Authors BUILD_DIR = build
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
VERSION := 0.1.0 GO = go
TARGET := nsq_exporter GOX = gox
GOFLAGS := -ldflags "-X main.Version=$(VERSION)" GOX_ARGS = -output="$(BUILD_DIR)/{{.Dir}}_{{.OS}}_{{.Arch}}" -osarch="linux/amd64 linux/386 linux/arm linux/arm64 darwin/amd64 freebsd/amd64 freebsd/386 windows/386 windows/amd64"
include Makefile.COMMON .PHONY: build
build:
$(GO) build -o $(BUILD_DIR)/nsq_exporter .
.PHONY: clean
clean:
rm -R $(BUILD_DIR)/* || true
.PHONY: test
test:
$(GO) test ./...
.PHONY: release-build
release-build:
@go get -u github.com/mitchellh/gox
@$(GOX) $(GOX_ARGS) github.com/lovoo/nsq_exporter

View File

@ -1,131 +0,0 @@
# Copyright 2015 The Prometheus Authors
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# THE AUTHORITATIVE VERSION OF THIS MAKEFILE LIVES IN:
#
# https://github.com/prometheus/utils
#
# PLEASE MAKE ANY CHANGES THERE AND PROPAGATE THEM TO ALL PROMETHEUS
# REPOSITORIES THAT ARE USING THIS MAKEFILE.
#
# This file provides common Makefile infrastructure for several Prometheus
# components. This includes make tasks for downloading Go, setting up a
# self-contained build environment, fetching Go dependencies, building
# binaries, running tests, and doing release management. This file is intended
# to be included from a project's Makefile, which needs to define the following
# variables, at a minimum:
#
# * VERSION - The current version of the project in question.
# * TARGET - The desired name of the built binary.
#
# Many of the variables defined below are defined conditionally (using '?'),
# which allows the project's main Makefile to override any of these settings, if
# needed. See also:
#
# https://www.gnu.org/software/make/manual/html_node/Flavors.html#Flavors.
#
# The including Makefile may define any number of extra targets that are
# specific to that project.
VERSION ?= $(error VERSION not set in including Makefile)
TARGET ?= $(error TARGET not set in including Makefile)
SRC ?= $(shell find . -type f -name "*.go" ! -path "./.build/*")
GOOS ?= $(shell uname | tr A-Z a-z)
GOARCH ?= $(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m)))
GO_VERSION ?= 1.5.3
GOPATH ?= $(CURDIR)/.build/gopath
ROOTPKG ?= github.com/prometheus/$(TARGET)
SELFLINK ?= $(GOPATH)/src/$(ROOTPKG)
# Check for the correct version of go in the path. If we find it, use it.
# Otherwise, prepare to build go locally.
ifeq ($(shell command -v "go" >/dev/null && go version | sed -e 's/^[^0-9.]*\([0-9.]*\).*/\1/'), $(GO_VERSION))
GOCC ?= $(shell command -v "go")
GOFMT ?= $(shell command -v "gofmt")
GO ?= GOPATH=$(GOPATH) $(GOCC)
else
GOURL ?= https://golang.org/dl
GOPKG ?= go$(GO_VERSION).$(GOOS)-$(GOARCH).tar.gz
GOROOT ?= $(CURDIR)/.build/go$(GO_VERSION)
GOCC ?= $(GOROOT)/bin/go
GOFMT ?= $(GOROOT)/bin/gofmt
GO ?= GOPATH=$(GOPATH) GOROOT=$(GOROOT) $(GOCC)
endif
# Use vendored dependencies if available. Otherwise try to download them.
ifneq (,$(wildcard vendor))
DEPENDENCIES := $(shell find vendor/ -type f -iname '*.go')
GO := GO15VENDOREXPERIMENT=1 $(GO)
else
DEPENDENCIES := dependencies-stamp
endif
# Never honor GOBIN, should it be set at all.
unexport GOBIN
SUFFIX ?= $(GOOS)-$(GOARCH)
BINARY ?= $(TARGET)
ARCHIVE ?= $(TARGET)-$(VERSION).$(SUFFIX).tar.gz
default: $(BINARY)
$(BINARY): $(GOCC) $(SRC) $(DEPENDENCIES) Makefile Makefile.COMMON | $(SELFLINK)
cd $(SELFLINK) && $(GO) build $(GOFLAGS) -o $@
.PHONY: archive
archive: $(ARCHIVE)
$(ARCHIVE): $(BINARY)
tar -czf $@ $<
.PHONY: tag
tag:
git tag $(VERSION)
git push --tags
.PHONY: test
test: $(GOCC) $(DEPENDENCIES) | $(SELFLINK)
cd $(SELFLINK) && $(GO) test $$($(GO) list ./... | grep -v /vendor/)
.PHONY: format
format: $(GOCC)
find . -iname '*.go' | egrep -v "^\./\.build|./generated|\./vendor|\.(l|y)\.go" | xargs -n1 $(GOFMT) -w -s=true
.PHONY: clean
clean:
rm -rf $(BINARY) $(ARCHIVE) .build *-stamp
$(GOCC):
@echo Go version $(GO_VERSION) required but not found in PATH.
@echo About to download and install go$(GO_VERSION) to $(GOROOT)
@echo Abort now if you want to manually install it system-wide instead.
@echo
@sleep 5
mkdir -p .build
# The archive contains a single directory called 'go/'.
curl -L $(GOURL)/$(GOPKG) | tar -C .build -xzf -
rm -rf $(GOROOT)
mv .build/go $(GOROOT)
$(SELFLINK):
mkdir -p $(dir $@)
ln -s $(CURDIR) $@
# Download dependencies if project doesn't vendor them.
dependencies-stamp: $(GOCC) $(SRC) | $(SELFLINK)
$(GO) get -d
touch $@