diff --git a/.gitlab-ci/lint.yml b/.gitlab-ci/lint.yml index 2f96fec5f..658bd35aa 100644 --- a/.gitlab-ci/lint.yml +++ b/.gitlab-ci/lint.yml @@ -123,4 +123,5 @@ ci-matrix: tags: [light] image: python:3 script: - - tests/scripts/md-table/test.sh + - tests/scripts/md-table/main.py + - git diff --exit-code diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0a4b32681..e4116c1fa 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -77,9 +77,13 @@ repos: - id: ci-matrix name: ci-matrix - entry: tests/scripts/md-table/test.sh - language: script + entry: tests/scripts/md-table/main.py + language: python pass_filenames: false + additional_dependencies: + - jinja2 + - pathlib + - pyaml - id: jinja-syntax-check name: jinja-syntax-check diff --git a/tests/scripts/md-table/main.py b/tests/scripts/md-table/main.py index 9e0000585..09d5506e9 100755 --- a/tests/scripts/md-table/main.py +++ b/tests/scripts/md-table/main.py @@ -4,7 +4,6 @@ import sys import glob from pathlib import Path import yaml -from pydblite import Base import re import jinja2 import sys @@ -14,6 +13,7 @@ from pprint import pprint parser = argparse.ArgumentParser(description='Generate a Markdown table representing the CI test coverage') parser.add_argument('--dir', default='tests/files/', help='folder with test yml files') +parser.add_argument('--output', default='docs/developers/ci.md', help='output file') args = parser.parse_args() @@ -24,25 +24,26 @@ env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=sys.path[0])) # Data represents CI coverage data matrix class Data: def __init__(self): - self.db = Base(':memory:') - self.db.create('container_manager', 'network_plugin', 'operating_system') + self.container_managers = set() + self.network_plugins = set() + self.os = set() + self.combination = set() - def set(self, container_manager, network_plugin, operating_system): - self.db.insert(container_manager=container_manager, network_plugin=network_plugin, operating_system=operating_system) - self.db.commit() - def exists(self, container_manager, network_plugin, operating_system): - return len((self.db("container_manager") == container_manager) & (self.db("network_plugin") == network_plugin) & (self.db("operating_system") == operating_system)) > 0 + def set(self, container_manager, network_plugin, os): + self.container_managers.add(container_manager) + self.network_plugins.add(network_plugin) + self.os.add(os) + self.combination.add(container_manager+network_plugin+os) + + def exists(self, container_manager, network_plugin, os): + return (container_manager+network_plugin+os) in self.combination def jinja(self): template = env.get_template('table.md.j2') - container_engines = list(self.db.get_unique_ids('container_manager')) - network_plugins = list(self.db.get_unique_ids("network_plugin")) - operating_systems = list(self.db.get_unique_ids("operating_system")) - - container_engines.sort() - network_plugins.sort() - operating_systems.sort() + container_engines = sorted(self.container_managers) + network_plugins = sorted(self.network_plugins) + operating_systems = sorted(self.os) return template.render( container_engines=container_engines, @@ -91,6 +92,5 @@ for f in files: network_plugin = y.get('kube_network_plugin', 'calico') x = re.match(r"^[a-z-]+_([a-z0-9]+).*", f.name) operating_system = x.group(1) - data.set(container_manager=container_manager, network_plugin=network_plugin, operating_system=operating_system) -#print(data.markdown()) -print(data.jinja()) + data.set(container_manager=container_manager, network_plugin=network_plugin, os=operating_system) +print(data.jinja(), file=open(args.output, 'w')) diff --git a/tests/scripts/md-table/requirements.txt b/tests/scripts/md-table/requirements.txt deleted file mode 100644 index 6d4aca36a..000000000 --- a/tests/scripts/md-table/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -jinja2 -pathlib ; python_version < '3.10' -pyaml -pydblite diff --git a/tests/scripts/md-table/test.sh b/tests/scripts/md-table/test.sh deleted file mode 100755 index cf9df9085..000000000 --- a/tests/scripts/md-table/test.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -set -euxo pipefail - -echo "Install requirements..." -pip install -r ./tests/scripts/md-table/requirements.txt - -echo "Generate current file..." -./tests/scripts/md-table/main.py > tmp.md - -echo "Compare docs/developers/ci.md with actual tests in tests/files/*.yml ..." -cmp docs/developers/ci.md tmp.md