Merge ~alexmurray/review-tools:dbus-app-activates-on-property-checking into review-tools:master

Proposed by Alex Murray
Status: Rejected
Rejected by: Alex Murray
Proposed branch: ~alexmurray/review-tools:dbus-app-activates-on-property-checking
Merge into: review-tools:master
Diff against target: 622 lines (+262/-49)
5 files modified
check-names.list (+1/-0)
reviewtools/sr_common.py (+1/-2)
reviewtools/sr_lint.py (+68/-27)
reviewtools/tests/test_sr_lint.py (+112/-4)
tests/test.sh.expected (+80/-16)
Reviewer Review Type Date Requested Status
Alex Murray Disapprove
Samuele Pedroni Pending
James Henstridge Pending
Emilia Torino Pending
Review via email: mp+431324@code.launchpad.net

Description of the change

This is required to allow things like https://dashboard.snapcraft.io/snaps/ubuntu-desktop-session/revisions/3/ to pass automated review.

To post a comment you must log in.
78e4a06... by Alex Murray

Update check-names.list and tests/test.sh.expected for new tests

Signed-off-by: Alex Murray <email address hidden>

Revision history for this message
Alex Murray (alexmurray) wrote :

Will likely abandon this in favour of https://code.launchpad.net/~jamesh/review-tools/+git/review-tools/+merge/403932 which I had completely forgotten about.

Revision history for this message
Alex Murray (alexmurray) wrote :

Yep, decided to go with jamesh original proposal as that is a bit cleaner than this.

review: Disapprove

Unmerged commits

78e4a06... by Alex Murray

Update check-names.list and tests/test.sh.expected for new tests

Signed-off-by: Alex Murray <email address hidden>

2a4797c... by Alex Murray

sr_lint: Add support for dbus apps/activates-on property checking

The app bus-name property is essentially deprecated by upstream and instead the
activates-on property is used instead to specify a list of dbus slot names which
the app should activate on. Add support for checking this property is valid and
remove the old activatable dbus slot property which is not actually used by
snapd.

