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.
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:
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 }}"