mirror of
https://github.com/prymitive/karma
synced 2026-05-07 03:26:52 +00:00
197 lines
6.6 KiB
Makefile
197 lines
6.6 KiB
Makefile
NAME := unsee
|
|
VERSION := $(shell git describe --tags --always --dirty='-dev')
|
|
|
|
# Alertmanager instance used when running locally, points to mock data
|
|
MOCK_PATH := $(CURDIR)/mock/0.6.1
|
|
ALERTMANAGER_URI := file://$(MOCK_PATH)
|
|
# Listen port when running locally
|
|
PORT := 8080
|
|
|
|
SOURCES := $(wildcard *.go) $(wildcard */*.go)
|
|
ASSET_SOURCES := $(wildcard assets/*/* assets/*/*/*)
|
|
|
|
GO_BINDATA_MODE := prod
|
|
GIN_DEBUG := false
|
|
ifdef DEBUG
|
|
GO_BINDATA_FLAGS = -debug
|
|
GO_BINDATA_MODE = debug
|
|
GIN_DEBUG = true
|
|
DOCKER_ARGS = -v $(CURDIR)/assets:$(CURDIR)/assets:ro
|
|
endif
|
|
|
|
# detect if jshint is installed
|
|
JSHINT := $(shell which jshint)
|
|
|
|
.DEFAULT_GOAL := $(NAME)
|
|
|
|
.build/deps.ok:
|
|
go get -u github.com/jteeuwen/go-bindata/...
|
|
go get -u github.com/elazarl/go-bindata-assetfs/...
|
|
go get -u github.com/golang/lint/golint
|
|
mkdir -p .build
|
|
touch $@
|
|
|
|
.build/bindata_assetfs.%:
|
|
mkdir -p .build
|
|
rm -f .build/bindata_assetfs.*
|
|
touch $@
|
|
|
|
bindata_assetfs.go: .build/deps.ok .build/bindata_assetfs.$(GO_BINDATA_MODE) $(ASSET_SOURCES)
|
|
go-bindata-assetfs $(GO_BINDATA_FLAGS) -prefix assets -nometadata assets/templates/... assets/static/...
|
|
|
|
$(NAME): .build/deps.ok bindata_assetfs.go $(SOURCES)
|
|
go build -ldflags "-X main.version=$(VERSION)"
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -fr .build $(NAME)
|
|
|
|
.PHONY: run
|
|
run: $(NAME)
|
|
ALERTMANAGER_URI=$(ALERTMANAGER_URI) \
|
|
COLOR_LABELS_UNIQUE="instance cluster" \
|
|
COLOR_LABELS_STATIC="job" \
|
|
DEBUG="$(GIN_DEBUG)" \
|
|
FILTER_DEFAULT="@inhibited=false" \
|
|
PORT=$(PORT) \
|
|
./$(NAME)
|
|
|
|
.PHONY: docker-image
|
|
docker-image: bindata_assetfs.go
|
|
docker build --build-arg VERSION=$(VERSION) -t $(NAME):$(VERSION) .
|
|
|
|
.PHONY: run-docker
|
|
run-docker: docker-image
|
|
@docker rm -f $(NAME) || true
|
|
docker run \
|
|
--name $(NAME) \
|
|
$(DOCKER_ARGS) \
|
|
-v $(MOCK_PATH):$(MOCK_PATH) \
|
|
-e ALERTMANAGER_URI=$(ALERTMANAGER_URI) \
|
|
-e COLOR_LABELS_UNIQUE="instance cluster" \
|
|
-e COLOR_LABELS_STATIC="job" \
|
|
-e DEBUG="$(GIN_DEBUG)" \
|
|
-e PORT=$(PORT) \
|
|
-p $(PORT):$(PORT) \
|
|
$(NAME):$(VERSION)
|
|
|
|
.PHONY: lint
|
|
lint: .build/deps.ok
|
|
@golint ./... | (egrep -v "^vendor/|^bindata_assetfs.go" || true)
|
|
ifneq ($(JSHINT),)
|
|
@$(JSHINT) assets/static/*.js
|
|
endif
|
|
|
|
.PHONY: test
|
|
test: lint bindata_assetfs.go
|
|
@go test -cover `go list ./... | grep -v /vendor/`
|
|
|
|
.build/vendor.ok:
|
|
go get -u github.com/kardianos/govendor
|
|
mkdir -p .build
|
|
touch $@
|
|
|
|
.PHONY: vendor
|
|
vendor: .build/vendor.ok
|
|
govendor remove +u
|
|
govendor fetch +m +e
|
|
|
|
.PHONY: vendor-update
|
|
vendor-update: .build/vendor.ok
|
|
govendor fetch +v
|
|
|
|
#======================== asset helper targets =================================
|
|
|
|
ASSETS_DIR := $(CURDIR)/assets/static/managed
|
|
CDNJS_PREFIX := https://cdnjs.cloudflare.com/ajax/libs
|
|
|
|
%.js:
|
|
$(eval VERSION := $(word 2, $(subst /, ,$@)))
|
|
$(eval DIRNAME := $(shell dirname $@))
|
|
$(eval BASENAME := $(shell basename $@))
|
|
$(eval MAPPATH := $(@:.js=.map))
|
|
$(eval MAPFILE := $(shell basename $(MAPPATH)))
|
|
$(eval OUTPUT := $(ASSETS_DIR)/js/$(VERSION)-$(BASENAME))
|
|
@echo Fetching js asset $@
|
|
@mkdir -p $(ASSETS_DIR)/js
|
|
@curl --fail -so $(OUTPUT) $(CDNJS_PREFIX)/$@ || (rm -f $(OUTPUT) && exit 1)
|
|
@( \
|
|
export MAP=`grep sourceMappingURL $(OUTPUT) | cut -d = -f 2`; \
|
|
(test -n "$$MAP" && echo "+ Fetching js map $${MAP}" && (curl --fail -so $(ASSETS_DIR)/js/$${MAP} $(CDNJS_PREFIX)/$(DIRNAME)/$$MAP || rm -f $(ASSETS_DIR)/js/$${MAP})); \
|
|
(test -z "$$MAP" && echo "+ Fetching js map $(MAPPATH)" && (curl --fail -so $(ASSETS_DIR)/js/$(MAPFILE) $(CDNJS_PREFIX)/$(MAPPATH) || rm -f $(ASSETS_DIR)/js/$(MAPFILE)) || true); \
|
|
) || true
|
|
@echo $(VERSION)-$(shell basename $@) >> $(ASSETS_DIR)/js/assets.txt
|
|
|
|
%.css:
|
|
$(eval VERSION := $(word 2, $(subst /, ,$@)))
|
|
$(eval OUTPUT := $(ASSETS_DIR)/css/$(VERSION)-$(shell basename $@))
|
|
@echo Fetching css asset $@
|
|
@mkdir -p $(ASSETS_DIR)/css
|
|
@curl --fail -so $(OUTPUT) $(CDNJS_PREFIX)/$@ || (rm -f $(OUTPUT) && exit 1)
|
|
@echo $(VERSION)-$(shell basename $@) >> $(ASSETS_DIR)/css/assets.txt
|
|
|
|
font-awesome/4.7.0/fonts/%:
|
|
$(eval OUTPUT := $(ASSETS_DIR)/fonts/$(shell basename $@))
|
|
@echo Fetching fonts asset $@
|
|
@mkdir -p $(ASSETS_DIR)/fonts
|
|
@curl --fail -so $(OUTPUT) $(CDNJS_PREFIX)/$@ || (rm -f $(OUTPUT) && exit 1)
|
|
|
|
.PHONY: clean-assets
|
|
clean-assets:
|
|
@git rm -f $(ASSETS_DIR)/*/* >/dev/null 2>&1 || true
|
|
|
|
.PHONY: assets
|
|
assets: clean-assets
|
|
# jquery, for everything
|
|
assets: jquery/2.2.4/jquery.min.js
|
|
# moment, for timestamp parsing and printing
|
|
assets: moment.js/2.17.1/moment.min.js
|
|
# favico, for adding alert counter to the favico
|
|
assets: favico.js/0.3.10/favico.min.js
|
|
# fontawesome, for ui icons
|
|
assets: font-awesome/4.7.0/css/font-awesome.min.css
|
|
assets: font-awesome/4.7.0/fonts/fontawesome-webfont.eot
|
|
assets: font-awesome/4.7.0/fonts/fontawesome-webfont.svg
|
|
assets: font-awesome/4.7.0/fonts/fontawesome-webfont.ttf
|
|
assets: font-awesome/4.7.0/fonts/fontawesome-webfont.woff
|
|
assets: font-awesome/4.7.0/fonts/fontawesome-webfont.woff2
|
|
assets: font-awesome/4.7.0/fonts/FontAwesome.otf
|
|
# bootstrap & bootstrap switch, for ui
|
|
assets: twitter-bootstrap/3.3.7/js/bootstrap.min.js
|
|
assets: bootswatch/3.3.7/flatly/bootstrap.min.css
|
|
assets: bootstrap-switch/3.3.2/js/bootstrap-switch.min.js
|
|
assets: bootstrap-switch/3.3.2/css/bootstrap3/bootstrap-switch.min.css
|
|
# nprogress, for refresh progress bar
|
|
assets: nprogress/0.2.0/nprogress.min.js
|
|
assets: nprogress/0.2.0/nprogress.min.css
|
|
# tagsinput & typeahead, for filter bar and autocomplete
|
|
assets: bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.min.js
|
|
assets: bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.css
|
|
assets: corejs-typeahead/1.1.1/typeahead.bundle.min.js
|
|
assets: bootstrap-tagsinput/0.8.0/bootstrap-tagsinput-typeahead.css
|
|
# datepicker widget for bootstrap3
|
|
assets: bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js
|
|
assets: bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css
|
|
# multiselect widget for bootstrap3, used for silence form
|
|
assets: bootstrap-select/1.12.2/js/bootstrap-select.min.js
|
|
assets: bootstrap-select/1.12.2/css/bootstrap-select.min.css
|
|
# loaders.css, for animated spinners
|
|
assets: loaders.css/0.1.2/loaders.css.min.js
|
|
assets: loaders.css/0.1.2/loaders.min.css
|
|
# js-cookie, for preference state loading via cookies
|
|
assets: js-cookie/2.1.3/js.cookie.min.js
|
|
# underscore & haml, for template rendering in js
|
|
assets: underscore.js/1.8.3/underscore-min.js
|
|
# masonry, for grid layout
|
|
assets: masonry/4.1.1/masonry.pkgd.min.js
|
|
# copy to clipboard
|
|
assets: clipboard.js/1.5.16/clipboard.min.js
|
|
# sentry client
|
|
assets: raven.js/3.9.1/raven.min.js
|
|
# sha1 function used to generate id from string
|
|
assets: js-sha1/0.4.0/sha1.min.js
|
|
# allows selecting only visible elements
|
|
assets: is-in-viewport/2.4.2/isInViewport.min.js
|
|
assets:
|
|
@git add $(ASSETS_DIR)/*/*
|