Skip to main content

CLI wrapper to trigger and tail Azure DevOps pipelines

Project description

       _            _ _                 _   _
 _ __ (_)_ __   ___| (_)_ __   ___  ___| |_| |
| '_ \| | '_ \ / _ \ | | '_ \ / _ \/ __| __| |
| |_) | | |_) |  __/ | | | | |  __/ (__| |_| |
| .__/|_| .__/ \___|_|_|_| |_|\___|\___|\__|_|
|_|     |_|              trigger · tail · ship

demo

A minimal CLI to trigger and tail Azure DevOps pipelines directly from your terminal — no browser, no copy-paste.

Why?

The typical workflow:

  1. Push code
  2. Open browser → select org → select project → select pipeline → select branch → click Run
  3. Wait for logs to appear
  4. Copy error → paste into Claude Code
  5. Fix → repeat

With pipelinectl:

pipelinectl push-run build-and-test
# ^ pushes, triggers, tails logs, exits non-zero on failure

Claude Code sees the error output directly if the pipeline fails.


Installation

# Homebrew (macOS, recommended)
brew tap Borrelworst/pipelinectl
brew install Borrelworst/pipelinectl/pipelinectl

# PyPI
pip install pipelinectl

For local development:

pip install --editable ".[dev]"

Commands

pipelinectl init

Interactive setup wizard. Run once after installing.

pipelinectl init

Prompts for organization, project, default branch, and authentication method (see Authentication below). Config is saved to ~/.pipelinectl/config.toml with chmod 600.


pipelinectl list

List all pipelines in your project.

pipelinectl list
pipelinectl list --filter deploy

pipelinectl run PIPELINE

Trigger a pipeline and wait for it to finish.

pipelinectl run build-and-test                        # uses current git branch
pipelinectl run build-and-test --branch main          # explicit branch
pipelinectl run 42                                    # by numeric pipeline ID
pipelinectl run deploy -v ENV=staging -v REGION=westeurope  # queue-time variables
pipelinectl run install -P dev=true -P version=1.2   # YAML template parameters
pipelinectl run build-and-test --logs                 # stream live log output
pipelinectl run build-and-test --no-follow            # trigger only, don't wait
pipelinectl run build-and-test --push                 # git push first, then trigger

Branch resolution order: --branch flag → current git branch → config default_branch.

PIPELINE is matched by case-insensitive substring against pipeline names, or exact numeric ID. If multiple pipelines match, the command errors and lists them.

Exit code is 0 on success, 1 on failure.

Approval gates — when the pipeline reaches an approval gate, pipelinectl pauses and prompts you to approve or reject inline:

⏸  Approval required
   Approve? [y/N]:

Permission gates — when a pipeline needs access to a protected resource for the first time, pipelinectl detects it and prints the ADO URL to grant access:

⏸  Permission required  stage: Deploy
   Grant access in Azure DevOps: https://dev.azure.com/...

pipelinectl push-run PIPELINE

Shortcut for run --push. Pushes the current branch then triggers the pipeline.

pipelinectl push-run build-and-test
pipelinectl push-run build-and-test --logs

pipelinectl status PIPELINE

Show recent run history.

pipelinectl status build-and-test
pipelinectl status deploy --top 10

pipelinectl logs PIPELINE

Fetch logs from a previous run without re-triggering.

pipelinectl logs build-and-test                 # most recent run
pipelinectl logs build-and-test --run-id 98765  # specific run ID
pipelinectl logs build-and-test --last 2        # 2nd most recent
pipelinectl logs --run-id 98765                 # by build ID only, no pipeline needed
pipelinectl logs build-and-test --watch         # tail live logs until completion

pipelinectl params PIPELINE

Show queue-time variables and template parameters for a pipeline.

pipelinectl params build-and-test
pipelinectl params 42

pipelinectl config

View and update configuration without editing the file directly.

pipelinectl config show                        # show current config
pipelinectl config set auth pat <PAT>          # switch to PAT authentication
pipelinectl config set auth azcli             # switch to Azure CLI authentication

Authentication

pipelinectl supports two authentication methods.

Personal Access Token (PAT)

Create a PAT in Azure DevOps with Build: Read & execute and Pipeline Resources: Use permissions, then configure it:

pipelinectl init          # enter PAT during setup
# or
pipelinectl config set auth pat <your-token>
# or
export ADO_PAT=<your-token>   # env var takes precedence over config

Azure CLI

If you're already signed in with the Azure CLI (az login), you can use it instead of a PAT — no token management required:

az login                          # sign in once
pipelinectl config set auth azcli # switch pipelinectl to use az cli

pipelinectl will call az account get-access-token automatically on each command. This is the recommended method in environments where you're already using the Azure CLI.


Config file

~/.pipelinectl/config.toml:

[azure_devops]
organization   = "mycompany"
project        = "MyProject"
default_branch = "main"     # fallback when not in a git repo

# PAT auth (default):
pat            = "xxxx"     # or use ADO_PAT env var

# Azure CLI auth (alternative to PAT):
# auth           = "azcli"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pipelinectl-0.5.0.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pipelinectl-0.5.0-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

Details for the file pipelinectl-0.5.0.tar.gz.

File metadata

  • Download URL: pipelinectl-0.5.0.tar.gz
  • Upload date:
  • Size: 17.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pipelinectl-0.5.0.tar.gz
Algorithm Hash digest
SHA256 e79968836c47d01fb8ff370601460e375f8fef286a55d92fc9b6f305f190304f
MD5 910477f775e721475d3f92293396c155
BLAKE2b-256 7dbb9b3062cb22f5b999a2695cb66e53e03e1c076c94a16abf15f0936d738795

See more details on using hashes here.

Provenance

The following attestation bundles were made for pipelinectl-0.5.0.tar.gz:

Publisher: publish.yaml on Borrelworst/pipelinectl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pipelinectl-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: pipelinectl-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 15.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pipelinectl-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ec78e840fa29d13b10561618babcc14ccc6045a416105dfb5342faa61058f008
MD5 43a46160a77d202c59c0f6f7cd3d73ad
BLAKE2b-256 4809de0ada6e5cb197495e96395d602f27eb5eb9fb12d1287b56fa7e4212d21f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pipelinectl-0.5.0-py3-none-any.whl:

Publisher: publish.yaml on Borrelworst/pipelinectl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page