Merge ~sylvain-pineau/checkbox-snappy:content-interface-s16 into checkbox-snappy:series16
- Git
- lp:~sylvain-pineau/checkbox-snappy
- content-interface-s16
- Merge into series16
Proposed by
Sylvain Pineau
Status: | Merged |
---|---|
Approved by: | Sylvain Pineau |
Approved revision: | 53517361e6bf298d89d0cb190ea793e3f75162ca |
Merged at revision: | 633b934792d7a847a964a561867493b4b18bad29 |
Proposed branch: | ~sylvain-pineau/checkbox-snappy:content-interface-s16 |
Merge into: | checkbox-snappy:series16 |
Diff against target: |
429 lines (+204/-100) 7 files modified
dev/null (+0/-6) launchers/checkbox-cli-wrapper (+0/-6) launchers/configure (+34/-4) launchers/wrapper_common (+50/-2) snap/hooks/configure (+30/-2) snap/plugins/checkbox_provider.py (+67/-0) snap/snapcraft.yaml (+23/-80) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jonathan Cave (community) | Approve | ||
Review via email:
|
Commit message
Description of the change
Content interface deployment
Tested here: https:/
Built using the snapcraft snap
To post a comment you must log in.
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Sylvain Pineau (sylvain-pineau) wrote : | # |
See below, just to be future proof
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Jonathan Cave (jocave) wrote : | # |
Ok, lets go with that.
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/launchers/checkbox-cli-wrapper b/launchers/checkbox-cli-wrapper |
2 | index 739ad9e..4b9f1c9 100755 |
3 | --- a/launchers/checkbox-cli-wrapper |
4 | +++ b/launchers/checkbox-cli-wrapper |
5 | @@ -1,11 +1,5 @@ |
6 | #!/bin/bash |
7 | |
8 | -if ! snap list &> /dev/null || ! snap list $SNAP_NAME | grep devmode > /dev/null |
9 | -then |
10 | - echo "$SNAP_NAME must be installed with --devmode to function properly!" |
11 | - exit 1 |
12 | -fi |
13 | - |
14 | . $(dirname "$(realpath $BASH_SOURCE)")/wrapper_common |
15 | |
16 | cd $HOME |
17 | diff --git a/launchers/checkbox-launcher-wrapper b/launchers/checkbox-launcher-wrapper |
18 | deleted file mode 100755 |
19 | index bf193ee..0000000 |
20 | --- a/launchers/checkbox-launcher-wrapper |
21 | +++ /dev/null |
22 | @@ -1,6 +0,0 @@ |
23 | -#!/bin/bash |
24 | - |
25 | -. $(dirname "$(realpath $BASH_SOURCE)")/wrapper_common |
26 | - |
27 | -cd $HOME |
28 | -exec python3 $(which checkbox-launcher) "$@" |
29 | diff --git a/launchers/configure b/launchers/configure |
30 | index e9b95d1..e6502eb 100755 |
31 | --- a/launchers/configure |
32 | +++ b/launchers/configure |
33 | @@ -1,18 +1,48 @@ |
34 | #!/usr/bin/env python3 |
35 | -# Copyright 2017 Canonical Ltd. |
36 | +# Copyright 2018-2019 Canonical Ltd. |
37 | # All rights reserved. |
38 | # |
39 | # Written by: |
40 | # Maciej Kisielewski <maciej.kisielewski@canonical.com> |
41 | +# Sylvain Pineau <sylvain.pineau@canonical.com> |
42 | import os |
43 | import re |
44 | import sys |
45 | |
46 | sys.path.append(os.path.expandvars("$SNAP/usr/lib/python3/dist-packages")) |
47 | -sys.path.append(os.path.expandvars("$SNAP/lib/python3.5/site-packages")) |
48 | +sitepkgpath = "$SNAP/lib/python{}.{}/site-packages".format( |
49 | + sys.version_info[0], sys.version_info[1]) |
50 | +sys.path.append(os.path.expandvars(sitepkgpath)) |
51 | |
52 | -from checkbox_support.snap_utils.config import update_configuration |
53 | -from checkbox_support.snap_utils.config import print_checkbox_conf |
54 | +sys.path.append(os.path.expandvars( |
55 | + "$SNAP/checkbox-runtime/usr/lib/python3/dist-packages")) |
56 | +runtimepath = "$SNAP/checkbox-runtime/lib/python{}.{}/site-packages".format( |
57 | + sys.version_info[0], sys.version_info[1]) |
58 | +sys.path.append(os.path.expandvars(runtimepath)) |
59 | + |
60 | +try: |
61 | + from checkbox_support.snap_utils.config import update_configuration |
62 | + from checkbox_support.snap_utils.config import print_checkbox_conf |
63 | +except ImportError: |
64 | + msg = """ |
65 | +checkbox-support not found! |
66 | +You need to connect this snap to the checkbox snap. |
67 | + |
68 | +You can do this with those commands: |
69 | + |
70 | +snap connect $SNAP_NAME:checkbox-runtime checkbox:checkbox-runtime |
71 | +snap connect $SNAP_NAME:provider-resource checkbox:provider-resource |
72 | +snap connect $SNAP_NAME:provider-checkbox checkbox:provider-checkbox |
73 | +snap connect $SNAP_NAME:provider-snappy checkbox:provider-snappy |
74 | +snap connect $SNAP_NAME:provider-ipdt checkbox:provider-ipdt |
75 | +snap connect $SNAP_NAME:provider-docker checkbox:provider-docker |
76 | +snap connect $SNAP_NAME:provider-tpm2 checkbox:provider-tpm2 |
77 | +snap connect $SNAP_NAME:provider-sru checkbox:provider-sru |
78 | +snap connect $SNAP_NAME:provider-edgex checkbox:provider-edgex |
79 | +snap connect $SNAP_NAME:provider-engineering-tests checkbox:provider-engineering-tests |
80 | + """ |
81 | + print(os.path.expandvars(msg), file=sys.stderr) |
82 | + sys.exit(1) |
83 | |
84 | |
85 | def main(): |
86 | diff --git a/launchers/hw-collection b/launchers/hw-collection |
87 | old mode 100644 |
88 | new mode 100755 |
89 | diff --git a/launchers/wrapper_common b/launchers/wrapper_common |
90 | index 6a02421..00e7a12 100644 |
91 | --- a/launchers/wrapper_common |
92 | +++ b/launchers/wrapper_common |
93 | @@ -12,11 +12,59 @@ case "$SNAP_ARCH" in |
94 | ;; |
95 | esac |
96 | |
97 | +################################################ |
98 | +# Launcher common exports for any checkbox app # |
99 | +################################################ |
100 | + |
101 | +function append_dir() { |
102 | + local var="$1" |
103 | + local dir="$2" |
104 | + if [ -d "$dir" ]; then |
105 | + eval "export $var=\"\${$var:+\$$var:}\$dir\"" |
106 | + fi |
107 | +} |
108 | + |
109 | +if [ -d $SNAP/checkbox-runtime ]; then |
110 | + RUNTIME=$SNAP/checkbox-runtime |
111 | + if [ ! -d $RUNTIME/usr ]; then |
112 | + echo "You need to connect this snap to the checkbox snap." |
113 | + echo "" |
114 | + echo "You can do this with those commands:" |
115 | + echo "snap install checkbox" |
116 | + echo "snap connect $SNAP_NAME:checkbox-runtime checkbox:checkbox-runtime" |
117 | + exit 1 |
118 | + fi |
119 | +fi |
120 | + |
121 | export LC_ALL=C.UTF-8 |
122 | PERL_VERSION=$(perl -e '$^V=~/^v(\d+\.\d+)/;print $1') |
123 | export PERL5LIB="$PERL5LIB:$SNAP/usr/lib/$ARCH/perl/$PERL_VERSION:$SNAP/usr/lib/$ARCH/perl5/$PERL_VERSION:$SNAP/usr/share/perl/$PERL_VERSION:$SNAP/usr/share/perl5" |
124 | export GI_TYPELIB_PATH=$SNAP/usr/lib/girepository-1.0:$SNAP/usr/lib/$ARCH/girepository-1.0 |
125 | export PATH="$PATH:$SNAP/usr/sbin:$SNAP/sbin:/snap/bin" |
126 | -export PYTHONPATH="$SNAP/usr/lib/python3/dist-packages:$PYTHONPATH" |
127 | export ALSA_CONFIG_PATH=$SNAP/usr/share/alsa/alsa.conf:$SNAP/usr/share/alsa/pcm/default.conf |
128 | -export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$SNAP/lib/fwts" |
129 | +export PYTHONPATH="$SNAP/usr/lib/python3/dist-packages:$PYTHONPATH" |
130 | + |
131 | +if [ -z "$RUNTIME" ]; then |
132 | + RUNTIME=$SNAP |
133 | +else |
134 | + # add general paths not added by snapcraft due to runtime snap |
135 | + append_dir PERL5LIB $RUNTIME/usr/lib/$ARCH/perl/$PERL_VERSION |
136 | + append_dir PERL5LIB $RUNTIME/usr/lib/$ARCH/perl5/$PERL_VERSION |
137 | + append_dir PERL5LIB $RUNTIME/usr/share/perl/$PERL_VERSION |
138 | + append_dir PERL5LIB $RUNTIME/usr/share/perl5 |
139 | + append_dir LD_LIBRARY_PATH $RUNTIME/lib/$ARCH |
140 | + append_dir LD_LIBRARY_PATH $RUNTIME/usr/lib/$ARCH |
141 | + append_dir LD_LIBRARY_PATH $RUNTIME/lib/fwts |
142 | + append_dir GI_TYPELIB_PATH $RUNTIME/usr/lib/girepository-1.0 |
143 | + append_dir GI_TYPELIB_PATH $RUNTIME/usr/lib/$ARCH/girepository-1.0 |
144 | + append_dir PATH $RUNTIME/bin |
145 | + append_dir PATH $RUNTIME/usr/bin |
146 | + append_dir PATH $RUNTIME/sbin |
147 | + append_dir PATH $RUNTIME/usr/sbin |
148 | + append_dir ALSA_CONFIG_PATH $RUNTIME/usr/share/alsa/alsa.conf |
149 | + append_dir ALSA_CONFIG_PATH $RUNTIME/usr/share/alsa/pcm/default.conf |
150 | + append_dir PYTHONUSERBASE $RUNTIME |
151 | + append_dir PYTHONHOME $RUNTIME/usr |
152 | + append_dir PYTHONPATH $RUNTIME/usr/lib/python3/dist-packages |
153 | + append_dir PYTHONPATH $RUNTIME/lib/python3*/site-packages |
154 | +fi |
155 | diff --git a/snap/hooks/configure b/snap/hooks/configure |
156 | index 0973a72..2808d23 100755 |
157 | --- a/snap/hooks/configure |
158 | +++ b/snap/hooks/configure |
159 | @@ -1,9 +1,10 @@ |
160 | #!/usr/bin/env python3 |
161 | -# Copyright 2017 Canonical Ltd. |
162 | +# Copyright 2017-2019 Canonical Ltd. |
163 | # All rights reserved. |
164 | # |
165 | # Written by: |
166 | # Maciej Kisielewski <maciej.kisielewski@canonical.com> |
167 | +# Sylvain Pineau <sylvain.pineau@canonical.com> |
168 | """ |
169 | This hook reads `config_vars` file from the root of a snap and reenters this |
170 | configuration using snapd's config facilities and rewrites the file to a |
171 | @@ -37,5 +38,32 @@ sitepkgpath = "$SNAP/lib/python{}.{}/site-packages".format( |
172 | sys.version_info[0], sys.version_info[1]) |
173 | sys.path.append(os.path.expandvars(sitepkgpath)) |
174 | |
175 | -from checkbox_support.snap_utils.config import refresh_configuration |
176 | +sys.path.append(os.path.expandvars( |
177 | + "$SNAP/checkbox-runtime/usr/lib/python3/dist-packages")) |
178 | +runtimepath = "$SNAP/checkbox-runtime/lib/python{}.{}/site-packages".format( |
179 | + sys.version_info[0], sys.version_info[1]) |
180 | +sys.path.append(os.path.expandvars(runtimepath)) |
181 | + |
182 | +try: |
183 | + from checkbox_support.snap_utils.config import refresh_configuration |
184 | +except ImportError: |
185 | + msg = """ |
186 | +checkbox-support not found! |
187 | +You need to connect this snap to the checkbox snap. |
188 | + |
189 | +You can do this with those commands: |
190 | + |
191 | +snap connect $SNAP_NAME:checkbox-runtime checkbox:checkbox-runtime |
192 | +snap connect $SNAP_NAME:provider-resource checkbox:provider-resource |
193 | +snap connect $SNAP_NAME:provider-checkbox checkbox:provider-checkbox |
194 | +snap connect $SNAP_NAME:provider-snappy checkbox:provider-snappy |
195 | +snap connect $SNAP_NAME:provider-ipdt checkbox:provider-ipdt |
196 | +snap connect $SNAP_NAME:provider-docker checkbox:provider-docker |
197 | +snap connect $SNAP_NAME:provider-tpm2 checkbox:provider-tpm2 |
198 | +snap connect $SNAP_NAME:provider-sru checkbox:provider-sru |
199 | +snap connect $SNAP_NAME:provider-edgex checkbox:provider-edgex |
200 | +snap connect $SNAP_NAME:provider-engineering-tests checkbox:provider-engineering-tests |
201 | + """ |
202 | + print(os.path.expandvars(msg), file=sys.stderr) |
203 | + sys.exit(0) |
204 | refresh_configuration() |
205 | diff --git a/snap/plugins/checkbox_provider.py b/snap/plugins/checkbox_provider.py |
206 | new file mode 100644 |
207 | index 0000000..eded14b |
208 | --- /dev/null |
209 | +++ b/snap/plugins/checkbox_provider.py |
210 | @@ -0,0 +1,67 @@ |
211 | +# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*- |
212 | +# |
213 | +# Copyright (C) 2016-2019 Canonical Ltd |
214 | +# |
215 | +# This program is free software: you can redistribute it and/or modify |
216 | +# it under the terms of the GNU General Public License version 3 as |
217 | +# published by the Free Software Foundation. |
218 | +# |
219 | +# This program is distributed in the hope that it will be useful, |
220 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
221 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
222 | +# GNU General Public License for more details. |
223 | +# |
224 | +# You should have received a copy of the GNU General Public License |
225 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
226 | + |
227 | +import os |
228 | + |
229 | +from snapcraft.internal import mangling |
230 | +from snapcraft.plugins import plainbox_provider |
231 | + |
232 | + |
233 | +class CheckboxProvider(plainbox_provider.PlainboxProviderPlugin): |
234 | + |
235 | + def __init__(self, name, options, project): |
236 | + super().__init__(name, options, project) |
237 | + self.build_snaps.append("checkbox-provider-tools") |
238 | + if project.info.base in (None, "core16"): |
239 | + self.build_snaps.append("checkbox") |
240 | + if project.info.base == "core18": |
241 | + self.build_snaps.append("checkbox18") |
242 | + |
243 | + def build(self): |
244 | + env = os.environ.copy() |
245 | + # Ensure the first provider does not attempt to validate against |
246 | + # providers installed on the build host by initialising PROVIDERPATH |
247 | + # to empty |
248 | + env["PROVIDERPATH"] = "" |
249 | + provider_stage_dir = os.path.join(self.project.stage_dir, "providers") |
250 | + if os.path.exists(provider_stage_dir): |
251 | + provider_dirs = [ |
252 | + os.path.join(provider_stage_dir, provider) |
253 | + for provider in os.listdir(provider_stage_dir) |
254 | + ] |
255 | + env["PROVIDERPATH"] = ":".join(provider_dirs) |
256 | + for snap_name in self.build_snaps: |
257 | + build_snap_provider_dir = os.path.join( |
258 | + "/snap", snap_name, "current", "providers") |
259 | + if os.path.exists(build_snap_provider_dir): |
260 | + provider_dirs = [ |
261 | + os.path.join(build_snap_provider_dir, provider) |
262 | + for provider in os.listdir(build_snap_provider_dir) |
263 | + ] |
264 | + env["PROVIDERPATH"] = ":".join(provider_dirs) |
265 | + cmd = "checkbox-provider-tools" |
266 | + self.run([cmd, "validate"], env=env) |
267 | + self.run([cmd, "build"]) |
268 | + self.run( |
269 | + [ |
270 | + cmd, |
271 | + "install", |
272 | + "--layout=relocatable", |
273 | + "--prefix=/providers/{}".format(self.name), |
274 | + "--root={}".format(self.installdir), |
275 | + ] |
276 | + ) |
277 | + mangling.rewrite_python_shebangs(self.installdir) |
278 | diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml |
279 | index 745f397..fb95ce5 100644 |
280 | --- a/snap/snapcraft.yaml |
281 | +++ b/snap/snapcraft.yaml |
282 | @@ -4,49 +4,47 @@ description: "The provider is a collection of tests to be run on Snappy devices. |
283 | version: '16.11.dev' |
284 | grade: stable |
285 | |
286 | -# Don't forget to add a new slot if a new provider part is added in the parts |
287 | -# section below. |
288 | -slots: |
289 | +plugs: |
290 | + checkbox-runtime: |
291 | + interface: content |
292 | + target: $SNAP/checkbox-runtime |
293 | + default-provider: checkbox |
294 | provider-resource: |
295 | interface: content |
296 | - read: |
297 | - - $SNAP/providers/plainbox-provider-resource |
298 | + target: $SNAP/providers/plainbox-provider-resource |
299 | + default-provider: checkbox |
300 | provider-checkbox: |
301 | interface: content |
302 | - read: |
303 | - - $SNAP/providers/plainbox-provider-checkbox |
304 | + target: $SNAP/providers/plainbox-provider-checkbox |
305 | + default-provider: checkbox |
306 | provider-snappy: |
307 | interface: content |
308 | - read: |
309 | - - $SNAP/providers/plainbox-provider-snappy |
310 | + target: $SNAP/providers/plainbox-provider-snappy |
311 | + default-provider: checkbox |
312 | provider-ipdt: |
313 | interface: content |
314 | - read: |
315 | - - $SNAP/providers/plainbox-provider-ipdt |
316 | + target: $SNAP/providers/plainbox-provider-ipdt |
317 | + default-provider: checkbox |
318 | provider-docker: |
319 | interface: content |
320 | - read: |
321 | - - $SNAP/providers/plainbox-provider-docker |
322 | + target: $SNAP/providers/plainbox-provider-docker |
323 | + default-provider: checkbox |
324 | provider-tpm2: |
325 | interface: content |
326 | - read: |
327 | - - $SNAP/providers/plainbox-provider-tpm2 |
328 | + target: $SNAP/providers/plainbox-provider-tpm2 |
329 | + default-provider: checkbox |
330 | provider-engineering-tests: |
331 | interface: content |
332 | - read: |
333 | - - $SNAP/providers/plainbox-provider-engineering-tests |
334 | + target: $SNAP/providers/plainbox-provider-engineering-tests |
335 | + default-provider: checkbox |
336 | provider-sru: |
337 | interface: content |
338 | - read: |
339 | - - $SNAP/providers/plainbox-provider-sru |
340 | + target: $SNAP/providers/plainbox-provider-sru |
341 | + default-provider: checkbox |
342 | provider-edgex: |
343 | interface: content |
344 | - read: |
345 | - - $SNAP/providers/checkbox-provider-edgex |
346 | - checkbox-runtime: |
347 | - interface: content |
348 | - read: |
349 | - - / |
350 | + target: $SNAP/providers/checkbox-provider-edgex |
351 | + default-provider: checkbox |
352 | |
353 | apps: |
354 | checkbox-cli: |
355 | @@ -69,9 +67,6 @@ apps: |
356 | test-runner-edgex: |
357 | command: bin/test-runner-edgex |
358 | plugs: *standard |
359 | - python3: |
360 | - command: python3 |
361 | - plugs: *standard |
362 | engineering-tests: |
363 | command: bin/engineering-tests |
364 | plugs: *standard |
365 | @@ -90,64 +85,12 @@ apps: |
366 | plugs: *standard |
367 | |
368 | parts: |
369 | - fwts: |
370 | - source-tag: "" |
371 | - stress-ng: |
372 | - source-tag: "" |
373 | - after: [plainbox-provider-checkbox] |
374 | - checkbox-support-dev: |
375 | - source-tag: "" |
376 | - after: [fwts] |
377 | - checkbox-ng-dev: |
378 | - source-tag: "" |
379 | - plainbox-provider-resource: |
380 | - source-tag: "" |
381 | - after: [checkbox-support-dev, checkbox-ng-dev] |
382 | - plainbox-provider-checkbox: |
383 | - source-tag: "" |
384 | - after: [plainbox-provider-resource] |
385 | - plainbox-provider-snappy: |
386 | - source-tag: "" |
387 | - after: [plainbox-provider-checkbox] |
388 | - plainbox-provider-ipdt: |
389 | - source-tag: "" |
390 | - after: [plainbox-provider-snappy] |
391 | - plainbox-provider-docker: |
392 | - source-tag: "" |
393 | - after: [plainbox-provider-ipdt] |
394 | - plainbox-provider-tpm2: |
395 | - source-tag: "" |
396 | - after: [plainbox-provider-docker] |
397 | - plainbox-provider-sru: |
398 | - source-tag: "" |
399 | - after: [plainbox-provider-tpm2] |
400 | - plainbox-provider-engineering-tests: |
401 | - source-tag: "" |
402 | - after: [plainbox-provider-sru] |
403 | - checkbox-provider-edgex: |
404 | - source-tag: "" |
405 | - after: [plainbox-provider-engineering-tests] |
406 | launchers: |
407 | plugin: dump |
408 | source: launchers/ |
409 | organize: |
410 | '*': bin/ |
411 | - i2c-tools: |
412 | - plugin: nil |
413 | - stage-packages: |
414 | - - i2c-tools |
415 | - prime: |
416 | - - usr/sbin/i2cdetect |
417 | - parts-meta-info: |
418 | - after: [plainbox-provider-engineering-tests] |
419 | config-variables: |
420 | plugin: dump |
421 | source: . |
422 | stage: [config_vars] |
423 | - # This module is a dependency for the job gpio/gpiomem_loopback_pairs_{model} |
424 | - # in plainbox-provider-snappy only available in pypi and so can't be addded |
425 | - # to stage-packages of the remote part |
426 | - rpi-support-libs: |
427 | - plugin: python |
428 | - python-packages: |
429 | - - RPi.GPIO |
One question below