--- name: create-plugin description: Scaffold a new datadog-ci plugin end-to-end using repository conventions. --- # Create Plugin Scaffold a new datadog-ci plugin end-to-end. Walk the user through each step, confirming the scope name and whether the plugin should be built-in or separately installable. ## Workflow 1. **Ask** for the scope name (kebab-case) and whether this is a built-in or separately installable plugin. 2. **Run `yarn plugin:create `** to scaffold `packages/plugin-/`. 3. **Create the base command** in `packages/base/src/commands//.ts`: - Extend `BaseCommand` from `@datadog/datadog-ci-base` - Use `Command.Usage()` for description - Use `Option.*` from clipanion for arguments/flags - `execute()` should call `return executePluginCommand(this)` - Export the command class 4. **Create `packages/base/src/commands//cli.ts`** exporting a `commands` array containing the command class. 5. **Create the plugin implementation** in `packages/plugin-/src/commands/.ts`: - Import and extend the base command - Implement the actual `execute()` logic - Return `0` for success 6. **Update project files** per the CONTRIBUTING.md checklist: - Add to `.github/CODEOWNERS` under the correct product - Add scope to the Usage section in root `README.md` - If new product: create a GitHub label, update `pr-required-labels.yml`, `advanced-issue-labeler.yml`, and `release.yml` changelog config ## Notes - The commands map in `packages/base/src/cli.ts` is auto-generated by `bin/lint-packages.ts` -- do not edit it manually. Run `yarn lint:packages` to verify. - Use `getRequestBuilder()` or `httpRequest()` from base helpers for HTTP, not raw fetch or axios.