Skip to content
108 changes: 108 additions & 0 deletions tools/azsdk-cli/docs/cli-commands-guidelines.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Azure SDK Tools CLI Command Guidelines
Comment thread
praveenkuttappan marked this conversation as resolved.

This document provides comprehensive guidelines for creating CLI commands in the `Azure.Sdk.Tools.Cli` project. All CLI commands must follow these established patterns and conventions to ensure consistency, maintainability, and proper integration with both CLI and MCP (Model Context Protocol) server functionality.
Azure SDK developers and service team can use these CLI commands to generate, build, test and release Azure SDK.

## Namespace Organization

### Directory Structure

```
Tools/
├── Package/ # Package-level operations
├── ReleasePlan/ # Release planning operations
├── TypeSpec/ # TypeSpec operations
```

## Command Hierarchy

All CLI commands must follow a predefined top-level command hierarchy. Commands are organized into the following categories:

### 1. **package** - Package Operations

**Namespace:** `Azure.Sdk.Tools.Cli.Tools.Package`
**Command Group:** `SharedCommandGroups.Package`
**Verb:** `package` or `pkg`

For operations at the SDK package level. The package group has further sub-grouping for better organization:

#### Core Package Operations:

- Build/compile SDK code
- Generate SDKs
- Release packages
- Update version information
- Validate packages

#### Sub-Groups:

##### **readme** - README Operations

For generating and updating README files:

- Generate README
- Update README

##### **sample** - Sample Operations

For generating and updating SDK samples:

- Create samples
- Update samples

##### **test** - Test Operations

For creating, updating, and running tests for SDK packages:

- Create tests
- Update tests
- Run tests for specific packages

**Examples:**

- `package build --package-path ./sdk/storage`
Comment thread
praveenkuttappan marked this conversation as resolved.
- `package generate --typespec-project ./specification/storage`
- `package readme generate --package-path ./sdk/compute`
- `package readme update --package-path ./sdk/keyvault --section getting-started`
- `package release --package-name azure-core`
- `package sample generate --package-path ./sdk/compute`
- `package sample update --package-path ./sdk/storage --sample-name basic-usage`
- `package test generate --package-path ./sdk/storage --test-type <type>`
- `package test run --package-path ./sdk/keyvault --test-suite integration`
- `package validate --package-path ./sdk/keyvault`
Comment thread
praveenkuttappan marked this conversation as resolved.
Comment thread
praveenkuttappan marked this conversation as resolved.

### 2. **release-plan** - Release Plan

**Namespace:** `Azure.Sdk.Tools.Cli.Tools.ReleasePlan`
**Command Group:** Custom (no predefined group)
**Verb:** `release-plan`

For release planning and SDK coordination:

- Create release plans
- Link SDK pull requests to release plan
- Get release plan details

**Examples:**

- `release-plan get --workitem-id 456`
Comment thread
praveenkuttappan marked this conversation as resolved.
- `release-plan link-sdk-pr --release-plan-id 123 --pr 789`

### 3. **typespec** - TypeSpec Operations and TypeSpec Client Operations

**Namespace:** `Azure.Sdk.Tools.Cli.Tools.TypeSpec`
**Command Group:** `SharedCommandGroups.TypeSpec`
**Verb:** `tsp`
Comment thread
praveenkuttappan marked this conversation as resolved.

For TypeSpec-related operations:

- Create TypeSpec projects
- Convert Swagger to TypeSpec
- Validate TypeSpec projects
- Common TypeSpec workflows

**Examples:**

- `tsp convert --swagger-file ./swagger.json`
- `tsp init --name MyService`
- `tsp validate --project-path ./typespec`
7 changes: 6 additions & 1 deletion tools/azsdk-cli/docs/new-tool.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Help me create a new tool using #new-tool.md as a reference

* [Tool Architecture Overview](#tool-architecture-overview)
* [Step-by-Step Implementation Guide](#step-by-step-implementation-guide)
* [CLI Command Hierarchy](#cli-command-hierarchy)
* [Code Examples and Templates](#code-examples-and-templates)
* [Dependency Injection](#dependency-injection)
* [Response Handling](#response-handling)
Expand Down Expand Up @@ -97,6 +98,10 @@ CommandHierarchy = [ SharedCommandGroups.EngSys, SharedCommandGroups.Cleanup ];
- `IDevOpsService` - For Azure DevOps operations
- Custom service interfaces for your tool's specific needs

## CLI command hierarchy

Refer to [CLI command hierarchy](cli-commands-guidelines.md) for guidelines on CLI command structure.

## Code Examples and Templates

A working example of multiple tool types and usage of services can be found at [`ExampleTool.cs`](../Azure.Sdk.Tools.Cli/Tools/Example/ExampleTool.cs)
Expand Down Expand Up @@ -615,4 +620,4 @@ catch (Exception ex)
{
return new Response { ResponseError = ex.Message }; // Missing SetFailure()
}
```
```