12 releases
0.3.3 | Jul 1, 2025 |
---|---|
0.3.2 | Jun 29, 2025 |
0.2.39 | Jun 4, 2025 |
0.1.25 | Jun 2, 2025 |
#49 in Authentication
401 downloads per month
120KB
2.5K
SLoC
Azure DevOps CLI
CLI tool for interacting with Azure DevOps.
Features
- Repository Management: List, create, delete, clone, view, and manage pull requests in repositories
- Pipeline Management: Manage Azure DevOps pipelines
- Board Management: Manage Azure DevOps boards
- Authentication: Secure login using Personal Access Tokens (PAT)
- Default Project: Set a default project to avoid specifying --project for every command
Default Project Management
The project
command allows you to set and view a default project,
eliminating the need to specify --project
for every command:
# Set a default project
azdocli project MyDefaultProject
# View the current default project
azdocli project
# All commands will now use the default project if --project is not specified
azdocli repos list # Uses default project
azdocli pipelines list # Uses default project
azdocli repos list --project Other # Overrides default with "Other"
Default Project Features:
- Persistent storage: Default project is saved in your user configuration
- Optional override: Use
--project
to override the default for any command - All modules supported: Works with repos, pipelines, and boards
- Helpful error messages: Clear feedback when no default is set and no --project is provided
Repository Management Features
Repository Clone Feature
The repos clone
command allows you to clone all repositories from an Azure DevOps project:
# Set a default project first (optional but recommended)
azdocli project MyProject
# Clone all repositories from the default project (with confirmation prompt)
azdocli repos clone
# Or override with a specific project
azdocli repos clone --project MyProject
# Clone to a specific directory
azdocli repos clone --target-dir ./repos
# Skip confirmation prompt (useful for automation)
azdocli repos clone --yes
# Clone repositories in parallel for faster execution
azdocli repos clone --parallel
# Control the number of concurrent clone operations (default: 4, max: 8)
azdocli repos clone --parallel --concurrency 6
# Combine all options for maximum efficiency
azdocli repos clone --target-dir ./repos --yes --parallel --concurrency 8
Clone Features:
- Bulk cloning: Clone all repositories from a project with a single command
- Target directory: Specify where to clone repositories (defaults to current directory)
- Confirmation prompts: Interactive confirmation with repository listing before cloning
- Automation support: Skip prompts with
--yes
flag for CI/CD scenarios - Parallel execution: Use
--parallel
flag to clone multiple repositories simultaneously - Concurrency control: Adjust the number of concurrent operations with
--concurrency
(1-8) - Error handling: Comprehensive error reporting for failed clones
- Progress tracking: Real-time feedback on clone operations
Repository Show Feature
The repos show
command displays detailed information about a specific repository:
# Show details of a repository by name (using default project)
azdocli repos show --id MyRepository
# Or specify a project explicitly
azdocli repos show --id MyRepository --project MyProject
Show Features:
- Comprehensive details: View repository name, ID, URLs, size, and metadata
- User-friendly formatting: Emoji icons and formatted output for better readability
- Clone URLs: Display both HTTPS and SSH clone URLs
- File size formatting: Automatic conversion to KB/MB for better readability
- Error handling: Helpful error messages with suggestions when repository not found
Repository Delete Feature
The repos delete
command allows you to delete repositories from an Azure DevOps project:
# Soft delete a repository by name (using default project) - moves to recycle bin
azdocli repos delete --id MyRepository
# Or specify a project explicitly
azdocli repos delete --id MyRepository --project MyProject
# Hard delete - permanently delete after soft delete (requires manual recycle bin cleanup)
azdocli repos delete --id MyRepository --hard
# Skip confirmation prompt (useful for automation)
azdocli repos delete --id MyRepository --yes
# Combine options for automated hard delete
azdocli repos delete --id MyRepository --hard --yes
Delete Features:
- Soft delete by default: Repositories are moved to recycle bin and can be restored
- Hard delete option: Use
--hard
flag for permanent deletion (may require manual cleanup) - Confirmation prompts: Interactive confirmation before deletion to prevent accidents
- Automation support: Skip prompts with
--yes
flag for CI/CD scenarios - Repository validation: Verify repository exists before attempting deletion
- Error handling: Clear feedback when repository not found or access denied
- Default project support: Use with default project or specify --project explicitly
Pull Request Management Features
The repos pr
commands allow you to manage pull requests within repositories:
List Pull Requests
# List all pull requests for a repository (using default project)
azdocli repos pr list --repo MyRepository
# Or specify a project explicitly
azdocli repos pr list --repo MyRepository --project MyProject
Show Pull Request Details
# Show details of a specific pull request (using default project)
azdocli repos pr show --repo MyRepository --id 123
# Or specify a project explicitly
azdocli repos pr show --repo MyRepository --id 123 --project MyProject
Create Pull Request
# Create a new pull request with source and target branches (using default project)
azdocli repos pr create --repo MyRepository --source "feature/my-feature" --target "main" --title "My Feature" --description "Description"
# Create with minimal information - target defaults to 'main'
azdocli repos pr create --repo MyRepository --source "feature/my-feature" --title "My Feature"
# Or specify a project explicitly
azdocli repos pr create --repo MyRepository --source "feature/my-feature" --target "develop" --title "My Feature" --description "Description" --project MyProject
# Source branch is required, target defaults to 'main' if not specified
azdocli repos pr create --repo MyRepository --source "bugfix/fix-login"
Show Pull Request Commits
# Show commits in a specific pull request (using default project)
azdocli repos pr commits --repo MyRepository --id 123
# Or specify a project explicitly
azdocli repos pr commits --repo MyRepository --id 123 --project MyProject
Pull Request Features:
- Repository filtering: List shows only pull requests for the specified repository
- Comprehensive details: Show command displays ID, title, description, status, branches, and creation date
- Branch specification: Specify source branch (required) and target branch (defaults to 'main')
- Flexible creation: Create pull requests with or without title/description
- Branch validation: Automatic formatting of branch names with refs/heads/ prefix
- Repository validation: Verify repository exists before creating pull request
- Authentication handling: Proper error messages when not logged in
- Default project support: Use with default project or specify --project explicitly
- Error handling: Clear feedback for invalid pull request IDs or missing repositories
- Commit tracking: View all commits included in a pull request with detailed information
Pipeline Management Features
Pipeline List Feature
The pipelines list
command allows you to list all pipelines in an Azure DevOps project:
# List all pipelines in the default project
azdocli pipelines list
# Or specify a project explicitly
azdocli pipelines list --project MyProject
List Features:
- Comprehensive listing: View all pipelines in a project with IDs and names
- User-friendly formatting: Easy-to-read table format
- Error handling: Helpful error messages when project not found or access denied
Pipeline Runs Feature
The pipelines runs
command shows all builds (runs) of a specified pipeline:
# Show all runs for a pipeline (using default project)
azdocli pipelines runs --id 42
# Or specify a project explicitly
azdocli pipelines runs --id 42 --project MyProject
Runs Features:
- Run history: View all runs for a specific pipeline
- Status visibility: See current state and result of each pipeline run
- User-friendly formatting: Clear display of run information
Pipeline Show Feature
The pipelines show
command displays detailed information about a specific pipeline build:
# Show details of a specific pipeline build (using default project)
azdocli pipelines show --id 42 --build-id 123
# Or specify a project explicitly
azdocli pipelines show --id 42 --project MyProject --build-id 123
Show Features:
- Detailed information: Comprehensive details about a specific pipeline build
- Debug information: Access to internal state for troubleshooting purposes
- Error handling: Helpful error messages when build not found
Pipeline Run Feature
The pipelines run
command starts a new pipeline run:
# Run a pipeline (using default project)
azdocli pipelines run --id 42
# Or specify a project explicitly
azdocli pipelines run --id 42 --project MyProject
Run Features:
- Pipeline execution: Start a pipeline with a single command
- Live updates: See details of the running build in real-time
- Error handling: Clear feedback when pipeline cannot be started
Board Management Features
Work Item Management
The boards work-item
commands allow you to manage work items in an Azure DevOps project:
# List work items assigned to me (using default project)
azdocli boards work-item list
# List work items with filters
azdocli boards work-item list --state "Active" --work-item-type "Bug" --limit 20
# Or specify a project explicitly
azdocli boards work-item list --project MyProject
# Show details of a specific work item (using default project)
azdocli boards work-item show --id 123
# Open work item directly in web browser
azdocli boards work-item show --id 123 --web
# Or specify a project explicitly
azdocli boards work-item show --id 123 --project MyProject
# Create a new work item (using default project)
# Supported types: bug, task, user-story, feature, epic
azdocli boards work-item create bug --title "Fix login issue" --description "Users cannot login after password change"
# Update a work item (using default project)
azdocli boards work-item update --id 123 --title "New title" --state "Active" --priority 2
# Delete a work item permanently (using default project)
azdocli boards work-item delete --id 123
# Soft delete a work item by changing state to "Removed"
azdocli boards work-item delete --id 123 --soft-delete
Work Item Features:
- Full CRUD operations: Create, read, update, and delete work items
- List my work items: View work items assigned to you with filtering options
- Multiple work item types: Support for bug, task, user story, feature, and epic
- Filtering: Filter by state, work item type, and limit number of results
- Web integration: Open work items directly in browser with
--web
option - Soft delete: Option to change state to "Removed" instead of permanent deletion
- Field updates: Update title, description, state, and priority
- Default project support: Use with default project or specify --project explicitly
- Error handling: Clear feedback when work item not found or access denied
CLI tool for interacting with Azure DevOps
USAGE:
azdocli [SUBCOMMAND]
OPTIONS:
-h, --help Print help information
-V, --version Print version information
SUBCOMMANDS:
boards Manage Azure DevOps boards
help Print this message or the help of the given subcommand(s)
login Login to Azure DevOps with a Personal Access Token (PAT)
logout Logout from Azure DevOps
pipelines Manage Azure DevOps pipelines
repos Manage Azure DevOps repos
Installation
Quick Install (Recommended)
Linux and macOS:
curl -sSL https://christianhelle.com/azdocli/install | bash
Windows (PowerShell):
iwr -useb https://christianhelle.com/azdocli/install.ps1 | iex
These one-liner commands will automatically download and install the latest release for your platform.
Install from crates.io
You can also install azdocli using Cargo:
cargo install azdocli
This will install the azdocli
binary, which you can use immediately.
Install using Snap (Linux)
On Linux systems with Snap support, you can install azdocli directly from the Snap Store:
snap install azdocli
This will install the latest stable version and automatically handle updates.
Install from GitHub Releases
You can also download pre-built binaries from the GitHub Releases page:
- Windows:
windows-x64.zip
orwindows-arm64.zip
- macOS:
macos-x64.zip
ormacos-arm64.zip
- Linux:
linux-x64.zip
orlinux-arm64.zip
Extract the binary and add it to your PATH.
Authentication Setup
Before using the CLI, you need to create a Personal Access Token (PAT) in Azure DevOps:
Creating a Personal Access Token
-
Navigate to Azure DevOps:
- Sign in to your Azure DevOps organization (
https://dev.azure.com/{yourorganization}
) - Click on your profile picture in the top right corner
- Select Personal Access Tokens
- Sign in to your Azure DevOps organization (
-
Create New Token:
- Click + New Token
- Enter a descriptive name (e.g., "azdocli-token")
- Select your organization
- Set expiration date (recommended: 90 days or less)
-
Configure Required Scopes:
- Code: Read & write (for repository operations)
- Build: Read & execute (for pipeline operations)
- Work Items: Read & write (for board operations)
- Project and Team: Read (for project operations)
-
Save Your Token:
- Click Create
- ⚠️ Important: Copy the token immediately and store it securely
- The token will not be shown again
Security Best Practices:
- Never commit your PAT to version control
- Use environment variables or secure storage for automation
- Regularly rotate your tokens
- Use the minimum required permissions
Usage
First, login to Azure DevOps using the PAT you created:
# Login with your Personal Access Token
azdocli login
# You'll be prompted for:
# - Organization name (e.g., "mycompany" from https://dev.azure.com/mycompany)
# - Personal Access Token (the PAT you created above)
# Set a default project (optional but recommended)
azdocli project MyProject
Basic Examples
# Repository management
azdocli repos list # List all repositories
azdocli repos show --id MyRepo # Show repository details
azdocli repos clone # Clone all repositories
# Pull request management
azdocli repos pr list --repo MyRepo # List pull requests for a repository
azdocli repos pr show --repo MyRepo --id 123 # Show pull request details
azdocli repos pr create --repo MyRepo --source "feature/my-feature" --title "My Feature" # Create a new pull request
# Pipeline management
azdocli pipelines list # List all pipelines
azdocli pipelines runs --id 42 # Show pipeline runs
azdocli pipelines show --id 42 --build-id 123 # Show build details
For detailed examples and features, see the respective sections below.
Building from Source
# Clone the repository
git clone https://github.com/christianhelle/azdocli.git
cd azdocli
# Build the project
cargo build
# Run tests
cargo test
# Run the CLI
cargo run -- <command>
Testing
The project includes integration tests that verify the core repository management functionality against a real Azure DevOps instance.
Setting up Test Configuration
To run the integration tests, you need to create a test configuration file with your Azure DevOps credentials:
-
Copy the template file:
cp test_config.json.template test_config.json
-
Edit
test_config.json
with your Azure DevOps details:
{
"organization": "your-organization-name",
"pat": "your-personal-access-token",
"project": "your-test-project-name"
}
-
Make sure you have:
- A valid Azure DevOps Personal Access Token (PAT) with repository permissions
- Access to an Azure DevOps project where you can create/delete test repositories
- Git installed and available in your PATH (for clone testing)
Running Tests
The integration tests are marked with #[ignore]
by default to prevent accidental execution without proper configuration.
# Run all tests including integration tests
cargo test -- --ignored
# Run only the repository smoke tests
cargo test test_create_show_clone_delete_repository -- --ignored
# Run the repository listing test
cargo test test_list_repositories -- --ignored
# Run regular unit tests only (currently none)
cargo test
Test Coverage
The integration tests cover the following repository operations:
- Create: Creates a new repository in your Azure DevOps project
- Show: Retrieves and verifies repository details
- Clone: Attempts to clone the repository (to temporary directory)
- Delete: Performs hard delete to clean up test repositories
⚠️ Important: The tests create and delete actual repositories in your Azure DevOps project. Make sure to use a test project and not a production environment.
Security Notes
- The
test_config.json
file is automatically ignored by Git to prevent accidental credential commits - Store your PAT securely and never commit it to version control
- Use a PAT with minimal required permissions (repository read/write)
- Consider using a dedicated test organization or project for running these tests
Contributing
Contributions are welcome! Please read our Contributing Guidelines for details on:
- Code style and patterns
- Development setup
- Testing procedures
- PR description requirements
- How to keep documentation updated
Please ensure your PR descriptions are verbose and follow the guidelines in CONTRIBUTING.md.
Dependencies
~23–39MB
~573K SLoC