-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
293 lines (236 loc) · 13.9 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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
export
# ---------------- BEFORE RELEASE ----------------
# 1 - Update Version Number
# 2 - Update RELEASE.md
# 3 - make update_setup
# -------------- Release Process Steps --------------
# 1 - Get Credentials from devops-accounts repo
# 2 - Create Release Branch and push
# 3 - Create Release Tag and push
# 4 - GitHub Release
# 5 - PyPI Release
########################################################
# Variables
########################################################
# MUST BE THE SAME AS API in Mayor and Minor Version Number
# example: API 2.9.0 --> Client 2.9.X
ONDEWO_VTSI_API_VERSION=7.0.0
ONDEWO_NLU_API_GIT_BRANCH=tags/5.0.0
ONDEWO_S2T_API_GIT_BRANCH=tags/5.7.0
ONDEWO_T2S_API_GIT_BRANCH=tags/5.3.0
ONDEWO_SIP_API_GIT_BRANCH=tags/5.1.0
ONDEWO_NLU_DIR=ondewo-nlu-api
ONDEWO_S2T_DIR=ondewo-s2t-api
ONDEWO_T2S_DIR=ondewo-t2s-api
ONDEWO_SIP_DIR=ondewo-sip-api
# You need to setup an access token at https://github.com/settings/tokens - permissions are important
GITHUB_GH_TOKEN?=ENTER_YOUR_TOKEN_HERE
CURRENT_RELEASE_NOTES=`cat RELEASE.md \
| sed -n '/Release ONDEWO VTSI API ${ONDEWO_VTSI_API_VERSION}/,/\*\*/p'`
GH_REPO="https://github.com/ondewo/ondewo-vtsi-api"
DEVOPS_ACCOUNT_GIT="ondewo-devops-accounts"
DEVOPS_ACCOUNT_DIR="./${DEVOPS_ACCOUNT_GIT}"
IMAGE_UTILS_NAME=ondewo-vtsi-api-utils:${ONDEWO_VTSI_API_VERSION}
.DEFAULT_GOAL := help
########################################################
# ONDEWO Standard Make Targets
########################################################
setup_developer_environment_locally: install_python_requirements install_precommit_hooks install_nvm ## Sets up local development environment !! Forcefully closes current terminal
install_nvm: ## Install NVM, node and npm !! Forcefully closes current terminal
@curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
@sh install_nvm.sh
$(eval PID:=$(shell ps -ft $(ps | tail -1 | cut -c 8-13) | head -2 | tail -1 | cut -c 1-8))
@node --version & npm --version || (kill -KILL ${PID})
install_python_requirements: ## Installs python requirements flak8 and mypy
wget -q https://raw.githubusercontent.com/ondewo/ondewo-vtsi-client-python/master/requirements-dev.txt -O requirements-dev.txt
pip install -r requirements-dev.txt
wget -q https://raw.githubusercontent.com/ondewo/ondewo-vtsi-client-python/master/requirements.txt -O requirements.txt
pip install -r requirements.txt
wget -q https://raw.githubusercontent.com/ondewo/ondewo-vtsi-client-python/master/mypy.ini -O mypy.ini
wget -q https://raw.githubusercontent.com/ondewo/ondewo-vtsi-client-python/master/.flake8 -O .flake8
install_precommit_hooks: ## Installs pre-commit hooks and sets them up for the ondewo-vtsi-api repo
pip install pre-commit
pre-commit install
pre-commit install --hook-type commit-msg
precommit_hooks_run_all_files: ## Runs all pre-commit hooks on all files and not just the changed ones
pre-commit run --all-file
help: ## Print usage info about help targets
# (first comment after target starting with double hashes ##)
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' Makefile | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-40s\033[0m %s\n", $$1, $$2}'
makefile_chapters: ## Shows all sections of Makefile
@echo `cat Makefile| grep "########################################################" -A 1 | grep -v "########################################################"`
TEST:
@echo ${GITHUB_GH_TOKEN}
@echo ${CURRENT_RELEASE_NOTES}
githubio_logic_pre:
$(eval REPO_NAME:= $(shell echo ${GH_REPO} | cut -d "-" -f 2 ))
$(eval REPO_NAME_UPPER:= $(shell echo ${GH_REPO} | cut -d "-" -f 2 | sed -e 's/\(.*\)/\U\1/'))
$(eval DOCS_DIR:=ondewo.github.io/docs/ondewo-${REPO_NAME}-api/${ONDEWO_VTSI_API_VERSION})
@rm -rf ${DOCS_DIR}
@mkdir "${DOCS_DIR}"
@cp docs/* ${DOCS_DIR}
@sed -i "s/h1>Protocol Documentation/h1>${REPO_NAME_UPPER} ${ONDEWO_VTSI_API_VERSION} Documentation/" ${DOCS_DIR}/index.html
githubio_logic: | githubio_logic_pre
$(eval REPO_NAME:= $(shell echo ${GH_REPO} | cut -d "-" -f 2 ))
$(eval REPO_NAME_UPPER:= $(shell echo ${GH_REPO} | cut -d "-" -f 2 | sed -e 's/\(.*\)/\U\1/'))
@git branch | grep "*" | grep -q "master" || (echo "Not on master branch" & rm -rf ondewo.github.io && exit 1)
@! cat ondewo.github.io/data.js | sed -n "/name\: '${REPO_NAME_UPPER}'/,/end\: ''/p" | grep -q "number: '${ONDEWO_VTSI_API_VERSION}'" || (echo "Already Released" && exit 1)
$(eval VERSION_LINE:= $(shell cat -n ondewo.github.io/data.js | sed -n "/name\: '${REPO_NAME_UPPER}'/,/end\: ''/p" | grep "versions: " -A 1 | tail -1 | grep -o -E '[0-9]+' | head -1 | sed -e 's/^0\+//'))
$(eval TEMP_TEXT:= $(shell cat ondewo.github.io/script_object.txt | sed -e "s/VERSION/${ONDEWO_VTSI_API_VERSION}/g" -e "s/TECHNOLOGY/${REPO_NAME}/g"))
@sed -i "${VERSION_LINE} i ${TEMP_TEXT}" ondewo.github.io/data.js
@cd ondewo.github.io && npx prettier -w --single-quote data.js
$(eval DOCS_DIR:=ondewo.github.io/docs/ondewo-${REPO_NAME}-api/${ONDEWO_VTSI_API_VERSION})
@rm -rf ${DOCS_DIR}
@mkdir "${DOCS_DIR}"
@cp docs/* ${DOCS_DIR}
@sed -i "s/h1>Protocol Documentation/h1>${REPO_NAME_UPPER} ${ONDEWO_VTSI_API_VERSION} Documentation/" ${DOCS_DIR}/index.html
$(eval HEADER_LINE:= $(shell cat ${DOCS_DIR}/index.html | grep -n "${REPO_NAME_UPPER} ${ONDEWO_VTSI_API_VERSION} Documentation" | grep -o -E '[0-9]+' | head -1 | sed -e 's/^0\+//'))
$(eval TEMP_IMG:= $(shell cat ondewo.github.io/script_image.txt))
$(eval TEMP_CALC:= $(shell expr ${HEADER_LINE} ))
sed -i '${TEMP_CALC} i ${TEMP_IMG}' ${DOCS_DIR}/index.html
head -30 ${DOCS_DIR}/index.html
cat ondewo.github.io/data.js | sed -n "/name\: '${REPO_NAME_UPPER}'/,/end\: ''/p"
@git -C ondewo.github.io status
@git -C ondewo.github.io add data.js
@git -C ondewo.github.io add docs
@git -C ondewo.github.io status
@git -C ondewo.github.io commit -m "Added ${REPO_NAME} Documentation for ${ONDEWO_VTSI_API_VERSION}"
@git -C ondewo.github.io push
update_githubio:
@rm -rf ondewo.github.io
@git clone git@github.com:ondewo/ondewo.github.io.git
@make githubio_logic || (echo "Done")
@rm -rf ondewo.github.io
########################################################
# Repo Specific Make Targets
########################################################
# Submodules
build: init_submodules checkout_defined_submodule_versions ## Checks out and copys submodule protos to ondewo directory
init_submodules: ## Initialize submodules
@echo "START initializing submodules ..."
git submodule update --init --recursive
@echo "DONE initializing submodules"
checkout_defined_submodule_versions: ## Update submodule versions
@echo "START checking out submodules ..."
git -C ${ONDEWO_T2S_DIR} fetch --all
git -C ${ONDEWO_T2S_DIR} checkout ${ONDEWO_T2S_API_GIT_BRANCH}
git -C ${ONDEWO_NLU_DIR} fetch --all
git -C ${ONDEWO_NLU_DIR} checkout ${ONDEWO_NLU_API_GIT_BRANCH}
git -C ${ONDEWO_S2T_DIR} fetch --all
git -C ${ONDEWO_S2T_DIR} checkout ${ONDEWO_S2T_API_GIT_BRANCH}
git -C ${ONDEWO_SIP_DIR} fetch --all
git -C ${ONDEWO_SIP_DIR} checkout ${ONDEWO_SIP_API_GIT_BRANCH}
if [ -d google ]; then rm -Rf google; fi
if [ -d ondewo/nlu ]; then rm -Rf ondewo/nlu; fi
if [ -d ondewo/s2t ]; then rm -Rf ondewo/s2t; fi
if [ -d ondewo/t2s ]; then rm -Rf ondewo/t2s; fi
if [ -d ondewo/sip ]; then rm -Rf ondewo/sip; fi
if [ -d ondewo/qa ]; then rm -Rf ondewo/sip; fi
cp -r "${ONDEWO_NLU_DIR}/google" google
cp -r "${ONDEWO_NLU_DIR}/ondewo/nlu" ondewo
cp -r "${ONDEWO_NLU_DIR}/ondewo/qa" ondewo
cp -r "${ONDEWO_T2S_DIR}/ondewo/t2s" ondewo
cp -r "${ONDEWO_S2T_DIR}/ondewo/s2t" ondewo
cp -r "${ONDEWO_SIP_DIR}/ondewo/sip" ondewo
########################################################
# Release
release: create_release_branch create_release_tag build_and_release_to_github_via_docker ## Automate the entire release process
@echo "Release Finished"
create_release_branch: ## Create Release Branch and push it to origin
git checkout -b "release/${ONDEWO_VTSI_API_VERSION}"
git push -u origin "release/${ONDEWO_VTSI_API_VERSION}"
create_release_tag: ## Create Release Tag and push it to origin
git tag -a ${ONDEWO_VTSI_API_VERSION} -m "release/${ONDEWO_VTSI_API_VERSION}"
git push origin ${ONDEWO_VTSI_API_VERSION}
login_to_gh: ## Login to Github CLI with Access Token
echo $(GITHUB_GH_TOKEN) | gh auth login -p ssh --with-token
build_gh_release: ## Generate Github Release with CLI
gh release create --repo $(GH_REPO) "$(ONDEWO_VTSI_API_VERSION)" -n "$(CURRENT_RELEASE_NOTES)" -t "Release ${ONDEWO_VTSI_API_VERSION}"
release_all_clients:
@make release_python_client || (echo "Already released ${ONDEWO_VTSI_API_VERSION} of Python Client")
@make release_angular_client || (echo "Already released ${ONDEWO_VTSI_API_VERSION} of Angular Client")
@make release_nodejs_client || (echo "Already released ${ONDEWO_VTSI_API_VERSION} of Nodejs Client")
@make release_typescript_client || (echo "Already released ${ONDEWO_VTSI_API_VERSION} of Typescript Client")
@make release_js_client || (echo "Already released ${ONDEWO_VTSI_API_VERSION} of JS Client")
@echo "End releasing all clients"
GENERIC_CLIENT?=
RELEASEMD?=
GENERIC_RELEASE_NOTES="\n***************** \n\\\#\\\# Release ONDEWO VTSI REPONAME Client ${ONDEWO_VTSI_API_VERSION} \n \
\n\\\#\\\#\\\# Improvements \n \
* Tracking API Version [${ONDEWO_VTSI_API_VERSION}](https://github.com/ondewo/ondewo-vtsi-api/releases/tag/${ONDEWO_VTSI_API_VERSION}) ( [Documentation](https://ondewo.github.io/ondewo-vtsi-api/) ) \n"
release_client:
$(eval REPO_NAME:= $(shell echo ${GENERIC_CLIENT} | cut -d "-" -f 4 | cut -d '.' -f 1))
$(eval REPO_DIR:= $(shell echo "ondewo-vtsi-client-${REPO_NAME}"))
$(eval UPPER_REPO_NAME:= $(shell echo ${REPO_NAME} | sed 's/.*/\u&/'))
# Get newest Proto-Compiler Version
$(eval PROTO_COMPILER:= $(shell curl https://api.github.com/repos/ondewo/ondewo-proto-compiler/tags | grep "\"name\"" | head -1 | cut -d '"' -f 4))
# Clone Repo
rm -rf ${REPO_DIR}
rm -f build_log_${REPO_NAME}.txt
@echo ${GENERIC_RELEASE_NOTES} > temp-notes && sed -i 's/\\//g' temp-notes && sed -i 's/REPONAME/${UPPER_REPO_NAME}/g' temp-notes
git clone ${GENERIC_CLIENT}
# Check if Client is already uptodate with API Version
@! git -C ${REPO_DIR} branch -a | grep -q ${ONDEWO_VTSI_API_VERSION} || (echo "Already Released ${ONDEWO_VTSI_API_VERSION} \n\n\n" && rm -rf ${REPO_DIR} && rm -f temp-notes && exit 1)
# Change Version Number and RELEASE NOTES
cd ${REPO_DIR} && sed -i -e '/Release History/r ../temp-notes' ${RELEASEMD}
cd ${REPO_DIR} && head -20 ${RELEASEMD}
cd ${REPO_DIR} && sed -i -e 's/ONDEWO_VTSI_VERSION.*=.*[0-9]*.[0-9]*.[0-9]/ONDEWO_VTSI_VERSION = ${ONDEWO_VTSI_API_VERSION}/' Makefile
cd ${REPO_DIR} && sed -i -e 's/ONDEWO_PROTO_COMPILER_GIT_BRANCH.*=.*tags\/[0-9]*.[0-9]*.[0-9]/ONDEWO_PROTO_COMPILER_GIT_BRANCH=tags\/${PROTO_COMPILER}/' Makefile
cd ${REPO_DIR} && sed -i -e 's/VTSI_API_GIT_BRANCH=tags\/[0-9]*.[0-9]*.[0-9]/VTSI_API_GIT_BRANCH=tags\/${ONDEWO_VTSI_API_VERSION}/' Makefile && head -30 Makefile
# Build new code
make -C ${REPO_DIR} ondewo_release | tee build_log_${REPO_NAME}.txt
make -C ${REPO_DIR} TEST
# Remove everything from Release
sudo rm -rf ${REPO_DIR}
rm -f temp-notes
PYTHON_CLIENT="git@github.com:ondewo/ondewo-vtsi-client-python.git"
release_python_client:
@echo "Start releasing Python Client"
make release_client GENERIC_CLIENT=${PYTHON_CLIENT} RELEASEMD="RELEASE.md"
@echo "End releasing Python Client \n \n \n"
NODEJS_CLIENT="git@github.com:ondewo/ondewo-vtsi-client-nodejs.git"
release_nodejs_client:
@echo "Start releasing Nodejs Client"
make release_client GENERIC_CLIENT=${NODEJS_CLIENT} RELEASEMD="src/RELEASE.md"
@echo "End releasing Nodejs Client \n \n \n"
TYPESCRIPT_CLIENT="git@github.com:ondewo/ondewo-vtsi-client-typescript.git"
release_typescript_client:
@echo "Start releasing Typescript Client"
make release_client GENERIC_CLIENT=${TYPESCRIPT_CLIENT} RELEASEMD="src/RELEASE.md"
@echo "End releasing Typescript Client \n \n \n"
ANGULAR_CLIENT="git@github.com:ondewo/ondewo-vtsi-client-angular.git"
release_angular_client:
@echo "Start releasing Angular Client"
make release_client GENERIC_CLIENT=${ANGULAR_CLIENT} RELEASEMD="src/RELEASE.md"
@echo "End releasing Angular Client \n \n \n"
JS_CLIENT="git@github.com:ondewo/ondewo-vtsi-client-js.git"
release_js_client:
@echo "Start releasing Js Client"
make release_client GENERIC_CLIENT=${JS_CLIENT} RELEASEMD="src/RELEASE.md"
@echo "End releasing Js Client \n \n \n"
########################################################
# GITHUB
build_and_release_to_github_via_docker: build_utils_docker_image release_to_github_via_docker_image ## Release automation for building and releasing on GitHub via a docker image
build_utils_docker_image: ## Build utils docker image
docker build -f Dockerfile.utils -t ${IMAGE_UTILS_NAME} .
push_to_gh: login_to_gh build_gh_release
@echo 'Released to Github'
release_to_github_via_docker_image: ## Release to Github via docker
docker run --rm \
-e GITHUB_GH_TOKEN=${GITHUB_GH_TOKEN} \
${IMAGE_UTILS_NAME} make push_to_gh
########################################################
# DEVOPS-ACCOUNTS
ondewo_release: spc clone_devops_accounts run_release_with_devops ## Release with credentials from devops-accounts repo
@rm -rf ${DEVOPS_ACCOUNT_GIT}
clone_devops_accounts: ## Clones devops-accounts repo
if [ -d $(DEVOPS_ACCOUNT_GIT) ]; then rm -Rf $(DEVOPS_ACCOUNT_GIT); fi
git clone git@bitbucket.org:ondewo/${DEVOPS_ACCOUNT_GIT}.git
run_release_with_devops:
$(eval info:= $(shell cat ${DEVOPS_ACCOUNT_DIR}/account_github.env | grep GITHUB_GH & cat ${DEVOPS_ACCOUNT_DIR}/account_pypi.env | grep PYPI_USERNAME & cat ${DEVOPS_ACCOUNT_DIR}/account_pypi.env | grep PYPI_PASSWORD))
make release $(info)
spc: ## Checks if the Release Branch and Tag already exist
$(eval filtered_branches:= $(shell git branch --all | grep "release/${ONDEWO_VTSI_API_VERSION}"))
$(eval filtered_tags:= $(shell git tag --list | grep "${ONDEWO_VTSI_API_VERSION}"))
@if test "$(filtered_branches)" != ""; then echo "-- Test 1: Branch exists!!" & exit 1; else echo "-- Test 1: Branch is fine";fi
@if test "$(filtered_tags)" != ""; then echo "-- Test 2: Tag exists!!" & exit 1; else echo "-- Test 2: Tag is fine";fi