forked from CiscoTestAutomation/genielibs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
242 lines (213 loc) · 8.25 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
################################################################################
# #
# Cisco Systems Proprietary Software #
# Not to be distributed without consent from Test Technology #
# Cisco Systems, Inc. #
# #
################################################################################
# Genie Libs Makefile
#
# Author:
# Siming Yuan (siyuan@cisco.com) - CSG
# Jean-Benoit Aubin (jeaubin@cisco.com) - CSG
#
# Support:
# python-core@cisco.com
#
# Version:
# v2.1
#
# Date:
# April 2018
#
# About This File:
# This script will build individual Genie libs modules into Python PyPI packages.
# Make sure all requirements are met before adding new package names to
# PACKAGES variable.
#
# Requirements:
# 1. Module name is the same as package name.
# 2. setup.py file is stored within the module folder
################################################################################
# Variables
PKG_NAME = genie.libs
BUILD_DIR = $(shell pwd)/__build__
DIST_DIR = $(BUILD_DIR)/dist
BUILD_CMD = python setup.py bdist_wheel --dist-dir=$(DIST_DIR)
PROD_USER = pyadm@pyats-ci
PROD_PKGS = /auto/pyats/packages/cisco-shared
PROD_SCRIPTS = /auto/pyats/bin
TESTCMD = runAll
WATCHERS = asg-genie-dev@cisco.com
HEADER = [Watchdog]
PYPIREPO = pypitest
PYTHON = python
PYLINT_CMD = pylintAll
CYTHON_CMD = compileAll
# Development pkg requirements
RELATED_PKGS = genie.libs.conf genie.libs.ops genie.libs.robot genie.libs.sdk
DEPENDENCIES = restview psutil Sphinx wheel asynctest
DEPENDENCIES += setproctitle sphinx-rtd-theme
DEPENDENCIES += pip-tools Cython requests
# Internal variables.
# (note - build examples & templates last because it will fail uploading to pypi
# due to duplicates, and we'll for now accept that error)
PYPI_PKGS = conf ops robot sdk
ALL_PKGS = $(PYPI_PKGS)
.PHONY: help docs distribute_docs clean check devnet\
develop undevelop distribute test install_build_deps
uninstall_build_deps $(ALL_PKGS)
help:
@echo "Please use 'make <target>' where <target> is one of"
@echo ""
@echo " --- common actions ---"
@echo ""
@echo " check check setup.py content"
@echo " clean remove the build directory ($(BUILD_DIR))"
@echo " help display this help"
@echo " test run all unittests in an efficient manner"
@echo " develop set all package to development mode"
@echo " undevelop unset the above development mode"
@echo " devnet Build DevNet package."
@echo " install_build_deps install pyats-distutils"
@echo " uninstall_build_deps remove pyats-distutils"
@echo "compile Compile all python modules to c"
@echo "coverage_all Run code coverage on all test files"
@echo "pylint_all Run python linter on all python modules"
@echo ""
@echo " --- build all targets ---"
@echo ""
@echo " all make all available pyATS packages"
@echo ""
@echo " --- build specific targets ---"
@echo ""
@echo " conf build genie.libs.conf package"
@echo " ops build genie.libs.ops package"
@echo " sdk build genie.libs.sdk package"
@echo " robot build genie.libs.robot package"
@echo ""
@echo " --- distributions to production environment ---"
@echo ""
@echo " distribute distribute built pkgs to production server"
@echo ""
@echo " --- redirects ---"
@echo " docs create all documentation locally. This the same as"
@echo " running 'make docs' in ./docs/"
@echo " distribute_docs release local documentation to website. This is"
@echo " the same as running 'make distribute' in ./docs/"
@echo ""
@echo " --- build arguments ---"
@echo " DEVNET=true build for devnet style (cythonized, no ut)"
@echo " INCLUDE_TESTS=true build include unittests in cythonized pkgs"
compile:
@echo ""
@echo "Compiling to C code"
@echo --------------------------
@$(CYTHON_CMD) --exclude *iosxe/ip_precedence/verify.py *iosxe/udp/get.py
@echo "Done Compiling"
@echo ""
coverage_all:
@echo ""
@echo "Running code coverage on all unittests"
@echo ---------------------------------------
@$(TESTCMD) --path tests/ --coverage --no-refresh
@echo ""
pylint_all:
@echo ""
@echo "Running Pylint on all modules"
@echo "-----------------------------"
@$(PYLINT_CMD)
@echo "Done linting"
@echo ""
devnet: all
@echo "Completed building DevNet packages"
@echo ""
install_build_deps:
@echo "nothing to do"
uninstall_build_deps:
@echo "nothing to do"
docs:
@echo "No documentation to build for genie.libs"
clean:
@echo ""
@echo "--------------------------------------------------------------------"
@echo "Removing make directory: $(BUILD_DIR)"
@rm -rf $(BUILD_DIR)
@$(foreach dir,$(ALL_PKGS),(cd pkgs/$(dir)-pkg && python setup.py clean) &&) :
@echo "Removing *.pyc *.c and __pycache__/ files"
@find . -type f -name "*.pyc" | xargs rm -vrf
@find . -type f -name "*.c" | xargs rm -vrf
@find . -type d -name "__pycache__" | xargs rm -vrf
@find . -type d -name "build" | xargs rm -vrf
@echo "Done."
@echo ""
develop:
@echo ""
@echo "--------------------------------------------------------------------"
@echo "Installing development dependencies"
@pip uninstall -y $(RELATED_PKGS) || true
@pip install $(DEPENDENCIES)
@echo ""
@echo "--------------------------------------------------------------------"
@echo "Setting up development environment"
@$(foreach dir,$(ALL_PKGS),(cd pkgs/$(dir)-pkg && python setup.py develop --no-deps -q) &&) :
@echo ""
@echo "Done."
@echo ""
undevelop:
@echo ""
@echo "--------------------------------------------------------------------"
@echo "Removing development environment"
@$(foreach dir,$(ALL_PKGS),(cd pkgs/$(dir)-pkg && python setup.py develop -q --no-deps --uninstall) &&) :
@echo ""
@echo "Done."
@echo ""
distribute:
@echo ""
@echo "--------------------------------------------------------------------"
@echo "Copying all distributable to $(PROD_PKGS)"
@test -d $(DIST_DIR) || { echo "Nothing to distribute! Exiting..."; exit 1; }
@ssh -q $(PROD_USER) 'test -e $(PROD_PKGS)/$(PKG_NAME) || mkdir $(PROD_PKGS)/$(PKG_NAME)'
@scp $(DIST_DIR)/* $(PROD_USER):$(PROD_PKGS)/$(PKG_NAME)/
@echo ""
@echo "Done."
@echo ""
all: $(ALL_PKGS)
@echo ""
@echo "Done."
@echo ""
package: $(ALL_PKGS)
@echo ""
@echo "Done."
@echo ""
$(ALL_PKGS):
@echo ""
@echo "--------------------------------------------------------------------"
@echo "Building pyATS distributable: $@"
@echo ""
cd pkgs/$@-pkg/; $(BUILD_CMD)
@echo "Completed building: $@"
@echo ""
test:
@echo ""
@echo "--------------------------------------------------------------------"
@echo "Running all unit tests..."
@echo ""
@$(TESTCMD) --path tests/
@echo "Completed unit testing"
@echo ""
check:
@echo ""
@echo "--------------------------------------------------------------------"
@echo "Checking setup.py consistency..."
@echo ""
@$(foreach dir,$(ALL_PKGS),(cd pkgs/$(dir)-pkg && python setup.py check) &&) :
@echo "Done"
@echo ""
json:
python ./pkgs/sdk-pkg/api_generator/apis.py -datafile pkgs/sdk-pkg/api_generator/github/api_datafile.yaml -save_location pkgs/sdk-pkg/api_generator/output/github_apis.json
python ./pkgs/sdk-pkg/api_generator/apis.py -datafile pkgs/sdk-pkg/api_generator/bitbucket/api_datafile.yaml -save_location pkgs/sdk-pkg/api_generator/output/bitbucket_apis.json
@cp pkgs/sdk-pkg/api_generator/output/github_apis.json pkgs/sdk-pkg/src/genie/libs/sdk/apis/apis.json
python ./pkgs/ops-pkg/ops_generator/ops.py -datafile pkgs/ops-pkg/ops_generator/bitbucket/ops_datafile.yaml -save_location pkgs/ops-pkg/ops_generator/output/bitbucket_ops.json
python ./pkgs/ops-pkg/ops_generator/ops.py -datafile pkgs/ops-pkg/ops_generator/github/ops_datafile.yaml -save_location pkgs/ops-pkg/ops_generator/output/github_ops.json
@cp pkgs/ops-pkg/ops_generator/output/github_ops.json pkgs/ops-pkg/src/genie/libs/ops/ops.json