This repository has been archived by the owner on Jun 11, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
121 lines (97 loc) · 3.53 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
VERSION ?= `git describe --tags --always --dirty`
GO ?= go
GOTEST ?= $(GO) test
GOHOSTOS ?= $(shell $(GO) env GOHOSTOS)
GOHOSTARCH ?= $(shell $(GO) env GOHOSTARCH)
GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH)
PREFIX ?= $(shell pwd)
FIRST_GOPATH := $(firstword $(subst :, ,$(shell $(GO) env GOPATH)))
GO_LICENSE_DETECTOR ?= $(FIRST_GOPATH)/bin/go-licence-detector
PROMU_VERSION ?= 0.7.0
PROMU := $(FIRST_GOPATH)/bin/promu-$(PROMU_VERSION)
PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz
DOCKER_IMAGE_NAME := swoga/alertmanager-filter
ifeq ($(GOHOSTARCH),amd64)
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin windows))
# Only supported on amd64
test-flags := -race
endif
endif
ifeq ($(strip $(shell git status --porcelain 2>/dev/null)),)
GIT_TREE_STATE=clean
else
GIT_TREE_STATE=dirty
endif
.PHONY: build
build: promu
$(PROMU) build --prefix $(PREFIX) $(PROMU_BINARIES)
.PHONY: promu
promu: $(PROMU)
$(PROMU):
$(eval PROMU_TMP := $(shell mktemp -d))
curl -s -L $(PROMU_URL) | tar -xvzf - -C $(PROMU_TMP)
mkdir -p $(FIRST_GOPATH)/bin
cp $(PROMU_TMP)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM)/promu $(FIRST_GOPATH)/bin/promu-$(PROMU_VERSION)
rm -r $(PROMU_TMP)
.PHONY: build-release
build-release: clean
$(PROMU) crossbuild
$(PROMU) crossbuild tarballs
.PHONY: build-docker
build-docker:
docker build -t $(DOCKER_IMAGE_NAME) .
docker tag $(DOCKER_IMAGE_NAME):latest $(DOCKER_IMAGE_NAME):$(VERSION)
docker tag $(DOCKER_IMAGE_NAME):latest quay.io/$(DOCKER_IMAGE_NAME):latest
docker tag $(DOCKER_IMAGE_NAME):latest quay.io/$(DOCKER_IMAGE_NAME):$(VERSION)
docker tag $(DOCKER_IMAGE_NAME):latest ghcr.io/$(DOCKER_IMAGE_NAME):latest
docker tag $(DOCKER_IMAGE_NAME):latest ghcr.io/$(DOCKER_IMAGE_NAME):$(VERSION)
.PHONY: publish-release
publish-release: check
git push origin $(VERSION)
$(PROMU) release .tarballs
.PHONY: docker-hub
docker-hub:
docker login -u $(DOCKER_HUB_USER) -p $(DOCKER_HUB_PASSWORD)
docker push $(DOCKER_IMAGE_NAME):latest
docker push $(DOCKER_IMAGE_NAME):$(VERSION)
.PHONY: docker-quay
docker-quay:
docker login quay.io -u $(DOCKER_QUAY_USER) -p $(DOCKER_QUAY_PASSWORD)
docker push quay.io/$(DOCKER_IMAGE_NAME):latest
docker push quay.io/$(DOCKER_IMAGE_NAME):$(VERSION)
.PHONY: docker-github
docker-github:
docker login ghcr.io -u $(GITHUB_USER) -p $(GITHUB_TOKEN)
docker push ghcr.io/$(DOCKER_IMAGE_NAME):latest
docker push ghcr.io/$(DOCKER_IMAGE_NAME):$(VERSION)
.PHONY: publish-docker
publish-docker: docker-hub docker-quay docker-github
.PHONY: check
check:
ifeq ($(GIT_TREE_STATE),clean)
$(info ok)
else
$(error git state is not clean)
endif
.PHONY: clean
clean:
rm -rf .build .tarballs
rm -f alertmanager-filter
.PHONY: release
release: check test build-release build-docker publish-release publish-docker
.PHONY: test
test:
$(GOTEST) $(test-flags) -v ./...
.PHONY: go-mod-list-updates
go-mod-list-updates:
$(GO) list -u -m -f '{{if and (not .Indirect) .Update}}{{.}}{{end}}' all
.PHONY: go-licence-detector
go-licence-detector: $(GO_LICENSE_DETECTOR)
$(GO_LICENSE_DETECTOR):
GO111MODULE=off go get go.elastic.co/go-licence-detector
.PHONY: license-notice
license-notice: go-licence-detector
$(GO) list -m -json all | $(GO_LICENSE_DETECTOR) -includeIndirect -overrides .licenses/overrides.json -rules .licenses/rules.json -noticeTemplate .licenses/NOTICE.tmpl -noticeOut NOTICE
.PHONY: prepare-release
prepare-release: license-notice
$(GO) mod tidy