Fix ci-matrix pre-commit hook

- Remove dependency of pydblite which fails to setup on recent pythons
- Discard shell script and put everything into pre-commit
lean/pre-commit-hook-2
Max Gautier 2024-05-21 21:31:32 +02:00
parent 0e449ca75e
commit 77bfb53455
No known key found for this signature in database
5 changed files with 26 additions and 36 deletions

View File

@ -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

View File

@ -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

View File

@ -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'))

View File

@ -1,4 +0,0 @@
jinja2
pathlib ; python_version < '3.10'
pyaml
pydblite

View File

@ -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