- 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 <scope>`** to scaffold `packages/plugin-<scope>/`.
3. **Create the base command** in `packages/base/src/commands/<scope>/<command>.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/<scope>/cli.ts`** exporting a `commands` array containing the command class.
5. **Create the plugin implementation** in `packages/plugin-<scope>/src/commands/<command>.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.
Voir sur GitHub