Signed-off-by: Alex Murray <email address hidden>

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/check-names.list b/check-names.list
2index 1a977d9..623dca1 100644
3--- a/check-names.list
4+++ b/check-names.list
5@@ -59,6 +59,7 @@ lint-snap-v2:daemon|
6 lint-snap-v2:daemon_required|
7 lint-snap-v2:daemon-scope|
8 lint-snap-v2:dbus_activatable|
9+lint-snap-v2:dbus_activates-on|
10 lint-snap-v2:dbus_bus-name_required|
11 lint-snap-v2:dbus_mixed_slots|
12 lint-snap-v2:dbus_slot_required|
13diff --git a/reviewtools/sr_common.py b/reviewtools/sr_common.py
14index aa71ee8..925fb0e 100644
15--- a/reviewtools/sr_common.py
16+++ b/reviewtools/sr_common.py
17@@ -102,6 +102,7 @@ class SnapReview(Review):
18 apps_required = ["command"]
19 apps_optional_cli = ["autostart"]
20 apps_optional_daemon = [
21+ "activates-on",
22 "after",
23 "before",
24 "bus-name", # May deprecate: https://forum.snapcraft.io/t/support-for-daemon-dbus/8855/11
25@@ -123,7 +124,6 @@ class SnapReview(Review):
26 "watchdog-timeout",
27 ]
28 apps_optional_shared = [
29- "activates-on", # eventually apps_optional_daemon (see https://forum.snapcraft.io/t/support-for-daemon-dbus/8855/11)
30 "aliases",
31 "command",
32 "command-chain",
33@@ -247,7 +247,6 @@ class SnapReview(Review):
34 "dbus": {
35 "name/slots": "",
36 "bus/slots": "",
37- "activatable/slots": False,
38 "name/plugs": "",
39 "bus/plugs": "",
40 },
41diff --git a/reviewtools/sr_lint.py b/reviewtools/sr_lint.py
42index 1f935db..5d77376 100644
43--- a/reviewtools/sr_lint.py
44+++ b/reviewtools/sr_lint.py
45@@ -874,8 +874,58 @@ class SnapReviewLint(SnapReview):
46 s = "'%s' must not be used with 'daemon'" % ",".join(needs_cli)
47 self._add_result(t, n, s)
48
49+ # 'activates-on' should specify an appropriate dbus slot
50+ for app in self.snap_yaml["apps"]:
51+ if "activates-on" not in self.snap_yaml["apps"][app]:
52+ continue
53+
54+ t = "info"
55+ n = self._get_check_name("dbus_activates-on", app=app)
56+ s = "OK"
57+
58+ if not isinstance(self.snap_yaml["apps"][app]["activates-on"], list):
59+ t = "error"
60+ s = "'activates-on' (not a list)"
61+ self._add_result(t, n, s)
62+ continue
63+
64+ for name in self.snap_yaml["apps"][app]["activates-on"]:
65+ slots = []
66+ if "slots" in self.snap_yaml:
67+ slots = self.snap_yaml["slots"]
68+ found = False
69+ t = "info"
70+ n = self._get_check_name("dbus_activates-on", app=app, extra=name)
71+ s = "OK"
72+ for ref in slots:
73+ if ref == name:
74+ spec = self.snap_yaml["slots"][ref]
75+ if (
76+ isinstance(spec, dict)
77+ and ("interface" in spec and spec["interface"] == "dbus")
78+ # daemon-scope must match dbus bus
79+ and ("daemon-scope" in self.snap_yaml["apps"][app] and (
80+ (
81+ self.snap_yaml["apps"][app]["daemon-scope"] == "user" and
82+ spec["bus"] == "session"
83+ ) or
84+ (
85+ self.snap_yaml["apps"][app]["daemon-scope"] == "system" and
86+ spec["bus"] == "system"
87+ )
88+ ))
89+ ):
90+ found = True
91+ break
92+ if not found:
93+ t = "error"
94+ s = "'activates-on: %s' slot is not defined or is not a matching dbus slot" % name
95+ self._add_result(t, n, s)
96+
97 # 'daemon: dbus' requires:
98- # a) that 'bus-name' is specified and
99+ # a) that 'bus-name' is specified OR that the 'activates-on' property is
100+ # specified in which case the last name used there is taken as
101+ # 'bus-name'
102 # b) that 'bus-name' matches one of the dbus slots
103 for app in self.snap_yaml["apps"]:
104 if (
105@@ -887,17 +937,20 @@ class SnapReviewLint(SnapReview):
106 t = "info"
107 n = self._get_check_name("dbus_bus-name_required", app=app)
108 s = "OK"
109- if "bus-name" not in self.snap_yaml["apps"][app]:
110+ if "bus-name" not in self.snap_yaml["apps"][app] and "activates-on" not in self.snap_yaml["apps"][app]:
111 t = "error"
112- s = "use of 'daemon: dbus' requires 'bus-name'"
113+ s = "use of 'daemon: dbus' requires 'bus-name' or 'activates-on'"
114 self._add_result(t, n, s)
115 continue
116- elif not isinstance(self.snap_yaml["apps"][app]["bus-name"], str):
117+ elif "bus-name" in self.snap_yaml["apps"][app] and not isinstance(self.snap_yaml["apps"][app]["bus-name"], str):
118 t = "error"
119 s = "'bus-name' (not a str)"
120 self._add_result(t, n, s)
121 continue
122
123+ if "bus-name" not in self.snap_yaml["apps"][app]:
124+ # we checked activates-on above so no need to check it here
125+ continue
126 needle = self.snap_yaml["apps"][app]["bus-name"]
127
128 needs_slot = False
129@@ -981,37 +1034,25 @@ class SnapReviewLint(SnapReview):
130 if show_report:
131 self._add_result(t, n, s)
132
133- # 'activatable: True' should be used with 'daemon: dbus'
134- has_activatable = False
135- for app in self.snap_yaml["apps"]:
136- if "daemon" not in self.snap_yaml["apps"][app]:
137- continue
138- if "slots" not in self.snap_yaml or len(self.snap_yaml["slots"]) == 0:
139- continue
140+ # 'activatable' is now an invalid property
141+ if "slots" not in self.snap_yaml or len(self.snap_yaml["slots"]) == 0:
142+ return
143
144- for ref in self.snap_yaml["slots"]:
145- spec = self.snap_yaml["slots"][ref]
146- if (
147+ for ref in self.snap_yaml["slots"]:
148+ t = "info"
149+ n = self._get_check_name("dbus_activatable")
150+ s = "OK"
151+ spec = self.snap_yaml["slots"][ref]
152+ if (
153 isinstance(spec, dict)
154 and (
155 ("interface" not in spec and ref == "dbus")
156 or ("interface" in spec and spec["interface"] == "dbus")
157 )
158 and "activatable" in spec
159- and spec["activatable"]
160- ):
161- if (
162- "slots" in self.snap_yaml["apps"][app]
163- and ref in self.snap_yaml["apps"][app]["slots"]
164- ):
165- has_activatable = True
166-
167- t = "info"
168- n = self._get_check_name("dbus_activatable", app=app)
169- s = "OK"
170- if has_activatable and self.snap_yaml["apps"][app]["daemon"] != "dbus":
171+ ):
172 t = "warn"
173- s = "'activatable: true' should be used with 'daemon: dbus'"
174+ s = "'activatable' is now an invalid dbus slot property"
175 self._add_result(t, n, s)
176
177 def check_apps_restart_condition(self):
178diff --git a/reviewtools/tests/test_sr_lint.py b/reviewtools/tests/test_sr_lint.py
179index 2f08d21..59e88d5 100644
180--- a/reviewtools/tests/test_sr_lint.py
181+++ b/reviewtools/tests/test_sr_lint.py
182@@ -2307,7 +2307,6 @@ class TestSnapReviewLint(sr_tests.TestSnapReview):
183 "interface": "dbus",
184 "bus": "system",
185 "name": "foo",
186- "activatable": True,
187 }
188 },
189 )
190@@ -2317,15 +2316,17 @@ class TestSnapReviewLint(sr_tests.TestSnapReview):
191 "foo": {
192 "command": "bin/bar",
193 "daemon": "dbus",
194+ "daemon-scope": "system",
195 "bus-name": "foo",
196 "slots": ["system"],
197+ "activates-on": ["system"]
198 }
199 },
200 )
201 c = SnapReviewLint(self.test_name)
202 c.check_apps_invalid_combinations()
203 r = c.review_report
204- expected_counts = {"info": 5, "warn": 0, "error": 0}
205+ expected_counts = {"info": 6, "warn": 0, "error": 0}
206 self.check_results(r, expected_counts)
207
208 def test_check_apps_invalid_combinations_dbus_bus_name_mismatch(self):
209@@ -2337,7 +2338,6 @@ class TestSnapReviewLint(sr_tests.TestSnapReview):
210 "interface": "dbus",
211 "bus": "system",
212 "name": "mismatch",
213- "activatable": True,
214 }
215 },
216 )
217@@ -2422,7 +2422,7 @@ class TestSnapReviewLint(sr_tests.TestSnapReview):
218 c = SnapReviewLint(self.test_name)
219 c.check_apps_invalid_combinations()
220 r = c.review_report
221- expected_counts = {"info": None, "warn": 0, "error": 1}
222+ expected_counts = {"info": None, "warn": 1, "error": 1}
223 self.check_results(r, expected_counts)
224
225 def test_check_apps_invalid_combinations_dbus_activatable_simple(self):
226@@ -2477,6 +2477,114 @@ class TestSnapReviewLint(sr_tests.TestSnapReview):
227 expected_counts = {"info": None, "warn": 0, "error": 0}
228 self.check_results(r, expected_counts)
229
230+ def test_check_apps_dbus_activates_on(self):
231+ """Test check_apps_invalid_combinations() - dbus activatable/simple"""
232+ self.set_test_snap_yaml(
233+ "slots", {"system": {"interface": "dbus", "bus": "system", "name": "foo"}}
234+ )
235+ self.set_test_snap_yaml(
236+ "apps",
237+ {
238+ "foo": {
239+ "command": "bin/bar",
240+ "daemon": "simple",
241+ "bus-name": "foo",
242+ "slots": ["system"],
243+ }
244+ },
245+ )
246+ c = SnapReviewLint(self.test_name)
247+ c.check_apps_invalid_combinations()
248+ r = c.review_report
249+ expected_counts = {"info": None, "warn": 0, "error": 0}
250+ self.check_results(r, expected_counts)
251+
252+ def test_check_apps_dbus_activates_on_without_daemon_scope(self):
253+ """Test check_apps_invalid_combinations() - dbus activatable without bus-name"""
254+ self.set_test_snap_yaml(
255+ "slots", {"system": {"interface": "dbus", "bus": "system", "name": "foo"}}
256+ )
257+ self.set_test_snap_yaml(
258+ "apps",
259+ {
260+ "foo": {
261+ "command": "bin/bar",
262+ "daemon": "dbus",
263+ "activates-on": ["foo"],
264+ }
265+ },
266+ )
267+ c = SnapReviewLint(self.test_name)
268+ c.check_apps_invalid_combinations()
269+ r = c.review_report
270+ expected_counts = {"info": None, "warn": 0, "error": 1}
271+ self.check_results(r, expected_counts)
272+
273+ def test_check_apps_dbus_activates_on_without_bus_name(self):
274+ """Test check_apps_invalid_combinations() - dbus activatable without bus-name"""
275+ self.set_test_snap_yaml(
276+ "slots", {"system": {"interface": "dbus", "bus": "system", "name": "foo"}}
277+ )
278+ self.set_test_snap_yaml(
279+ "apps",
280+ {
281+ "foo": {
282+ "command": "bin/bar",
283+ "daemon": "dbus",
284+ "daemon-scope": "system",
285+ "activates-on": ["system"],
286+ }
287+ },
288+ )
289+ c = SnapReviewLint(self.test_name)
290+ c.check_apps_invalid_combinations()
291+ r = c.review_report
292+ expected_counts = {"info": None, "warn": 0, "error": 0}
293+ self.check_results(r, expected_counts)
294+
295+ def test_check_apps_dbus_activates_on_user_session_scope(self):
296+ """Test check_apps_invalid_combinations() - dbus activatable on user session scope"""
297+ self.set_test_snap_yaml(
298+ "slots", {"foo": {"interface": "dbus", "bus": "session", "name": "foo"}}
299+ )
300+ self.set_test_snap_yaml(
301+ "apps",
302+ {
303+ "foo": {
304+ "command": "bin/bar",
305+ "daemon": "dbus",
306+ "daemon-scope": "user",
307+ "activates-on": ["foo"],
308+ }
309+ },
310+ )
311+ c = SnapReviewLint(self.test_name)
312+ c.check_apps_invalid_combinations()
313+ r = c.review_report
314+ expected_counts = {"info": None, "warn": 0, "error": 0}
315+ self.check_results(r, expected_counts)
316+
317+ def test_check_apps_dbus_activates_on_without_bus_name_invalid(self):
318+ """Test check_apps_invalid_combinations() - dbus activatable/simple without bus-name but invalid activates-on name"""
319+ self.set_test_snap_yaml(
320+ "slots", {"system": {"interface": "dbus", "bus": "system", "name": "foo"}}
321+ )
322+ self.set_test_snap_yaml(
323+ "apps",
324+ {
325+ "foo": {
326+ "command": "bin/bar",
327+ "daemon": "dbus",
328+ "activates-on": ["bar"],
329+ }
330+ },
331+ )
332+ c = SnapReviewLint(self.test_name)
333+ c.check_apps_invalid_combinations()
334+ r = c.review_report
335+ expected_counts = {"info": None, "warn": 0, "error": 1}
336+ self.check_results(r, expected_counts)
337+
338 def test_check_apps_invalid_combinations_daemon_scope(self):
339 """Test check_apps_invalid_combinations() - daemon-scope"""
340 self.set_test_snap_yaml(
341diff --git a/tests/test.sh.expected b/tests/test.sh.expected
342index 631c6f3..ceb88b5 100644
343--- a/tests/test.sh.expected
344+++ b/tests/test.sh.expected
345@@ -5471,7 +5471,7 @@ network-manager_1.2.2-1+test1_amd64.snap: FAIL
346 "manual_review": false,
347 "text": "OK"
348 },
349- "lint-snap-v2:dbus_activatable:networkmanager": {
350+ "lint-snap-v2:dbus_activatable": {
351 "manual_review": false,
352 "text": "OK"
353 },
354@@ -5713,7 +5713,7 @@ network-manager_1.2.2-1+test1_amd64.snap: FAIL
355 "manual_review": false,
356 "text": "OK"
357 },
358- "lint-snap-v2:dbus_activatable:networkmanager": {
359+ "lint-snap-v2:dbus_activatable": {
360 "manual_review": false,
361 "text": "OK"
362 },
363@@ -11269,6 +11269,10 @@ snappy-test-iface-attribs_0.1_all.snap: pass
364 "manual_review": false,
365 "text": "OK"
366 },
367+ "lint-snap-v2:dbus_activatable": {
368+ "manual_review": false,
369+ "text": "OK"
370+ },
371 "lint-snap-v2:description": {
372 "manual_review": false,
373 "text": "description is too short: 'This is a test snap'"
374@@ -11485,6 +11489,10 @@ snappy-test-iface-attribs_0.1_all.snap: pass
375 "manual_review": false,
376 "text": "OK"
377 },
378+ "lint-snap-v2:dbus_activatable": {
379+ "manual_review": false,
380+ "text": "OK"
381+ },
382 "lint-snap-v2:description": {
383 "manual_review": false,
384 "text": "description is too short: 'This is a test snap'"
385@@ -14095,7 +14103,7 @@ test-all-app_1_all.snap: FAIL
386 "manual_review": false,
387 "text": "OK"
388 },
389- "lint-snap-v2:dbus_activatable:dockerd": {
390+ "lint-snap-v2:dbus_activatable": {
391 "manual_review": false,
392 "text": "OK"
393 },
394@@ -17072,7 +17080,7 @@ test-all-app_1_all.snap: FAIL
395 "manual_review": false,
396 "text": "OK"
397 },
398- "lint-snap-v2:dbus_activatable:dockerd": {
399+ "lint-snap-v2:dbus_activatable": {
400 "manual_review": false,
401 "text": "OK"
402 },
403@@ -21557,6 +21565,10 @@ test-base-slots-plugs_1.0_all.snap: FAIL
404 "manual_review": false,
405 "text": "OK"
406 },
407+ "lint-snap-v2:dbus_activatable": {
408+ "manual_review": false,
409+ "text": "OK"
410+ },
411 "lint-snap-v2:dbus_mixed_slots:cmd": {
412 "manual_review": false,
413 "text": "OK"
414@@ -21767,6 +21779,10 @@ test-base-slots-plugs_1.0_all.snap: FAIL
415 "manual_review": false,
416 "text": "OK"
417 },
418+ "lint-snap-v2:dbus_activatable": {
419+ "manual_review": false,
420+ "text": "OK"
421+ },
422 "lint-snap-v2:dbus_mixed_slots:cmd": {
423 "manual_review": false,
424 "text": "OK"
425@@ -25438,6 +25454,10 @@ test-content_0.1_all.snap: pass
426 "manual_review": false,
427 "text": "OK"
428 },
429+ "lint-snap-v2:dbus_activatable": {
430+ "manual_review": false,
431+ "text": "OK"
432+ },
433 "lint-snap-v2:description": {
434 "manual_review": false,
435 "text": "OK"
436@@ -25778,6 +25798,10 @@ test-content_0.1_all.snap: pass
437 "manual_review": false,
438 "text": "OK"
439 },
440+ "lint-snap-v2:dbus_activatable": {
441+ "manual_review": false,
442+ "text": "OK"
443+ },
444 "lint-snap-v2:description": {
445 "manual_review": false,
446 "text": "OK"
447@@ -29445,7 +29469,7 @@ test-hello-dbus_2_amd64.snap: FAIL
448 "manual_review": false,
449 "text": "OK"
450 },
451- "lint-snap-v2:dbus_activatable:dbusd-system": {
452+ "lint-snap-v2:dbus_activatable": {
453 "manual_review": false,
454 "text": "OK"
455 },
456@@ -29886,7 +29910,7 @@ test-hello-dbus_2_amd64.snap: FAIL
457 "manual_review": false,
458 "text": "OK"
459 },
460- "lint-snap-v2:dbus_activatable:dbusd-system": {
461+ "lint-snap-v2:dbus_activatable": {
462 "manual_review": false,
463 "text": "OK"
464 },
465@@ -33113,6 +33137,10 @@ test-missing-required-attributes_0_all.snap: FAIL
466 "manual_review": false,
467 "text": "OK"
468 },
469+ "lint-snap-v2:dbus_activatable": {
470+ "manual_review": false,
471+ "text": "OK"
472+ },
473 "lint-snap-v2:dbus_mixed_slots:env": {
474 "manual_review": false,
475 "text": "OK"
476@@ -33343,6 +33371,10 @@ test-missing-required-attributes_0_all.snap: FAIL
477 "manual_review": false,
478 "text": "OK"
479 },
480+ "lint-snap-v2:dbus_activatable": {
481+ "manual_review": false,
482+ "text": "OK"
483+ },
484 "lint-snap-v2:dbus_mixed_slots:env": {
485 "manual_review": false,
486 "text": "OK"
487@@ -33576,6 +33608,10 @@ test-mpris-name-matches_0_amd64.snap: FAIL
488 "manual_review": false,
489 "text": "OK"
490 },
491+ "lint-snap-v2:dbus_activatable": {
492+ "manual_review": false,
493+ "text": "OK"
494+ },
495 "lint-snap-v2:description": {
496 "manual_review": false,
497 "text": "description is too short: 'My description\n'"
498@@ -33768,6 +33804,10 @@ test-mpris-name-matches_0_amd64.snap: FAIL
499 "manual_review": false,
500 "text": "OK"
501 },
502+ "lint-snap-v2:dbus_activatable": {
503+ "manual_review": false,
504+ "text": "OK"
505+ },
506 "lint-snap-v2:description": {
507 "manual_review": false,
508 "text": "description is too short: 'My description\n'"
509@@ -33969,6 +34009,10 @@ test-mpris-name-mismatch_0_amd64.snap: FAIL
510 "manual_review": false,
511 "text": "OK"
512 },
513+ "lint-snap-v2:dbus_activatable": {
514+ "manual_review": false,
515+ "text": "OK"
516+ },
517 "lint-snap-v2:description": {
518 "manual_review": false,
519 "text": "description is too short: 'My description\n'"
520@@ -34161,6 +34205,10 @@ test-mpris-name-mismatch_0_amd64.snap: FAIL
521 "manual_review": false,
522 "text": "OK"
523 },
524+ "lint-snap-v2:dbus_activatable": {
525+ "manual_review": false,
526+ "text": "OK"
527+ },
528 "lint-snap-v2:description": {
529 "manual_review": false,
530 "text": "description is too short: 'My description\n'"
531@@ -39151,6 +39199,10 @@ test-slot-reference-hook_1_all.snap: FAIL
532 "manual_review": false,
533 "text": "OK"
534 },
535+ "lint-snap-v2:dbus_activatable": {
536+ "manual_review": false,
537+ "text": "OK"
538+ },
539 "lint-snap-v2:description": {
540 "manual_review": false,
541 "text": "description is too short: '...'"
542@@ -39351,6 +39403,10 @@ test-slot-reference-hook_1_all.snap: FAIL
543 "manual_review": false,
544 "text": "OK"
545 },
546+ "lint-snap-v2:dbus_activatable": {
547+ "manual_review": false,
548+ "text": "OK"
549+ },
550 "lint-snap-v2:description": {
551 "manual_review": false,
552 "text": "description is too short: '...'"
553@@ -39568,6 +39624,10 @@ test-slot-reference_1_all.snap: FAIL
554 "manual_review": false,
555 "text": "OK"
556 },
557+ "lint-snap-v2:dbus_activatable": {
558+ "manual_review": false,
559+ "text": "OK"
560+ },
561 "lint-snap-v2:description": {
562 "manual_review": false,
563 "text": "description is too short: '...'"
564@@ -39756,6 +39816,10 @@ test-slot-reference_1_all.snap: FAIL
565 "manual_review": false,
566 "text": "OK"
567 },
568+ "lint-snap-v2:dbus_activatable": {
569+ "manual_review": false,
570+ "text": "OK"
571+ },
572 "lint-snap-v2:description": {
573 "manual_review": false,
574 "text": "description is too short: '...'"
575@@ -39953,6 +40017,10 @@ test-slot-toplevel_1_all.snap: FAIL
576 "manual_review": false,
577 "text": "OK"
578 },
579+ "lint-snap-v2:dbus_activatable": {
580+ "manual_review": false,
581+ "text": "OK"
582+ },
583 "lint-snap-v2:description": {
584 "manual_review": false,
585 "text": "description is too short: '...'"
586@@ -40137,6 +40205,10 @@ test-slot-toplevel_1_all.snap: FAIL
587 "manual_review": false,
588 "text": "OK"
589 },
590+ "lint-snap-v2:dbus_activatable": {
591+ "manual_review": false,
592+ "text": "OK"
593+ },
594 "lint-snap-v2:description": {
595 "manual_review": false,
596 "text": "description is too short: '...'"
597@@ -45055,11 +45127,7 @@ test-top-level-dbus-slot_1_amd64.snap: FAIL
598 "manual_review": false,
599 "text": "OK"
600 },
601- "lint-snap-v2:dbus_activatable:dbusd-session": {
602- "manual_review": false,
603- "text": "OK"
604- },
605- "lint-snap-v2:dbus_activatable:dbusd-system": {
606+ "lint-snap-v2:dbus_activatable": {
607 "manual_review": false,
608 "text": "OK"
609 },
610@@ -45319,11 +45387,7 @@ test-top-level-dbus-slot_1_amd64.snap: FAIL
611 "manual_review": false,
612 "text": "OK"
613 },
614- "lint-snap-v2:dbus_activatable:dbusd-session": {
615- "manual_review": false,
616- "text": "OK"
617- },
618- "lint-snap-v2:dbus_activatable:dbusd-system": {
619+ "lint-snap-v2:dbus_activatable": {
620 "manual_review": false,
621 "text": "OK"
622 },

Subscribers

People subscribed via source and target branches

to all changes: