Documentation Index
Fetch the complete documentation index at: https://mintlify.com/dotandev/envcheck/llms.txt
Use this file to discover all available pages before exploring further.
Overview
envcheck uses standard Unix exit codes to indicate the validation results. These exit codes are essential for integrating envcheck into CI/CD pipelines, scripts, and automated workflows.
Exit Code Reference
0 - Success
Meaning: All validations passed or only warnings were found.
When it occurs:
- All checks passed successfully
- Some non-critical warnings were found, but no errors
Example scenarios:
# All checks pass
$ envcheck
✓ All checks passed!
$ echo $?
0
# Warnings present but no errors
$ envcheck
⚠ 2 warning(s) found, but you can proceed.
$ echo $?
0
CI/CD behavior:
- Pipeline should continue
- Deployment can proceed
- No action required
1 - Validation Failure
Meaning: One or more validation checks failed with errors.
When it occurs:
- Required tools are missing or have incorrect versions
- Required environment variables are not set
- Required ports are unavailable
- Required files do not exist
- Network endpoints are unreachable or return unexpected status codes
Example scenarios:
# Required tool missing
$ envcheck
✗ node not found
❌ 1 issue(s) found. Fix them to continue.
$ echo $?
1
# Version mismatch
$ envcheck
✗ node version 16.14.0 does not satisfy >=18.0.0
❌ 1 issue(s) found. Fix them to continue.
$ echo $?
1
# Port in use
$ envcheck
✗ Port 3000 is already in use
❌ 1 issue(s) found. Fix them to continue.
$ echo $?
1
CI/CD behavior:
- Pipeline should fail
- Deployment should be blocked
- Errors must be fixed before proceeding
Implementation Details
The exit code logic is implemented in src/reporter.rs:92-98:
pub fn exit_code(&self) -> i32 {
if self.has_errors() {
1
} else {
0
}
}
The has_errors() method checks if any validation result has an Error status:
pub fn has_errors(&self) -> bool {
self.results.iter().any(|r| matches!(r.status, ValidationStatus::Error))
}
Validation Status Levels
envcheck uses three validation status levels that affect the exit code:
Success
- Validation check passed
- Does not affect exit code
- Displayed with ✓ symbol
Warning
- Non-critical issue detected
- Does not cause exit code 1
- Displayed with ⚠ symbol
- Includes optional suggestions for improvement
Error
- Critical validation failure
- Causes exit code 1
- Displayed with ✗ symbol
- Includes optional suggestions for remediation
Using Exit Codes in Scripts
Bash Script
#!/bin/bash
envcheck
if [ $? -eq 0 ]; then
echo "Environment is ready"
npm start
else
echo "Environment validation failed"
exit 1
fi
CI/CD Pipeline Examples
GitHub Actions
name: Validate Environment
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run envcheck
run: |
envcheck
# Exits with code 1 if validation fails
- name: Deploy
if: success()
run: ./deploy.sh
GitLab CI
validate-environment:
stage: test
script:
- envcheck
# Job fails if exit code is non-zero
deploy:
stage: deploy
script:
- ./deploy.sh
needs:
- validate-environment
CircleCI
version: 2.1
jobs:
validate:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: Validate environment
command: envcheck
# Step fails if exit code is 1
workflows:
build-and-deploy:
jobs:
- validate
- deploy:
requires:
- validate
JSON Output and Exit Codes
When using --json flag, the exit code behavior remains the same:
$ envcheck --json
{
"results": [...],
"summary": {
"errors": 1,
"warnings": 0,
"successes": 2
},
"passed": false
}
$ echo $?
1
The passed field in JSON output indicates whether the exit code will be 0 (true) or 1 (false).
Best Practices
Use exit codes in automation:
- Always check exit codes in scripts and pipelines
- Fail fast when exit code is 1
- Log results for debugging failed validations
Warning status does not fail:
Remember that warnings do not cause a non-zero exit code. If you need warnings to fail your pipeline, you’ll need to parse the JSON output and check the warning count.
# Fail on warnings
RESULT=$(envcheck --json)
WARNINGS=$(echo $RESULT | jq '.summary.warnings')
if [ $WARNINGS -gt 0 ]; then
echo "Warnings are not allowed in production"
exit 1
fi