-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
162 lines (126 loc) · 5.67 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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# Copyright (C) 2023 Intergral GmbH
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
.DEFAULT_GOAL := gen-all
PROJECT_ROOT:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
.PHONY: check-proto
check-proto:
ifndef OUT_DIR
$(error OUT_DIR variable was not defined)
endif
ifndef PROTOC_ARGS
$(error PROTOC_ARGS variable was not defined)
endif
ifndef GRPC_PROTOC_ARGS
$(error GRPC_PROTOC_ARGS variable was not defined)
endif
DOCKER_PROTOBUF_IMAGE ?= otel/build-protobuf:latest
PROTOC = docker run --rm -u ${shell id -u} -v${PWD}:${PWD} -w${PWD} ${DOCKER_PROTOBUF_IMAGE} --proto_path=${PWD}
ROOT_DIR=$(shell pwd)
.PHONY: gen-proto
gen-proto: check-proto
rm -Rf $(OUT_DIR)
mkdir -p $(OUT_DIR)
# All proto files need to be processed as proto
$(foreach file, $(shell find $(ROOT_DIR)/deepproto -name '*.proto'), ${PROTOC} ${PROTOC_ARGS} $(file);)
# only proto files with services need to be generated with grpc
$(PROTOC) $(PROTOC_ARGS) $(GRPC_PROTOC_ARGS) $(ROOT_DIR)/deepproto/proto/poll/v1/poll.proto
$(PROTOC) $(PROTOC_ARGS) $(GRPC_PROTOC_ARGS) $(ROOT_DIR)/deepproto/proto/tracepoint/v1/tracepoint.proto
.PHONY: gen-python
gen-python:
OUT_DIR=$(ROOT_DIR)/build/python PROTOC_ARGS=--python_out=$(ROOT_DIR)/build/python GRPC_PROTOC_ARGS=--grpc-python_out=$(ROOT_DIR)/build/python $(MAKE) gen-proto
cp $(ROOT_DIR)/pyproject.toml $(ROOT_DIR)/build/python
cp $(ROOT_DIR)/README_PYTHON.md $(ROOT_DIR)/build/python/README_PYTHON.md
.PHONY: gen-go
gen-go:
OUT_DIR=$(ROOT_DIR)/build/go PROTOC_ARGS=--go_out=$(ROOT_DIR)/build/go GRPC_PROTOC_ARGS=--go-grpc_out=$(ROOT_DIR)/build/go $(MAKE) gen-proto
.PHONY: gen-java
gen-java:
OUT_DIR=$(ROOT_DIR)/build/java/src/main/java PROTOC_ARGS=--java_out=$(ROOT_DIR)/build/java/src/main/java GRPC_PROTOC_ARGS=--grpc-java_out=$(ROOT_DIR)/build/java/src/main/java $(MAKE) gen-proto
cp $(ROOT_DIR)/pom.xml $(ROOT_DIR)/build/java/pom.xml
mvn -U -B -f $(ROOT_DIR)/build/java/pom.xml clean package
.PHONY: install-java
install-java: gen-java
mvn -U -B -f $(ROOT_DIR)/build/java/pom.xml install
.PHONY: gen-all
gen-all:
$(MAKE) gen-go
$(MAKE) gen-python
$(MAKE) gen-java
.PHONY: gen-docs
gen-docs:
docker run --rm -u ${shell id -u} -v $(ROOT_DIR)/docs:/out -v $(ROOT_DIR):/protos pseudomuto/protoc-gen-doc --doc_opt=markdown,tracepoint.md deepproto/proto/tracepoint/v1/tracepoint.proto
docker run --rm -u ${shell id -u} -v $(ROOT_DIR)/docs:/out -v $(ROOT_DIR):/protos pseudomuto/protoc-gen-doc --doc_opt=markdown,poll.md deepproto/proto/poll/v1/poll.proto
docker run --rm -u ${shell id -u} -v $(ROOT_DIR)/docs:/out -v $(ROOT_DIR):/protos pseudomuto/protoc-gen-doc --doc_opt=markdown,common.md deepproto/proto/common/v1/common.proto
docker run --rm -u ${shell id -u} -v $(ROOT_DIR)/docs:/out -v $(ROOT_DIR):/protos pseudomuto/protoc-gen-doc --doc_opt=markdown,resource.md deepproto/proto/resource/v1/resource.proto
.PHONY: gen-mvn-site
gen-mvn-site: gen-java
mkdir -p $(ROOT_DIR)/build/java/src/site/markdown
cp $(ROOT_DIR)/java/site.xml $(ROOT_DIR)/build/java/src/site/site.xml
cp $(ROOT_DIR)/README_JAVA.md $(ROOT_DIR)/build/java/src/site/markdown/README.md
mvn -U -B -f $(ROOT_DIR)/build/java/pom.xml site
.PHONY: check-version
check-version:
ifdef v
VERSION=$(v)
endif
ifdef V
VERSION=$(V)
endif
ifndef VERSION
$(error VERSION argument must be defined. (make rel-python VERSION=0.0.2))
endif
.PHONY: check-python-vars
check-python-vars:
ifndef TWINE_USER
$(error TWINE_USER argument must be defined.)
endif
ifndef TWINE_PASSWORD
$(error TWINE_PASSWORD argument must be defined.)
endif
.PHONY: rel-python
rel-python: check-version check-python-vars gen-python
sed -i "s/VERSION/$(VERSION)/" $(ROOT_DIR)/build/python/pyproject.toml
python -m build $(PROJECT_ROOT)/build/python
python -m twine upload -u $(TWINE_USER) -p $(TWINE_PASSWORD) $(PROJECT_ROOT)/build/python/dist/*
.PHONY: rel-go
rel-go: check-version gen-go
rm -Rf $(PROJECT_ROOT)/go-deep-proto
git submodule update --init
cd $(PROJECT_ROOT)/go-deep-proto; git pull origin master
cp -r $(ROOT_DIR)/build/go/github.com/intergral/go-deep-proto/* $(ROOT_DIR)/go-deep-proto
cd $(PROJECT_ROOT)/go-deep-proto; git config user.name github-actions
cd $(PROJECT_ROOT)/go-deep-proto; git config user.email [email protected]
cd $(PROJECT_ROOT)/go-deep-proto; git add .
cd $(PROJECT_ROOT)/go-deep-proto; git commit -m "Published new api version from $(VERSION)" || echo "No changes, nothing to commit!"
cd $(PROJECT_ROOT)/go-deep-proto; git push -u origin HEAD:master
cd $(PROJECT_ROOT)/go-deep-proto; git tag v$(VERSION)
cd $(PROJECT_ROOT)/go-deep-proto; git push -u origin v$(VERSION)
check-java-env:
ifndef OSS_PASSWORD
$(error OSS_PASSWORD must be defined)
endif
ifndef OSS_USERNAME
$(error OSS_USERNAME must be defined)
endif
ifndef GPG_PASSPHRASE
$(error GPG_PASSPHRASE must be defined)
endif
.PHONY: rel-java
rel-java: check-version check-java-env gen-java
mvn -f $(ROOT_DIR)/build/java/pom.xml versions:set -DnewVersion=$(VERSION) -B -U
mvn -f $(ROOT_DIR)/build/java/pom.xml -s .ci-settings.xml clean deploy -P release-ossrh -B -U
.PHONY: clean
clean:
rm -Rf site _site build