<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Plugin Development on Divekit</title><link>https://divekit.org/docs/3-development/plugin/</link><description>Recent content in Plugin Development on Divekit</description><generator>Hugo</generator><language>en</language><atom:link href="https://divekit.org/docs/3-development/plugin/index.xml" rel="self" type="application/rss+xml"/><item><title>Authoring Guide</title><link>https://divekit.org/docs/3-development/plugin/authoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://divekit.org/docs/3-development/plugin/authoring/</guid><description>&lt;div class="pageinfo pageinfo-warning"&gt;&#10;&lt;p&gt;Authoring contracts are still experimental and may evolve.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;This page is now only a stable pointer.&lt;/p&gt;&#10;&lt;h2 id="source-of-truth"&gt;Source of Truth&lt;/h2&gt;&#10;&lt;p&gt;Plugin authoring and CI conventions should be maintained in the plugin template repository:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://gitlab.git.nrw/divekit/plugins/divekit-plugin-template/-/blob/main/README.md"&gt;divekit/plugins/divekit-plugin-template&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;That repository should define:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;repository layout: &lt;code&gt;manifest.json&lt;/code&gt;, &lt;code&gt;job.yaml&lt;/code&gt;, &lt;code&gt;Dockerfile&lt;/code&gt;, code under &lt;code&gt;src/&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;the plugin image, derived from the suite&amp;rsquo;s build image&lt;/li&gt;&#10;&lt;li&gt;optional reusable feedback assets under &lt;code&gt;feedback/&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;release-template usage&lt;/li&gt;&#10;&lt;li&gt;plugin artifact-writing conventions&lt;/li&gt;&#10;&lt;li&gt;FAQ artifact conventions&lt;/li&gt;&#10;&lt;li&gt;copyable examples for new plugin repositories&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="stable-summary"&gt;Stable Summary&lt;/h2&gt;&#10;&lt;p&gt;A plugin is one repository inside its suite&amp;rsquo;s GitLab group, named after the&#10;plugin id. Every plugin repository provides:&lt;/p&gt;</description></item><item><title>Configuration Wizards</title><link>https://divekit.org/docs/3-development/plugin/configuration-wizards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://divekit.org/docs/3-development/plugin/configuration-wizards/</guid><description>&lt;p&gt;Plugins can expose their own CLI configuration flow with a declarative wizard.&#10;The plugin repository keeps the questions and the JSON shape its job reads;&#10;Divekit CLI provides the terminal UI and writes the result where the plugin&#10;job finds it.&lt;/p&gt;&#10;&lt;p&gt;The intended workflow for a course maintainer is:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;divekit plugin add maven&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;divekit plugin configure maven&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;divekit plugin configure &amp;lt;suite&amp;gt;&lt;/code&gt; runs the wizards of the suite&amp;rsquo;s enabled&#10;plugins in one session, in plugin order; &lt;code&gt;divekit plugin configure &amp;lt;suite&amp;gt;/&amp;lt;plugin&amp;gt;&lt;/code&gt; runs one of them. Divekit reads each wizard at the plugin&#10;release the course has locked, so the questions always match the plugin&#10;version that evaluates the answers. A plugin without a wizard simply&#10;contributes no questions.&lt;/p&gt;</description></item><item><title>Contract Reference</title><link>https://divekit.org/docs/3-development/plugin/contract/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://divekit.org/docs/3-development/plugin/contract/</guid><description>&lt;div class="pageinfo pageinfo-warning"&gt;&#10;&lt;p&gt;Use this as the current contract baseline for new plugins.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;This page is now a short summary of the CLI-consumed plugin contract.&#10;The implementation-coupled source of truth belongs in the Divekit CLI repository.&lt;/p&gt;&#10;&lt;h2 id="stable-summary"&gt;Stable Summary&lt;/h2&gt;&#10;&lt;p&gt;Plugins are organized in plugin suites. A suite owns one build ecosystem and&#10;its build stage (&lt;code&gt;maven&lt;/code&gt;, &lt;code&gt;gradle&lt;/code&gt;, the generic &lt;code&gt;custom&lt;/code&gt; suite); a plugin is one&#10;analysis inside a suite. On GitLab a suite is a group under &lt;code&gt;divekit/plugins/&lt;/code&gt;,&#10;its builder repository is the coordinator, and every plugin is one repository&#10;next to it. The CLI currently expects the following:&lt;/p&gt;</description></item><item><title>Troubleshooting</title><link>https://divekit.org/docs/3-development/plugin/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://divekit.org/docs/3-development/plugin/troubleshooting/</guid><description>&lt;p&gt;This page stays as a quick maintainer-facing checklist.&#10;Detailed contract and authoring rules live elsewhere.&lt;/p&gt;&#10;&lt;h2 id="discovery-fails"&gt;Discovery Fails&lt;/h2&gt;&#10;&lt;p&gt;Check:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;divekit plugin &lt;span class="nb"&gt;source&lt;/span&gt; list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;divekit plugin discover --verbose&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Verify:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;the source is configured and trusted&lt;/li&gt;&#10;&lt;li&gt;the suite&amp;rsquo;s builder repository exposes &lt;code&gt;manifest.json&lt;/code&gt; with &lt;code&gt;&amp;quot;kind&amp;quot;: &amp;quot;plugin-suite&amp;quot;&lt;/code&gt; on its default branch&lt;/li&gt;&#10;&lt;li&gt;the plugin repository exposes &lt;code&gt;manifest.json&lt;/code&gt; with &lt;code&gt;&amp;quot;kind&amp;quot;: &amp;quot;plugin&amp;quot;&lt;/code&gt; and is pinned in the suite manifest&lt;/li&gt;&#10;&lt;li&gt;the pinned range matches a published tag, and that tag has an image in the plugin&amp;rsquo;s container registry&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="plugin-does-not-run"&gt;Plugin Does Not Run&lt;/h2&gt;&#10;&lt;p&gt;Check:&lt;/p&gt;</description></item></channel></rss>