diff -Nru click-reviewers-tools-0.34/check-names.list click-reviewers-tools-0.34/check-names.list --- click-reviewers-tools-0.34/check-names.list 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/check-names.list 2015-10-09 20:16:30.000000000 +0000 @@ -86,6 +86,7 @@ lint:pkgname_valid| lint:sdk_security_extension| lint:sha512sums| +lint:snappy_architecture_deprecated|https://developer.ubuntu.com/en/snappy/guides/package-metadata/ lint:snappy_config_hook_executable| lint:snappy_in_binaries| lint:snappy_in_services| @@ -166,6 +167,7 @@ snappy-systemd:package_yaml_absolute_path| snappy-systemd:package_yaml_bus-name_empty| snappy-systemd:package_yaml_bus-name_format|http://dbus.freedesktop.org/doc/dbus-specification.html +snappy-systemd:package_yaml_bus-name_framework| snappy-systemd:package_yaml_bus-name_matches_name| snappy-systemd:package_yaml_description_empty| snappy-systemd:package_yaml_description_present| diff -Nru click-reviewers-tools-0.34/clickreviews/cr_common.py click-reviewers-tools-0.34/clickreviews/cr_common.py --- click-reviewers-tools-0.34/clickreviews/cr_common.py 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/clickreviews/cr_common.py 2015-10-09 20:16:30.000000000 +0000 @@ -90,6 +90,7 @@ snappy_required = ["name", "version"] # optional snappy fields here (may be required by appstore) snappy_optional = ["architecture", + "architectures", "binaries", "caps", "config", diff -Nru click-reviewers-tools-0.34/clickreviews/cr_lint.py click-reviewers-tools-0.34/clickreviews/cr_lint.py --- click-reviewers-tools-0.34/clickreviews/cr_lint.py 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/clickreviews/cr_lint.py 2015-10-09 20:16:30.000000000 +0000 @@ -54,6 +54,7 @@ self.valid_compiled_architectures = ['armhf', 'i386', 'amd64', + 'arm64', ] self.valid_control_architectures = ['all', 'multi', @@ -853,23 +854,32 @@ t = 'info' n = self._get_check_name('%s_architecture_valid' % test_str) s = 'OK' - if 'architecture' not in my_dict: + if 'architecture' not in my_dict and 'architectures' not in my_dict: s = 'OK (architecture not specified)' self._add_result(t, n, s) return + key = 'architecture' + if self.is_snap and 'architectures' in my_dict: + # new yaml allows for 'architecture' and 'architectures' + key = 'architectures' + archs_list = list(self.valid_control_architectures) archs_list.remove("multi") - if isinstance(my_dict['architecture'], str) and \ - my_dict['architecture'] not in archs_list: + if self.is_snap and key == 'architectures' and \ + isinstance(my_dict[key], str): + # new yaml uses 'architectures' that must be a list + t = 'error' + s = "not a valid architecture: %s (not a list)" % my_dict[key] + elif isinstance(my_dict[key], str) and my_dict[key] not in archs_list: t = 'error' - s = "not a valid architecture: %s" % my_dict['architecture'] - elif isinstance(my_dict['architecture'], list): + s = "not a valid architecture: %s" % my_dict[key] + elif isinstance(my_dict[key], list): if not self.is_snap: archs_list.remove("all") bad_archs = [] - for a in my_dict['architecture']: + for a in my_dict[key]: if a not in archs_list: bad_archs.append(a) if len(bad_archs) > 0: @@ -1010,6 +1020,17 @@ self._verify_architecture(self.pkg_yaml, "package yaml") + t = 'info' + n = self._get_check_name('snappy_architecture_deprecated') + s = 'OK' + l = None + if 'architecture' in self.pkg_yaml: + t = 'warn' + s = "Found deprecated 'architecture' field in " + \ + "meta/package.yaml. Use 'architectures' instead" + l = 'https://developer.ubuntu.com/en/snappy/guides/package-metadata/' + self._add_result(t, n, s, link=l) + def check_snappy_unknown_entries(self): '''Check for any unknown fields''' if not self.is_snap: diff -Nru click-reviewers-tools-0.34/clickreviews/cr_security.py click-reviewers-tools-0.34/clickreviews/cr_security.py --- click-reviewers-tools-0.34/clickreviews/cr_security.py 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/clickreviews/cr_security.py 2015-10-09 20:16:30.000000000 +0000 @@ -852,8 +852,14 @@ 'apparmor_profile', extra='%s (%s)' % (v, f)) s = "OK" if v not in p: - self._add_result('warn', n, - "could not find '%s' in profile" % v) + if v.startswith('@') and \ + ("# Unrestricted AppArmor policy" in p or + "# This profile offers no protection" in p): + self._add_result('info', n, + "SKIPPED for '%s' (boilerplate)" % v) + else: + self._add_result('warn', n, + "could not find '%s' in profile" % v) continue self._add_result(t, n, s) diff -Nru click-reviewers-tools-0.34/clickreviews/cr_systemd.py click-reviewers-tools-0.34/clickreviews/cr_systemd.py --- click-reviewers-tools-0.34/clickreviews/cr_systemd.py 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/clickreviews/cr_systemd.py 2015-10-09 20:16:30.000000000 +0000 @@ -280,12 +280,21 @@ self.pkg_yaml['services']), 'package_yaml') - def _verify_service_bus_name(self, pkgname, my_dict, test_str): + def _verify_service_bus_name(self, pkgname, my_dict, test_str, is_fwk): for app in sorted(my_dict): if 'bus-name' not in my_dict[app]: continue t = 'info' + n = self._get_check_name('%s_bus-name_framework' % test_str, + app=app) + s = 'OK' + if not is_fwk: + t = 'error' + s = "Use of bus-name requires package be of 'type: framework'" + self._add_result(t, n, s) + + t = 'info' n = self._get_check_name('%s_bus-name_empty' % test_str, app=app) s = 'OK' if len(my_dict[app]['bus-name']) == 0: @@ -338,10 +347,15 @@ '''Check snappy package.yaml bus-name''' if not self.is_snap or 'services' not in self.pkg_yaml: return + is_framework = False + if 'type' in self.pkg_yaml and self.pkg_yaml['type'] == 'framework': + is_framework = True + self._verify_service_bus_name(self.pkg_yaml['name'], self._create_dict( self.pkg_yaml['services']), - 'package_yaml') + 'package_yaml', + is_framework) def _verify_service_ports(self, pkgname, my_dict, test_str): for app in sorted(my_dict): diff -Nru click-reviewers-tools-0.34/clickreviews/cr_tests.py click-reviewers-tools-0.34/clickreviews/cr_tests.py --- click-reviewers-tools-0.34/clickreviews/cr_tests.py 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/clickreviews/cr_tests.py 2015-10-09 20:16:30.000000000 +0000 @@ -436,8 +436,8 @@ self.test_pkg_yaml = dict() self.set_test_pkg_yaml("name", self.test_control['Package']) self.set_test_pkg_yaml("version", self.test_control['Version']) - self.set_test_pkg_yaml("architecture", - self.test_control['Architecture']) + self.set_test_pkg_yaml("architectures", + [self.test_control['Architecture']]) self._update_test_pkg_yaml() self.test_hashes_yaml = dict() diff -Nru click-reviewers-tools-0.34/clickreviews/tests/test_cr_lint.py click-reviewers-tools-0.34/clickreviews/tests/test_cr_lint.py --- click-reviewers-tools-0.34/clickreviews/tests/test_cr_lint.py 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/clickreviews/tests/test_cr_lint.py 2015-10-09 20:16:30.000000000 +0000 @@ -122,6 +122,15 @@ expected_counts = {'info': 1, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) + def test_check_architecture_arm64(self): + '''Test check_architecture() - arm64''' + self.set_test_control("Architecture", "arm64") + c = ClickReviewLint(self.test_name) + c.check_architecture() + r = c.click_report + expected_counts = {'info': 1, 'warn': 0, 'error': 0} + self.check_results(r, expected_counts) + def test_check_architecture_amd64(self): '''Test check_architecture() - amd64''' self.set_test_control("Architecture", "amd64") @@ -1242,113 +1251,153 @@ def test_check_snappy_missing_arch(self): '''Test check_snappy_architecture() (missing)''' - self.set_test_pkg_yaml("architecture", None) + self.set_test_pkg_yaml("architectures", None) c = ClickReviewLint(self.test_name) + c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 1, 'warn': 0, 'error': 0} + expected_counts = {'info': 2, 'warn': 0, 'error': 0} + self.check_results(r, expected_counts) + + def test_check_snappy_arch_all_deprecated(self): + '''Test check_snappy_architecture() (deprecated, all)''' + self.set_test_pkg_yaml("architecture", "all") + c = ClickReviewLint(self.test_name) + c.is_snap = True + c.check_snappy_architecture() + r = c.click_report + expected_counts = {'info': 1, 'warn': 1, 'error': 0} + self.check_results(r, expected_counts) + + def test_check_snappy_arch_amd64_deprecated(self): + '''Test check_snappy_architecture() (deprecated, all)''' + self.set_test_pkg_yaml("architecture", "amd64") + c = ClickReviewLint(self.test_name) + c.is_snap = True + c.check_snappy_architecture() + r = c.click_report + expected_counts = {'info': 1, 'warn': 1, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_arch_all(self): '''Test check_snappy_architecture() (all)''' - self.set_test_pkg_yaml("architecture", "all") + self.set_test_pkg_yaml("architectures", ["all"]) c = ClickReviewLint(self.test_name) + c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 1, 'warn': 0, 'error': 0} + expected_counts = {'info': 2, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_arch_single_armhf(self): '''Test check_snappy_architecture() (single arch, armhf)''' - self.set_test_pkg_yaml("architecture", "armhf") + self.set_test_pkg_yaml("architectures", ["armhf"]) c = ClickReviewLint(self.test_name) + c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 1, 'warn': 0, 'error': 0} + expected_counts = {'info': 2, 'warn': 0, 'error': 0} + self.check_results(r, expected_counts) + + def test_check_snappy_arch_single_arm64(self): + '''Test check_snappy_architecture() (single arch, arm64)''' + self.set_test_pkg_yaml("architectures", ["arm64"]) + c = ClickReviewLint(self.test_name) + c.is_snap = True + c.check_snappy_architecture() + r = c.click_report + expected_counts = {'info': 2, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_arch_single_i386(self): '''Test check_snappy_architecture() (single arch, i386)''' - self.set_test_pkg_yaml("architecture", "i386") + self.set_test_pkg_yaml("architectures", ["i386"]) c = ClickReviewLint(self.test_name) + c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 1, 'warn': 0, 'error': 0} + expected_counts = {'info': 2, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_arch_single_amd64(self): '''Test check_snappy_architecture() (single arch, amd64)''' - self.set_test_pkg_yaml("architecture", "amd64") + self.set_test_pkg_yaml("architectures", ["amd64"]) c = ClickReviewLint(self.test_name) + c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 1, 'warn': 0, 'error': 0} + expected_counts = {'info': 2, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_arch_single_nonexistent(self): '''Test check_snappy_architecture() (single nonexistent arch)''' - self.set_test_pkg_yaml("architecture", "nonexistent") + self.set_test_pkg_yaml("architectures", ["nonexistent"]) c = ClickReviewLint(self.test_name) + c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 0, 'warn': 0, 'error': 1} + expected_counts = {'info': None, 'warn': 0, 'error': 1} self.check_results(r, expected_counts) def test_check_snappy_arch_single_multi(self): '''Test check_snappy_architecture() (single arch: invalid multi)''' - self.set_test_pkg_yaml("architecture", "multi") + self.set_test_pkg_yaml("architectures", "multi") c = ClickReviewLint(self.test_name) + c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 0, 'warn': 0, 'error': 1} + expected_counts = {'info': None, 'warn': 0, 'error': 1} self.check_results(r, expected_counts) def test_check_snappy_valid_arch_multi(self): '''Test check_snappy_architecture() (valid multi)''' arch = "multi" - self.set_test_pkg_yaml("architecture", ["armhf"]) + self.set_test_pkg_yaml("architectures", ["armhf"]) self.set_test_control("Architecture", arch) test_name = "%s_%s_%s.snap" % (self.test_control['Package'], self.test_control['Version'], arch) c = ClickReviewLint(test_name) + c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 1, 'warn': 0, 'error': 0} + expected_counts = {'info': 2, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_valid_arch_multi2(self): '''Test check_snappy_architecture() (valid multi2)''' arch = "multi" - self.set_test_pkg_yaml("architecture", ["armhf", "i386"]) + self.set_test_pkg_yaml("architectures", ["armhf", "i386"]) self.set_test_control("Architecture", arch) test_name = "%s_%s_%s.snap" % (self.test_control['Package'], self.test_control['Version'], arch) c = ClickReviewLint(test_name) + c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 1, 'warn': 0, 'error': 0} + expected_counts = {'info': 2, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_invalid_arch_multi_nonexistent(self): '''Test check_snappy_architecture() (invalid multi)''' arch = "multi" - self.set_test_pkg_yaml("architecture", ["armhf", "nonexistent"]) + self.set_test_pkg_yaml("architectures", ["armhf", "nonexistent"]) self.set_test_control("Architecture", arch) test_name = "%s_%s_%s.snap" % (self.test_control['Package'], self.test_control['Version'], arch) c = ClickReviewLint(test_name) + c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 0, 'warn': 0, 'error': 1} + expected_counts = {'info': None, 'warn': 0, 'error': 1} self.check_results(r, expected_counts) def test_check_snappy_invalid_arch_multi_all(self): '''Test check_snappy_architecture() (invalid all)''' arch = "multi" - self.set_test_pkg_yaml("architecture", ["armhf", "all"]) + self.set_test_pkg_yaml("architectures", ["armhf", "all"]) self.set_test_control("Architecture", arch) test_name = "%s_%s_%s.snap" % (self.test_control['Package'], self.test_control['Version'], @@ -1357,13 +1406,13 @@ c.is_snap = True c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 1, 'warn': 0, 'error': 0} + expected_counts = {'info': 2, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_invalid_arch_multi_multi(self): '''Test check_snappy_architecture() (invalid multi)''' arch = "multi" - self.set_test_pkg_yaml("architecture", ["multi", "armhf"]) + self.set_test_pkg_yaml("architectures", ["multi", "armhf"]) self.set_test_control("Architecture", arch) test_name = "%s_%s_%s.snap" % (self.test_control['Package'], self.test_control['Version'], @@ -1371,7 +1420,7 @@ c = ClickReviewLint(test_name) c.check_snappy_architecture() r = c.click_report - expected_counts = {'info': 0, 'warn': 0, 'error': 1} + expected_counts = {'info': None, 'warn': 0, 'error': 1} self.check_results(r, expected_counts) def test_check_snappy_unknown_entries(self): diff -Nru click-reviewers-tools-0.34/clickreviews/tests/test_cr_security.py click-reviewers-tools-0.34/clickreviews/tests/test_cr_security.py --- click-reviewers-tools-0.34/clickreviews/tests/test_cr_security.py 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/clickreviews/tests/test_cr_security.py 2015-10-09 20:16:30.000000000 +0000 @@ -1286,6 +1286,58 @@ expected_counts = {'info': None, 'warn': 1, 'error': 0} self.check_results(report, expected_counts) + def test_check_apparmor_profile_missing_app_pkgname(self): + '''Test check_apparmor_profile() - missing @{APP_PKGNAME}''' + policy = ''' +###VAR### +###PROFILEATTACH### { + #include + @{CLICK_DIR}/*/@{APP_VERSION}/** mrklix, +} +''' + self.set_test_security_profile(self.default_appname, policy) + c = ClickReviewSecurity(self.test_name) + c.check_apparmor_profile() + report = c.click_report + expected_counts = {'info': None, 'warn': 1, 'error': 0} + self.check_results(report, expected_counts) + + def test_check_apparmor_profile_missing_vars_unconfined(self): + '''Test check_apparmor_profile() - missing vars with unconfined + boilerplate (first test) + ''' + policy = ''' +# Unrestricted AppArmor policy for fwk-name_svc +###VAR### +###PROFILEATTACH### { + #include +} +''' + self.set_test_security_profile(self.default_appname, policy) + c = ClickReviewSecurity(self.test_name) + c.check_apparmor_profile() + report = c.click_report + expected_counts = {'info': 5, 'warn': 0, 'error': 0} + self.check_results(report, expected_counts) + + def test_check_apparmor_profile_missing_var_unconfined2(self): + '''Test check_apparmor_profile() - missing vars with unconfined + boilerplate (second test) + ''' + policy = ''' +# This profile offers no protection +###VAR### +###PROFILEATTACH### { + #include +} +''' + self.set_test_security_profile(self.default_appname, policy) + c = ClickReviewSecurity(self.test_name) + c.check_apparmor_profile() + report = c.click_report + expected_counts = {'info': 5, 'warn': 0, 'error': 0} + self.check_results(report, expected_counts) + def test_check_security_template_default(self): '''Test check_security_template() - default''' self.set_test_security_manifest(self.default_appname, "template", None) diff -Nru click-reviewers-tools-0.34/clickreviews/tests/test_cr_systemd.py click-reviewers-tools-0.34/clickreviews/tests/test_cr_systemd.py --- click-reviewers-tools-0.34/clickreviews/tests/test_cr_systemd.py 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/clickreviews/tests/test_cr_systemd.py 2015-10-09 20:16:30.000000000 +0000 @@ -450,10 +450,11 @@ self._set_service([("start", "bin/test-app"), ("description", "something"), ("bus-name", name)]) + self.set_test_pkg_yaml("type", 'framework') c = ClickReviewSystemd(self.test_name) c.check_snappy_service_bus_name() r = c.click_report - expected_counts = {'info': 3, 'warn': 0, 'error': 0} + expected_counts = {'info': 4, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_service_bus_name_appname(self): @@ -462,10 +463,37 @@ self._set_service([("start", "bin/test-app"), ("description", "something"), ("bus-name", "%s.%s" % (name, "test-app"))]) + self.set_test_pkg_yaml("type", 'framework') c = ClickReviewSystemd(self.test_name) c.check_snappy_service_bus_name() r = c.click_report - expected_counts = {'info': 3, 'warn': 0, 'error': 0} + expected_counts = {'info': 4, 'warn': 0, 'error': 0} + self.check_results(r, expected_counts) + + def test_check_snappy_service_bus_name_missing_framework_app(self): + '''Test check_snappy_service_bus_name() - missing framework (app)''' + name = self.test_name.split('_')[0] + self._set_service([("start", "bin/test-app"), + ("description", "something"), + ("bus-name", "%s.%s" % (name, "test-app"))]) + self.set_test_pkg_yaml("type", 'app') + c = ClickReviewSystemd(self.test_name) + c.check_snappy_service_bus_name() + r = c.click_report + expected_counts = {'info': None, 'warn': 0, 'error': 1} + self.check_results(r, expected_counts) + + def test_check_snappy_service_bus_name_missing_framework_oem(self): + '''Test check_snappy_service_bus_name() - missing framework (oem)''' + name = self.test_name.split('_')[0] + self._set_service([("start", "bin/test-app"), + ("description", "something"), + ("bus-name", "%s.%s" % (name, "test-app"))]) + self.set_test_pkg_yaml("type", 'oem') + c = ClickReviewSystemd(self.test_name) + c.check_snappy_service_bus_name() + r = c.click_report + expected_counts = {'info': None, 'warn': 0, 'error': 1} self.check_results(r, expected_counts) def test_check_snappy_service_bus_name_pkgname_vendor(self): @@ -476,11 +504,12 @@ self._set_service([("start", "bin/test-app"), ("description", "something"), ("bus-name", "com.isp.%s" % name)]) + self.set_test_pkg_yaml("type", 'framework') c = ClickReviewSystemd(self.test_name) c.is_snap = True c.check_snappy_service_bus_name() r = c.click_report - expected_counts = {'info': 3, 'warn': 0, 'error': 0} + expected_counts = {'info': 4, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_service_bus_name_appname_vendor(self): @@ -491,11 +520,12 @@ self._set_service([("start", "bin/test-app"), ("description", "something"), ("bus-name", "com.isp.%s.%s" % (name, "test-app"))]) + self.set_test_pkg_yaml("type", 'framework') c = ClickReviewSystemd(self.test_name) c.is_snap = True c.check_snappy_service_bus_name() r = c.click_report - expected_counts = {'info': 3, 'warn': 0, 'error': 0} + expected_counts = {'info': 4, 'warn': 0, 'error': 0} self.check_results(r, expected_counts) def test_check_snappy_service_bus_name_pkgname_bad(self): @@ -505,6 +535,7 @@ self._set_service([("start", "bin/test-app"), ("description", "something"), ("bus-name", name + "-bad")]) + self.set_test_pkg_yaml("type", 'framework') c = ClickReviewSystemd(self.test_name) c.check_snappy_service_bus_name() r = c.click_report @@ -517,6 +548,7 @@ self._set_service([("start", "bin/test-app"), ("description", "something"), ("bus-name", "%s.%s-bad" % (name, "test-app"))]) + self.set_test_pkg_yaml("type", 'framework') c = ClickReviewSystemd(self.test_name) c.check_snappy_service_bus_name() r = c.click_report @@ -531,6 +563,7 @@ self._set_service([("start", "bin/test-app"), ("description", "something"), ("bus-name", "com.isp.%s-bad" % name)]) + self.set_test_pkg_yaml("type", 'framework') c = ClickReviewSystemd(self.test_name) c.is_snap = True c.check_snappy_service_bus_name() @@ -547,6 +580,7 @@ ("description", "something"), ("bus-name", "com.isp.%s.%s-bad" % (name, "test-app"))]) + self.set_test_pkg_yaml("type", 'framework') c = ClickReviewSystemd(self.test_name) c.is_snap = True c.check_snappy_service_bus_name() @@ -561,6 +595,7 @@ self._set_service([("start", "bin/test-app"), ("description", "something"), ("bus-name", "")]) + self.set_test_pkg_yaml("type", 'framework') c = ClickReviewSystemd(self.test_name) c.check_snappy_service_bus_name() r = c.click_report @@ -574,6 +609,7 @@ self._set_service([("start", "bin/test-app"), ("description", "something"), ("bus-name", "name$")]) + self.set_test_pkg_yaml("type", 'framework') c = ClickReviewSystemd(self.test_name) c.check_snappy_service_bus_name() r = c.click_report diff -Nru click-reviewers-tools-0.34/debian/bzr-builder.manifest click-reviewers-tools-0.34/debian/bzr-builder.manifest --- click-reviewers-tools-0.34/debian/bzr-builder.manifest 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/debian/bzr-builder.manifest 2015-10-09 20:16:31.000000000 +0000 @@ -1,2 +1,2 @@ -# bzr-builder format 0.3 deb-version {debupstream}-0~520 -lp:click-reviewers-tools revid:jamie@ubuntu.com-20150916140455-n3ysrfpjahl8c1bd +# bzr-builder format 0.3 deb-version {debupstream}-0~524 +lp:click-reviewers-tools revid:jamie@ubuntu.com-20151009200149-1xhiz868qvyuzf4d diff -Nru click-reviewers-tools-0.34/debian/changelog click-reviewers-tools-0.34/debian/changelog --- click-reviewers-tools-0.34/debian/changelog 2015-09-16 14:16:24.000000000 +0000 +++ click-reviewers-tools-0.34/debian/changelog 2015-10-09 20:16:31.000000000 +0000 @@ -1,13 +1,19 @@ -click-reviewers-tools (0.34-0~520~ubuntu14.04.1) trusty; urgency=low +click-reviewers-tools (0.34-0~524~ubuntu14.04.1) trusty; urgency=low * Auto build. - -- Daniel Holbach Wed, 16 Sep 2015 14:16:24 +0000 + -- Daniel Holbach Fri, 09 Oct 2015 20:16:31 +0000 click-reviewers-tools (0.34) UNRELEASED; urgency=medium [ Jamie Strandboge ] * multiple 'desktop' hooks should only be 'info' these days (LP: #1496402) + * verify snaps that use 'bus-name' are of 'type: framework' + * snappy package.yaml defaults to 'architectures' and 'architecture' is + deprecated. Adjust and add a warning for deprecation. + * arm64 is a valid architecture now + * clickreviews/cr_security.py: don't complain about missing AppArmor + template vars if we detect this is unconfined boilerplate policy -- Jamie Strandboge Thu, 10 Sep 2015 14:28:13 -0500