ASPEER::MakeMaker::Markdown::Publish Add MakeMaker targets for publishing Perl distribution documentation through MkDocs, VitePress, Docusaurus, or Astro Starlight. The module is deliberately a thin adapter. It reads META_MERGE.x_documentation.publish from the live WriteMakefile arguments, encodes that configuration into the generated Makefile, and delegates every target to Markdown::Publish. It also loads ASPEER::MakeMaker::Markdown::Pod, so one import supplies the doc and readme maintenance targets as well as the publication targets. use ExtUtils::MakeMaker; use ASPEER::MakeMaker::Markdown::Publish; WriteMakefile( NAME => 'Example', VERSION_FROM => 'lib/Example.pm', META_MERGE => { 'meta-spec' => {version => 2}, x_documentation => { publish => { sources => ['doc'], name => 'Example documentation', }, }, }, ); After regenerating the Makefile: make doc make publish_build make publish_serve # Update the local publication branch: make publish_gh # Update it and push that branch to origin: make publish_gh-push # Explicit Cloudflare Workers Static Assets deployment: make publish_cloudflare The same combined target set can be enabled without editing Makefile.PL: perl -MASPEER::MakeMaker::Markdown::Publish Makefile.PL MkDocs supplies all five targets when module is omitted. Set MARKDOWN_PUBLISH_MODULE to override the configured module at runtime. For generated engine configuration, the site name defaults to the WriteMakefile NAME; set x_documentation.publish.name for a friendlier title. An authored engine configuration keeps control of its own title. publish_gh builds and updates the local publication branch without contacting a remote. If x_documentation.publish.base is omitted, it derives // from origin, or / for an .github.io repository. Set it explicitly when the published URL uses another path. Generated VitePress, Docusaurus, and Starlight configuration receives this base; an authored engine configuration remains authoritative. Push the branch through the repository's normal Git workflow, or use publish_gh-push to update it and push only that branch to origin without forcing it. Set x_documentation.publish.config_extend to customise generated engine configuration without replacing it; it cannot be combined with config. publish_cloudflare builds and deploys the same site to the Worker named in an authored Wrangler config supplied as cloudflare => {config => 'wrangler.jsonc'} in x_documentation.publish. It neither commits nor pushes Git. See the module documentation and examples.