diff --git a/.gitlab/cdrouter.yml b/.gitlab/cdrouter.yml index 030e29ca90..7f3b61f0e5 100644 --- a/.gitlab/cdrouter.yml +++ b/.gitlab/cdrouter.yml @@ -20,6 +20,9 @@ CDROUTER_ETH0_MAC_ADDRESS_TESTBED_02: 00:03:2d:49:2e:c8 before_script: + - export TEST_PACKAGE="$(echo $CI_JOB_NAME | sed 's/\(\w\) .*/\1/')" + - .gitlab/scripts/testbed-cdrouter.py package_validate $TEST_PACKAGE + - source .gitlab/scripts/helpers.sh - section_start "testbed-setup" "Testbed Setup" "collapsed" diff --git a/.gitlab/scripts/testbed-cdrouter.py b/.gitlab/scripts/testbed-cdrouter.py index 7d31d09969..ef9109b7cb 100755 --- a/.gitlab/scripts/testbed-cdrouter.py +++ b/.gitlab/scripts/testbed-cdrouter.py @@ -782,6 +782,33 @@ class TestbedCDRouter: p = self.cdr.packages.create(p) logging.info("Created package '{}' with {} tests".format(name, len(tests))) + def package_validate(self): + manifest_path = os.path.join( + self.packages_path, self.args.package_name + ".yaml" + ) + resolved = self.resolve_manifest(manifest_path) + + name = resolved["name"] + tests = resolved["tests"] + options = resolved.get("options", {}) + + if not name: + logging.error( + "Resolved manifest name is empty for '{}'".format(manifest_path) + ) + exit(1) + + if not tests: + logging.error("Resolved manifest has empty test list for '{}'".format(name)) + exit(1) + + self.build_package_options(options) + logging.info( + "Validated package manifest '{}' as '{}' with {} tests".format( + manifest_path, name, len(tests) + ) + ) + def main(): logging.basicConfig( @@ -852,6 +879,14 @@ def main(): ) subparser.set_defaults(func=TestbedCDRouter.package_apply) + subparser = subparsers.add_parser( + "package_validate", help="validate package YAML manifest" + ) + subparser.add_argument( + "package_name", help="package name (resolves to packages/.yaml)" + ) + subparser.set_defaults(func=TestbedCDRouter.package_validate) + subparser = subparsers.add_parser("config_export", help="export configuration") subparser.add_argument("name", help="configuration name") subparser.add_argument("filename", help="destination filename")