Tugboat

Welcome to Tugboat, your dedicated companion for validating and improving Argo Workflow manifests.

As a linter for Argo Workflows, Tugboat helps you identify and resolve potential issues before they become runtime problems, saving you time and ensuring smoother deployments.

Screenshot of tugboat command

Argo Workflows empower developers to orchestrate complex containerized processes, but designing error-free manifests can be challenging.

Tugboat provides a range of features tailored to the needs of Argo Workflow users:

  • ⚙️ Syntax Validation
    • Catch common mistakes that might cause workflows to fail at runtime.

  • 🔍 Error Detection
    • Highlight undefined, unused, or misconfigured references within manifests.

  • 📘 Argo Workflow Support
    • Designed to align with Argo Workflow specifications, Tugboat ensures compatibility with supported versions of Argo.

  • 🚀 Lightweight and Fast
    • Tugboat integrates seamlessly into your development workflow, offering quick feedback without compromising your pace.

  • 📊 Actionable Insights
    • Clear, actionable error messages and warnings to help you fix issues efficiently.

Note

Tugboat in currently in development and may not yet cover every use case or workflow configuration.

While Tugboat provides valuable linting capabilities, certain rules may be overly strict or aggressive in their assessments. We are eager to hear from users like you — your feedback will directly influence how we refine and improve Tugboat.

Get Tugboat

Tugboat requires Python 3.12 or later.

The package is available on PyPI as argo-tugboat. Just pick your favorite way to install it:

# install
pipx install argo-tugboat

# invoke without installing
pipx run argo-tugboat
# invoke without installing
uvx --from=argo-tugboat tugboat
pip install argo-tugboat

Argo Workflows Manifest

To get started, find an Argo Workflow manifest that contains an error. For example, the following manifest has an invalid entrypoint:

whalesay.yaml
 1apiVersion: argoproj.io/v1alpha1
 2kind: Workflow
 3metadata:
 4  generateName: test-
 5spec:
 6  entrypoint: ducksay
 7  templates:
 8    - name: whalesay
 9      inputs:
10        parameters:
11          - name: message
12            value: Hello Argo!
13      container:
14        image: docker/whalesay:latest
15        command: [cowsay]
16        args:
17          - "{{ inputs.parameters.message }}"

Run

Lint your workflow manifest by running:

tugboat whalesay.yaml

This will output the following:

WF201 Invalid entrypoint
  @whalesay.yaml:6:15 (test-)

  4 |   generateName: test-
  5 | spec:
  6 |   entrypoint: ducksay
    |               ^^^^^^^
    |               └ WF201 at .spec.entrypoint
  7 |   templates:
  8 |     - name: whalesay

  Entrypoint 'ducksay' is not defined in any template.
  Defined entrypoints: 'whalesay'

  Do you mean: whalesay

Found 1 failures

For more information on how to use Tugboat, runs its help command:

tugboat --help