From 6fb5fb2e8df5eb18290ae62b9e103bc0048401d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Prchl=C3=ADk?= Date: Thu, 2 Jan 2025 22:13:05 +0100 Subject: [PATCH] Generate documentation for prepare/feature plugins --- .gitignore | 1 + docs/Makefile | 10 +++++++++- docs/plugins/index.rst | 1 + docs/plugins/prepare-feature-header.inc.rst | 0 docs/plugins/prepare-header.inc.rst | 7 +++++++ docs/scripts/generate-plugins.py | 20 ++++++++++++++++++++ docs/templates/plugins.rst.j2 | 2 +- tmt/steps/prepare/feature/__init__.py | 3 +++ 8 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 docs/plugins/prepare-feature-header.inc.rst diff --git a/.gitignore b/.gitignore index 8bb925ee24..fdebac38ff 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ docs/plugins/finish.rst docs/plugins/prepare.rst docs/plugins/provision.rst docs/plugins/report.rst +docs/plugins/prepare-feature.rst docs/plugins/test-checks.rst docs/plugins/hardware-matrix.rst docs/guide/test-runner-guest-compatibility-matrix.inc.rst diff --git a/docs/Makefile b/docs/Makefile index 6913473f94..c38acd77bf 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -27,7 +27,7 @@ GENERATED_DIRECTORIES = spec stories STEPS = discover provision prepare execute finish report # A list of `plugins/*.rst` files to generate -PLUGIN_TARGETS = $(addsuffix .rst,$(addprefix plugins/,$(STEPS))) plugins/test-checks.rst +PLUGIN_TARGETS = $(addsuffix .rst,$(addprefix plugins/,$(STEPS))) plugins/prepare-feature.rst plugins/test-checks.rst .DEFAULT_GOAL := help @@ -64,6 +64,11 @@ define plugins-dependencies = $(SCRIPTSDIR)/generate-plugins.py $(PLUGINS_TEMPLATE) $(TMTDIR)/steps/__init__.py $(TMTDIR)/steps/$(call plugins-to-step,$@)/*.py endef +# Render a list of dependencies of a `plugins/feature.rst` target +define plugins-feature-dependencies = +$(SCRIPTSDIR)/generate-plugins.py $(PLUGINS_TEMPLATE) $(TMTDIR)/steps/__init__.py $(TMTDIR)/steps/prepare/__init__.py $(TMTDIR)/steps/prepare/feature/*.py +endef + # Render a list of dependencies of a `plugins/test-checks.rst` target define plugins-checks-dependencies = $(SCRIPTSDIR)/generate-plugins.py $(PLUGINS_TEMPLATE) $(TMTDIR)/steps/__init__.py $(TMTDIR)/checks/*.py @@ -97,6 +102,9 @@ plugins/provision.rst: $(call plugins-dependencies) plugins/report.rst: $(call plugins-dependencies) $(call build-plugins) +plugins/prepare-feature.rst: $(call plugins-feature-dependencies) + $(call build-plugins) + plugins/test-checks.rst: $(call plugins-checks-dependencies) $(call build-plugins) diff --git a/docs/plugins/index.rst b/docs/plugins/index.rst index 8626c44d91..5f1dbc5d14 100644 --- a/docs/plugins/index.rst +++ b/docs/plugins/index.rst @@ -22,4 +22,5 @@ Here you will find documentation for plugins shipped with tmt. Execute Finish Report + prepare/feature Test Checks diff --git a/docs/plugins/prepare-feature-header.inc.rst b/docs/plugins/prepare-feature-header.inc.rst new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/plugins/prepare-header.inc.rst b/docs/plugins/prepare-header.inc.rst index e69de29bb2..c93518b224 100644 --- a/docs/plugins/prepare-header.inc.rst +++ b/docs/plugins/prepare-header.inc.rst @@ -0,0 +1,7 @@ +prepare/feature plugins +----------------------- + +Features available via :ref:`prepare/feature` +plugin are implemented and shipped as plugins. See +:ref:`/plugins/prepare-feature` for the list of available feature +plugins and their configuration. diff --git a/docs/scripts/generate-plugins.py b/docs/scripts/generate-plugins.py index eef89095ed..39b0e4fdd5 100755 --- a/docs/scripts/generate-plugins.py +++ b/docs/scripts/generate-plugins.py @@ -14,6 +14,7 @@ import tmt.steps.execute import tmt.steps.finish import tmt.steps.prepare +import tmt.steps.prepare.feature import tmt.steps.provision import tmt.steps.report import tmt.utils @@ -125,6 +126,21 @@ def plugin_iterator(): return plugin_iterator +def _create_feature_plugin_iterator( + registry: tmt.plugins.PluginRegistry[tmt.steps.prepare.feature.FeatureClass]): + """ Create iterator over plugins of a feature plugin registry """ + + def plugin_iterator(): + for plugin_id in registry.iter_plugin_ids(): + plugin = registry.get_plugin(plugin_id) + + # TODO: once data class becomes composed from plugin data + # classes, the main one is all we have. + yield plugin_id, plugin, tmt.steps.prepare.feature.PrepareFeature._data_class + + return plugin_iterator + + def _create_test_check_plugin_iterator(registry: tmt.plugins.PluginRegistry[tmt.steps.Method]): """ Create iterator over plugins of a test check registry """ @@ -178,6 +194,10 @@ def main() -> None: plugin_generator = _create_step_plugin_iterator( tmt.steps.report.ReportPlugin._supported_methods) + elif step_name == 'prepare-feature': + plugin_generator = _create_feature_plugin_iterator( + tmt.steps.prepare.feature._FEATURE_PLUGIN_REGISTRY) + elif step_name == 'test-checks': plugin_generator = _create_test_check_plugin_iterator(tmt.checks._CHECK_PLUGIN_REGISTRY) diff --git a/docs/templates/plugins.rst.j2 b/docs/templates/plugins.rst.j2 index 88c6e28c5f..fb9574e878 100644 --- a/docs/templates/plugins.rst.j2 +++ b/docs/templates/plugins.rst.j2 @@ -45,7 +45,7 @@ .. _/plugins/{{ STEP }}: -{{ STEP | replace('-', ' ') | capitalize }} Plugins +{% if STEP == 'prepare-feature' %}prepare/feature{% else %}{{ STEP | replace('-', ' ') | capitalize }}{% endif %} Plugins {{ '~' * (8 + (STEP | length)) }} .. include:: {{ STEP }}-header.inc.rst diff --git a/tmt/steps/prepare/feature/__init__.py b/tmt/steps/prepare/feature/__init__.py index 848507d202..49f067c3ef 100644 --- a/tmt/steps/prepare/feature/__init__.py +++ b/tmt/steps/prepare/feature/__init__.py @@ -147,6 +147,9 @@ class PrepareFeature(tmt.steps.prepare.PreparePlugin[PrepareFeatureData]): prepare: how: feature epel: disabled + + See :ref:`/plugins/prepare-feature` for the list of available + feature plugins and their configuration. """ _data_class = PrepareFeatureData