-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathMakefile
More file actions
139 lines (105 loc) · 3.28 KB
/
Copy pathMakefile
File metadata and controls
139 lines (105 loc) · 3.28 KB
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# Copyright (c) Abstract Machines
# SPDX-License-Identifier: Apache-2.0
BUILD_DIR ?= build
SERVICES = agent
DOCKERS = $(addprefix docker_,$(SERVICES))
DOCKERS_DEV = $(addprefix docker_dev_,$(SERVICES))
CGO_ENABLED ?= 0
GOARCH ?= amd64
DOCKER_IMAGE_NAME_PREFIX ?= ghcr.io/absmach
VERSION ?= $(shell git describe --abbrev=0 --tags 2>/dev/null || echo 'v0.0.0')
COMMIT ?= $(shell git rev-parse HEAD)
TIME ?= $(shell date +%F_%T)
MOCKERY = $(GOBIN)/mockery
MOCKERY_VERSION = 3.7.0
define compile_service
CGO_ENABLED=$(CGO_ENABLED) GOOS=$(GOOS) GOARCH=$(GOARCH) GOARM=$(GOARM) \
go build -ldflags "-s -w \
-X 'github.com/absmach/agent.BuildTime=$(TIME)' \
-X 'github.com/absmach/agent.Version=$(VERSION)' \
-X 'github.com/absmach/agent.Commit=$(COMMIT)'" \
-o ${BUILD_DIR}/magistrala-$(1) cmd/main.go
endef
define make_docker
$(eval svc=$(subst docker_,,$(1)))
docker build \
--no-cache \
--build-arg SVC=$(svc) \
--build-arg GOARCH=$(GOARCH) \
--build-arg GOARM=$(GOARM) \
--build-arg VERSION=$(VERSION) \
--build-arg COMMIT=$(COMMIT) \
--build-arg TIME=$(TIME) \
--tag=$(DOCKER_IMAGE_NAME_PREFIX)/$(svc) \
-f docker/Dockerfile .
endef
define make_docker_dev
$(eval svc=$(subst docker_dev_,,$(1)))
docker build \
--no-cache \
--build-arg SVC=$(svc) \
--tag=$(DOCKER_IMAGE_NAME_PREFIX)/$(svc) \
-f docker/Dockerfile.dev ./build
endef
all: ui_prod $(SERVICES)
arm: GOARCH=arm64
arm: all
.PHONY: all arm $(SERVICES) dockers dockers_dev ui ui_prod ui_run ui_clean latest release mocks
clean:
rm -rf ${BUILD_DIR}
rm -rf ui/dist
ui:
cd ui && npm install && npm run dev
ui_prod:
cd ui && npm ci && npm run build
ui_run:
cd ui && npm run dev
ui_clean:
rm -rf ui/dist ui/node_modules
install:
cp ${BUILD_DIR}/* $(GOBIN)
test: ui_prod
go test -v -race -count 1 -tags test $(shell go list ./... | grep -v 'vendor\|cmd')
$(MOCKERY):
@mkdir -p $(GOBIN)
@mkdir -p mockery-tmp
@echo ">> downloading mockery $(MOCKERY_VERSION)..."
@curl -sL https://github.com/vektra/mockery/releases/download/v$(MOCKERY_VERSION)/mockery_$(MOCKERY_VERSION)_Linux_x86_64.tar.gz | tar -xz -C mockery-tmp
@mv mockery-tmp/mockery $(GOBIN)
@rm -r mockery-tmp
mocks: $(MOCKERY)
@$(MOCKERY) --config ./tools/config/.mockery.yaml
$(SERVICES): ui_prod
$(call compile_service,$(@))
$(DOCKERS):
$(call make_docker,$(@),$(GOARCH))
$(DOCKERS_DEV):
$(call make_docker_dev,$(@))
dockers: $(DOCKERS)
dockers_dev: $(DOCKERS_DEV)
define docker_push
for svc in $(SERVICES); do \
docker push $(DOCKER_IMAGE_NAME_PREFIX)/$$svc:$(1); \
done
endef
changelog:
git log $(shell git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s"
latest: dockers
$(call docker_push,latest)
release:
$(eval version = $(shell git describe --abbrev=0 --tags))
git checkout $(version)
$(MAKE) dockers
for svc in $(SERVICES); do \
docker tag $(DOCKER_IMAGE_NAME_PREFIX)/$$svc $(DOCKER_IMAGE_NAME_PREFIX)/$$svc:$(version); \
done
$(call docker_push,$(version))
run_provision: provision
provision:
@bash scripts/provision.sh
run:
docker compose -p magistrala_agent -f docker/docker-compose.yml --env-file docker/.env up -d
stop:
docker compose -p magistrala_agent -f docker/docker-compose.yml --env-file docker/.env down
clean_volumes:
docker compose -p magistrala_agent -f docker/docker-compose.yml --env-file docker/.env down -v