Lint Rules Reference
Bivvy includes built-in lint rules to validate your configuration.
Run bivvy lint to check your configuration for issues.
Severity Levels
| Level | Description |
|---|---|
| Error | Prevents execution, must be fixed |
| Warning | Should be addressed, but won’t block |
| Hint | Informational suggestion |
Output Formats
The lint command supports multiple output formats:
# Human-readable (default)bivvy lint
# JSON outputbivvy lint --format=json
# SARIF output (for IDE/CI integration)bivvy lint --format=sarifAuto-Fix
Some rules support automatic fixes:
# Apply automatic fixesbivvy lint --fixStrict Mode
Treat warnings as errors:
# Fail on warnings toobivvy lint --strictBuilt-in Rules
app-name-format
Severity: Warning (Error if empty) Auto-fix: Yes
Validates the app_name field follows naming conventions.
Checks:
app_nameis not empty (Error)app_namedoes not contain spaces (Warning)
Example - Invalid:
app_name: "My App Name" # Warning: contains spacesExample - Valid:
app_name: my-app-nameSuggestion: When spaces are detected, suggests kebab-case alternative.
required-fields
Severity: Error Auto-fix: No
Ensures required configuration fields are present.
Checks:
app_namefield must be present (Error)- At least one workflow should be defined (Warning)
Example - Invalid:
# Missing app_namesteps: hello: command: echo helloExample - Valid:
app_name: my-appsteps: hello: command: echo helloworkflows: default: steps: [hello]circular-dependency
Severity: Error Auto-fix: No
Detects circular dependencies between steps in the depends_on field.
Checks:
- No step can be part of a dependency cycle
Example - Invalid:
steps: a: command: echo a depends_on: [b] b: command: echo b depends_on: [c] c: command: echo c depends_on: [a] # Creates cycle: a -> b -> c -> aExample - Valid:
steps: a: command: echo a depends_on: [b] b: command: echo b depends_on: [c] c: command: echo cDiagnostic: Reports the full cycle path (e.g., “a -> b -> c -> a”).
self-dependency
Severity: Error Auto-fix: No
Detects steps that depend on themselves.
Checks:
- A step cannot list itself in
depends_on
Example - Invalid:
steps: build: command: make build depends_on: [build] # Error: self-dependencyExample - Valid:
steps: build: command: make build depends_on: [setup]undefined-dependency
Severity: Error Auto-fix: No
Ensures all depends_on references point to existing steps.
Checks:
- Every step name in
depends_onmust exist insteps
Example - Invalid:
steps: build: command: make build depends_on: [nonexistent] # Error: step doesn't existExample - Valid:
steps: setup: command: npm install build: command: npm run build depends_on: [setup]undefined-template
Severity: Error Auto-fix: No
Validates that template references resolve to actual templates.
Checks:
- Template names in
templatefield must exist in the registry
Example - Invalid:
steps: deps: template: nonexistent-template # Error: template not foundExample - Valid:
steps: deps: template: brew # Built-in template inputs: packages: [git, node]template-inputs
Severity: Error/Warning Auto-fix: No
Validates that template inputs match their contracts.
Checks:
- Required inputs without defaults must be provided (Error)
- Input types must match the template contract (Error)
- Unknown inputs produce a warning (Warning)
Example - Invalid (missing required):
steps: deps: template: my-template # Missing required input 'packages'Example - Invalid (wrong type):
steps: deps: template: my-template inputs: enabled: "not a boolean" # Error: expected booleanExample - Valid:
steps: deps: template: my-template inputs: packages: [git, node] enabled: trueIDE Integration
VS Code
Use the SARIF Viewer extension to see lint results inline:
bivvy lint --format=sarif > bivvy.sarifGitHub Actions
Upload SARIF results to GitHub Code Scanning:
- name: Lint Bivvy config run: bivvy lint --format=sarif > bivvy.sarif- uses: github/codeql-action/upload-sarif@v2 with: sarif_file: bivvy.sarifJSON Output Schema
The JSON output format includes:
{ "diagnostics": [ { "rule_id": "circular-dependency", "severity": "error", "message": "Circular dependency detected: a -> b -> a", "file": ".bivvy/config.yml", "line": 5, "column": 3, "suggestion": null } ], "summary": { "total": 1, "errors": 1, "warnings": 0, "hints": 0 }}