wikiops is the host application and CLI runtime for the WikiOps ecosystem.
It orchestrates documentation automation workflows around wikiops-sdk by loading configuration, discovering plugins and providers, building execution context, rendering previews, and applying planned changes.
- A command-line interface for WikiOps execution workflows.
- The host orchestrator that coordinates planning and apply flows.
- Runtime loading for plugins and providers through Python entry points.
- YAML configuration loading for providers, profiles, refs, and plugin config.
- Document loading, diff rendering, and apply delegation.
- A built-in Azure DevOps Wiki provider.
- A strict
pytestsuite with coverage enforcement.
- The public extension contracts and shared domain models.
- A stable SDK-level API surface for plugins and providers.
- Built-in documentation plugins.
- Project-specific documentation business logic.
Those concerns belong to wikiops-sdk and external plugin repositories.
The WikiOps ecosystem is intentionally split across repositories:
plugin -> sdk <- host
provider -> sdk <- host
wikiops-sdk- defines the shared contracts, domain models, and compatibility helpers
wikiops- orchestrates execution around those SDK contracts
- plugins
- implement documentation planning logic
- providers
- implement persistence and read-side infrastructure
Canonical SDK documentation lives in the separate SDK repository:
Install the host and its runtime dependencies:
poetry install --with testInspect the currently available extensions:
poetry run wikiops plugins
poetry run wikiops providersThe host currently ships with a built-in provider implementation:
azure_devops_wiki
Plugins are expected to be installed separately through Python packages that expose the wikiops.plugins entry point group.
The host reads YAML configuration with provider definitions, profiles, refs, and plugin-specific settings.
providers:
azdo:
type: azure_devops_wiki
organization: acme
project: engineering
wiki: platform
profiles:
default:
provider: azdo
refs:
docs_root:
provider: azdo
kind: path
locator:
path: /Engineering/Teams
plugins:
acme.team-docs:
parent_alias: docs_rootteam_name: PlatformReplace acme.team-docs with an installed plugin ID shown by wikiops plugins.
poetry run wikiops run \
--config wikiops.yaml \
--profile default \
--plugin acme.team-docs \
--input input.yamlThis prints:
- the planned
ChangeSetas JSON - a preview diff
poetry run wikiops run \
--config wikiops.yaml \
--profile default \
--plugin acme.team-docs \
--input input.yaml \
--applyOn apply, the CLI also prints the provider ApplyResult and exits with code 1 if any operation failed.
wikiops injects a PluginResourceProvider when loading plugin entry points.
- Resource paths are relative to the plugin package root.
- The host does not assume a fixed
resources/directory. - If a plugin stores assets under
resources/, it should request them asresources/.... - If a plugin already provides its own
resourcesobject, the host leaves it untouched.
Start here depending on your role:
- New to the host:
docs/getting-started.md - Need the host architecture:
docs/architecture.md - Need the runtime execution lifecycle:
docs/execution-flow.md - Need the YAML configuration model:
docs/configuration.md - Need the host/SDK boundary:
docs/sdk-relationship.md - Using the CLI:
docs/guides/using-the-cli.md - Building a plugin for this host:
docs/guides/build-a-plugin.md - Building a provider for this host:
docs/guides/build-a-provider.md - Need module-level runtime reference:
docs/reference/core-modules.md - Need the built-in Azure DevOps provider reference:
docs/reference/azure-devops-wiki.md - Need host internal boundaries:
docs/reference/internal-boundaries.md
The full host documentation index lives at docs/index.md.
This repository ships with a strict pytest suite and coverage threshold.
poetry run pytestThe tests are also useful as executable examples of the current host behavior.