blob: 1834586a5643bc759a5374d8c86b1a80357eedf0 [file] [log] [blame]
Ray Milkeyd7be3622018-07-12 10:29:21 -07001"""
2 Copyright 2018-present Open Networking Foundation
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15"""
16
17"""
18 Rules to build the ONOS GUI
19
20 Bazel and npm are incompatibe in how they deal with files. npm likes to follow links
21 to get back to the original canonical path names, and bazel uses links extensively when
22 populating the sandbox. To get around these problems, the rules that follow use filegroups
23 to specify the files as dependencies and then use a genrule to convert the files into a tar
24 ball. Once the tar ball is unrolled into the sandbox, the links are broken, but the build is
25 still hermetic since those files are referred to as dependencies in the genrule.
26
27 Also note that the onos-gui.tar contains files from //tools/gui and //web/gui, so the files are placed into
28 the sandbox at the proper locations and then returned as a tar ball.
29"""
Ray Milkey6b3775a2018-06-28 11:18:44 -070030
Carmelo Casconed33d3b42019-06-18 12:12:36 -070031load("//tools/build/bazel:jdk_genrule.bzl", genrule = "jdk_genrule")
32
Ray Milkey86ad7bb2018-09-27 12:32:28 -070033COMPILE_DEPS = CORE_DEPS + JACKSON + KRYO + CLI + [
Ray Milkey6b3775a2018-06-28 11:18:44 -070034 "@javax_ws_rs_api//jar",
35 "@servlet_api//jar",
36 "@jetty_websocket//jar",
Ray Milkeyd84f89b2018-08-17 14:54:17 -070037 "@jetty_websocket_api//jar",
Ray Milkey6b3775a2018-06-28 11:18:44 -070038 "@jetty_util//jar",
39 "@jersey_media_multipart//jar",
Ray Milkey6b3775a2018-06-28 11:18:44 -070040 "@jersey_server//jar",
Ray Milkey427e9752018-11-15 16:34:48 -080041 "@jersey_hk2//jar",
Ray Milkey6b3775a2018-06-28 11:18:44 -070042 "//utils/rest:onlab-rest",
43 "//core/store/serializers:onos-core-serializers",
44]
45
46TEST_DEPS = TEST + [
47 "//core/api:onos-api-tests",
48 "//drivers/default:onos-drivers-default",
49]
50
Ray Milkeyd7be3622018-07-12 10:29:21 -070051"""
52 Files that get put at the top level of the tar ball
53"""
Ray Milkey6b3775a2018-06-28 11:18:44 -070054
55filegroup(
56 name = "_root_level_files",
57 srcs =
58 [
59 ":src/main/webapp/bower.json",
60 ":src/main/webapp/bs-config.js",
61 ":src/main/webapp/dev_server.js",
62 ":src/main/webapp/package.json",
63 ],
64)
65
Ray Milkeyd7be3622018-07-12 10:29:21 -070066"""
67 Files that get put into the WEB-INF directory of the tar ball
68"""
69
Ray Milkey6b3775a2018-06-28 11:18:44 -070070filegroup(
71 name = "_web_inf_classes_files",
72 srcs =
73 [
74 ":src/main/webapp/error.html",
75 ":src/main/webapp/index.html",
76 ":src/main/webapp/login.html",
77 ":src/main/webapp/nav.html",
78 ":src/main/webapp/not-ready.html",
79 ":src/main/webapp/onos.js",
80 ],
81)
82
Ray Milkeyd7be3622018-07-12 10:29:21 -070083"""
84 webapp raw files
85"""
86
Ray Milkey6b3775a2018-06-28 11:18:44 -070087filegroup(
88 name = "_raw_classes_files",
89 srcs = glob(["src/main/webapp/raw/**"]),
90)
91
Ray Milkeyd7be3622018-07-12 10:29:21 -070092"""
Ray Milkeyd7be3622018-07-12 10:29:21 -070093 Install node.js and npm, and gather files needed from //tools/gui
94"""
95
96genrule(
97 name = "_onos-gui-npm-install",
98 srcs = [
99 "@nodejs//:bin/npm",
Sean Condonf6af2a52018-08-19 10:43:24 +0100100 "@nodejs//:bin/node",
Sean Condonf6af2a52018-08-19 10:43:24 +0100101 "@nodejs//:bin/nodejs/bin/node",
102 "@nodejs//:bin/nodejs/bin/npm",
Ray Milkeyd7be3622018-07-12 10:29:21 -0700103 "//tools/gui:tools-gui-gulp",
Thomas Vachuska34328622018-08-03 09:21:17 -0700104 ],
105 outs = ["onos-gui-npm-install.jar"],
Ray Milkeyd7be3622018-07-12 10:29:21 -0700106 cmd = " ROOT=`pwd` &&" +
Thomas Vachuska06206132018-08-06 16:43:43 -0700107 " export HOME=. &&" +
Ray Milkeyd7be3622018-07-12 10:29:21 -0700108 " export XDG_CONFIG_HOME=$(@D)/config &&" + # npm config cache to the sandbos
Ray Milkeycc9620a2018-07-31 14:22:40 -0700109 " export BABEL_DISABLE_CACHE=1 &&" + # turn off babel cache
Thomas Vachuska277ec4e2018-08-29 17:59:47 +0000110 ' if [[ ! -z $${HTTP_PROXY-} ]]; then NPM_ARGS="--proxy $$HTTP_PROXY --without-ssl --insecure"; else NPM_ARGS=""; fi &&' +
Ray Milkeyd7be3622018-07-12 10:29:21 -0700111 " NPM=$$ROOT/$(location @nodejs//:bin/npm) &&" +
112 " mkdir -p tools/gui &&" +
113 " cd tools/gui &&" +
Thomas Vachuska34328622018-08-03 09:21:17 -0700114 " jar xf ../../$(location //tools/gui:tools-gui-gulp) &&" +
Ray Milkey61289c12018-08-27 17:09:25 -0700115 " $$NPM $$NPM_ARGS install --no-cache --loglevel=error >npm-install.out 2>&1 &&" +
Thomas Vachuska34328622018-08-03 09:21:17 -0700116 " find . -name package.json | while read pjson; do egrep -v '/execroot/' $$pjson > ptmp; mv ptmp $$pjson; done &&" +
117 " find package.json gulpfile.babel.js node_modules gulp-tasks -type f -exec touch -t 201806280000 {} \; &&" +
118 " jar Mcf $$ROOT/$@ package.json gulpfile.babel.js node_modules gulp-tasks",
Ray Milkeyd7be3622018-07-12 10:29:21 -0700119)
120
121"""
122 Run npm build to create node.js files
123"""
124
125genrule(
126 name = "_onos-gui-npm-build",
127 srcs = [
128 "@nodejs//:bin/npm",
Sean Condonf6af2a52018-08-19 10:43:24 +0100129 "@nodejs//:bin/node",
Sean Condonf6af2a52018-08-19 10:43:24 +0100130 "@nodejs//:bin/nodejs/bin/node",
131 "@nodejs//:bin/nodejs/bin/npm",
Ray Milkeyd7be3622018-07-12 10:29:21 -0700132 ":_onos-gui-npm-install",
133 ":_web_app_all",
134 ],
Thomas Vachuska34328622018-08-03 09:21:17 -0700135 outs = ["onos-gui-npm-build.jar"],
Ray Milkeyd7be3622018-07-12 10:29:21 -0700136 cmd = "(ROOT=`pwd` &&" +
Thomas Vachuska06206132018-08-06 16:43:43 -0700137 " export HOME=. &&" +
Ray Milkeyd7be3622018-07-12 10:29:21 -0700138 " export XDG_CONFIG_HOME=$(@D)/config &&" +
Ray Milkey61289c12018-08-27 17:09:25 -0700139 " export BABEL_DISABLE_CACHE=1 &&" +
140 ' if [[ ! -z $${HTTP_PROXY-} ]]; then NPM_ARGS="--proxy $$HTTP_PROXY --without-ssl --insecure"; else NPM_ARGS=""; fi &&' +
Ray Milkeyd7be3622018-07-12 10:29:21 -0700141 " NPM=$(location @nodejs//:bin/npm) &&" +
Thomas Vachuska34328622018-08-03 09:21:17 -0700142 " (mkdir -p web/gui && cd web/gui && jar xf ../../$(location :_web_app_all)) &&" +
Ray Milkeyd7be3622018-07-12 10:29:21 -0700143 " mkdir -p tools/gui && cd tools/gui &&" +
Thomas Vachuska34328622018-08-03 09:21:17 -0700144 " jar xf $$ROOT/$(location :_onos-gui-npm-install) &&" +
145 " chmod a+x ./node_modules/gulp/bin/gulp.js &&" +
Ray Milkey61289c12018-08-27 17:09:25 -0700146 " $$ROOT/$$NPM $$NPM_ARGS run build --no-cache --loglevel=error >npm-build.out &&" +
Ray Milkeyd7be3622018-07-12 10:29:21 -0700147 " cd ../../web/gui/src/main/webapp &&" +
Thomas Vachuska34328622018-08-03 09:21:17 -0700148 " find dist vendor data README.md _doc _dev app/fw app/*.css app/*.js app/*.txt -type f -exec touch -t 201806280000 {} \; &&" +
149 " jar Mcf $$ROOT/$@ dist vendor data README.md _doc _dev app/fw app/*.css app/*.js app/*.txt)",
Ray Milkeyd7be3622018-07-12 10:29:21 -0700150)
151
152"""
153 Make a jar file of all the webapp files. Useful for breaking symblic links in the sandbox
154"""
155
156genrule(
157 name = "_web_app_all",
Jian Lid486a732018-08-03 00:32:11 +0900158 srcs = glob(
159 [
160 "src/main/webapp/**",
161 "src/main/webapp/app/**/*.js",
162 ],
163 exclude = [
164 "src/main/webapp/tests/**",
165 "src/main/webapp/node_modules/**",
166 "src/main/webapp/dist/**",
167 "src/main/webapp/vendor/**",
168 "src/main/webapp/npm-debug.log",
169 ],
170 ),
Thomas Vachuska34328622018-08-03 09:21:17 -0700171 outs = ["web_app_all.jar"],
172 cmd = "cd web/gui &&" +
173 " find src/main/webapp -type f -exec touch -t 201806280000 {} \; &&" +
174 " jar Mcf ../../$@ src/main/webapp",
Ray Milkeyd7be3622018-07-12 10:29:21 -0700175)
176
177"""
178 app/view is packaged as a tar file because it has subdirectories that need to be preserved
179"""
180
Ray Milkey6b3775a2018-06-28 11:18:44 -0700181genrule(
182 name = "_app_view_tar",
183 srcs = glob(["src/main/webapp/app/view/**"]),
Thomas Vachuska34328622018-08-03 09:21:17 -0700184 outs = ["app_view_tar.jar"],
Ray Milkey6b3775a2018-06-28 11:18:44 -0700185 cmd = " ROOT=`pwd` &&" +
186 " cd web/gui/src/main/webapp/app/view &&" +
Thomas Vachuska34328622018-08-03 09:21:17 -0700187 " find . -type f -exec touch -t 201806280000 {} \; &&" +
188 " jar Mcf $$ROOT/$@ .",
Ray Milkey6b3775a2018-06-28 11:18:44 -0700189)
190
Ray Milkeyd7be3622018-07-12 10:29:21 -0700191"""
192 Builds the java jar for the java code provided by the GUI
193"""
194
195osgi_jar_with_tests(
Thomas Vachuska2bd1fc82018-10-22 13:09:14 -0700196 name = "onos-gui-jar",
Ray Milkeyd7be3622018-07-12 10:29:21 -0700197 exclude_tests = [
198 "org.onosproject.ui.impl.AbstractUiImplTest",
199 "org.onosproject.ui.impl.topo.model.AbstractTopoModelTest",
200 ],
Ray Milkey8753ede2018-10-12 09:08:35 -0700201 karaf_command_packages = [
202 "org.onosproject.ui.impl.cli",
203 "org.onosproject.ui.impl.topo",
204 ],
Ray Milkeyd7be3622018-07-12 10:29:21 -0700205 test_deps = TEST_DEPS,
206 web_context = "/onos/ui",
207 deps = COMPILE_DEPS,
208)
209
Sean Condon3c8e5582018-08-28 23:22:43 +0100210genrule(
211 name = "onos-gui-java-for-gui2",
212 srcs = glob([
Sean Condonb2c483c2019-01-16 20:28:55 +0000213 "src/main/java/org/onosproject/ui/impl/**/*.java",
Sean Condon3c8e5582018-08-28 23:22:43 +0100214 ]),
215 outs = ["onos-gui-java-for-gui2.srcjar"],
216 cmd = "jar cf $@ $(SRCS)",
217 visibility = ["//visibility:public"],
218)
219
Sean Condonb2c483c2019-01-16 20:28:55 +0000220genrule(
221 name = "onos-gui-lion-for-gui2",
222 srcs = glob([
223 "src/main/resources/org/onosproject/ui/lion/**/*",
224 "src/main/resources/core/**/*",
225 ]),
226 outs = ["onos-gui-lion-for-gui2.srcjar"],
227 cmd = "jar cf $@ $(SRCS)",
228 visibility = ["//visibility:public"],
229)
230
Sean Condon0d064ec2019-02-04 21:53:53 +0000231genrule(
232 name = "onos-gui-data-for-gui2",
233 srcs = glob([
234 "src/main/webapp/data/**/*",
235 ]),
236 outs = ["onos-gui-data-for-gui2.srcjar"],
237 cmd = "jar cf $@ $(SRCS)",
238 visibility = ["//visibility:public"],
239)
240
Ray Milkeyd7be3622018-07-12 10:29:21 -0700241"""
242 Builds the tar ball for the ONOS GUI
243"""
244
Ray Milkey6b3775a2018-06-28 11:18:44 -0700245genrule(
Sean Condonbf7ff4f2019-03-17 16:18:42 +0000246 name = "onos-web-gui",
Ray Milkey6b3775a2018-06-28 11:18:44 -0700247 srcs = [
248 ":_onos-gui-npm-build",
Thomas Vachuska2bd1fc82018-10-22 13:09:14 -0700249 ":onos-gui-jar",
Ray Milkey6b3775a2018-06-28 11:18:44 -0700250 ":_root_level_files",
251 ":_web_inf_classes_files",
252 ":_raw_classes_files",
253 ":_app_view_tar",
254 ],
255 outs = ["onos-gui.jar"],
256 cmd = " ROOT=`pwd` &&" +
257 " mkdir -p gui/WEB-INF/classes &&" +
258 " cd gui &&" +
Thomas Vachuska34328622018-08-03 09:21:17 -0700259 " jar xf $$ROOT/$(location :_onos-gui-npm-build) &&" +
260 " (cd WEB-INF/classes && mkdir -p app/view && cd app/view && jar xf $$ROOT/$(location :_app_view_tar)) &&" +
Ray Milkey6b3775a2018-06-28 11:18:44 -0700261 " for i in $(locations :_root_level_files); do cp $$ROOT/$$i .; done &&" +
262 " for i in $(locations :_web_inf_classes_files); do cp $$ROOT/$$i ./WEB-INF/classes/; done &&" +
Ray Milkeyd7be3622018-07-12 10:29:21 -0700263 " mkdir ./WEB-INF/classes/raw && " +
264 " for i in $(locations :_raw_classes_files); do cp $$ROOT/$$i ./WEB-INF/classes/raw/; done &&" +
Thomas Vachuska2bd1fc82018-10-22 13:09:14 -0700265 " jar xf $$ROOT/$(location :onos-gui-jar) &&" +
Thomas Vachuska34328622018-08-03 09:21:17 -0700266 " find . -type f -exec touch -t 201806280000 {} \; &&" +
Ray Milkey6b3775a2018-06-28 11:18:44 -0700267 " jar cmf META-INF/MANIFEST.MF $$ROOT/$@ .",
Ray Milkey6b3775a2018-06-28 11:18:44 -0700268 output_to_bindir = 1,
269 visibility = ["//visibility:public"],
270)
Sean Condonbf7ff4f2019-03-17 16:18:42 +0000271
272onos_app(
273 category = "Graphical User Interface",
274 description = "ONOS GUI - the original ONOS GUI based " +
275 "on the latest AngularJS - new development should be on GUI2",
276 title = "ONOS Legacy GUI",
277 url = "http://onosproject.org",
278)