Extensible CLI to automate documentation in wiki platforms (Azure DevOps, Confluence, etc.) using Markdown. Built on a plugin and provider architecture, it enables generating, updating, and structuring documentation as code.
Project description
wikiops
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.
What This Repository Contains
- 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.
What This Repository Does Not Contain
- 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.
Relationship To wikiops-sdk
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:
Quick Start
Install the host and its runtime dependencies:
poetry install --with test
Inspect the currently available extensions:
poetry run wikiops plugins
poetry run wikiops providers
The 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.
Example Configuration
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_root
Example Input
team_name: Platform
Plan A Run
Replace 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.yaml
This prints:
- the planned
ChangeSetas JSON - a preview diff
Apply A Run
poetry run wikiops run \
--config wikiops.yaml \
--profile default \
--plugin acme.team-docs \
--input input.yaml \
--apply
On apply, the CLI also prints the provider ApplyResult and exits with code 1 if any operation failed.
Plugin Resources
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.
Documentation Map
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.
Tests
This repository ships with a strict pytest suite and coverage threshold.
poetry run pytest
The tests are also useful as executable examples of the current host behavior.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wikiops-1.2.0.tar.gz.
File metadata
- Download URL: wikiops-1.2.0.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e039e96d7c2a8018579d33af16749d5cbf4ce0f84ba14307d7bbb8f8a8b6554
|
|
| MD5 |
2152439c6497f0b16c88f73f178c6eeb
|
|
| BLAKE2b-256 |
f0a20a56d450e7cd3b80f4fc6aa6a25e32f0e42f293e1cde055530efec083ab5
|
Provenance
The following attestation bundles were made for wikiops-1.2.0.tar.gz:
Publisher:
release.yml on sgg10/wikiops
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wikiops-1.2.0.tar.gz -
Subject digest:
9e039e96d7c2a8018579d33af16749d5cbf4ce0f84ba14307d7bbb8f8a8b6554 - Sigstore transparency entry: 1294982558
- Sigstore integration time:
-
Permalink:
sgg10/wikiops@39d7c0a8bc19dc5ed07736af8f0090ca58c4a671 -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/sgg10
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@39d7c0a8bc19dc5ed07736af8f0090ca58c4a671 -
Trigger Event:
push
-
Statement type:
File details
Details for the file wikiops-1.2.0-py3-none-any.whl.
File metadata
- Download URL: wikiops-1.2.0-py3-none-any.whl
- Upload date:
- Size: 26.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
512646d0adadb9f4590b9902d7a12bc9cda04349f46fcef9e47063200df28216
|
|
| MD5 |
0495dc7860c20518fe43060285faec7c
|
|
| BLAKE2b-256 |
83828ed0a076937468110a3c89a489f5e625e0399529fea697faf6aa5c5fa8ea
|
Provenance
The following attestation bundles were made for wikiops-1.2.0-py3-none-any.whl:
Publisher:
release.yml on sgg10/wikiops
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wikiops-1.2.0-py3-none-any.whl -
Subject digest:
512646d0adadb9f4590b9902d7a12bc9cda04349f46fcef9e47063200df28216 - Sigstore transparency entry: 1294982771
- Sigstore integration time:
-
Permalink:
sgg10/wikiops@39d7c0a8bc19dc5ed07736af8f0090ca58c4a671 -
Branch / Tag:
refs/tags/v1.2.0 - Owner: https://github.com/sgg10
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@39d7c0a8bc19dc5ed07736af8f0090ca58c4a671 -
Trigger Event:
push
-
Statement type: