Comprehensive pre-deployment and post-deployment checklist for MaintainX integrations covering security, reliability, observability, and data integrity.
# Verify production API key works
curl -s -o /dev/null -w "HTTP %{http_code}" \
https://api.getmaintainx.com/v1/users?limit=1 \
-H "Authorization: Bearer $MAINTAINX_API_KEY_PROD"
# Verify no secrets in codebase
npx gitleaks detect --source . --no-git
.env and *.key files in .gitignore
Retry-After header honored on 429 responses// Verify retry logic is configured
const client = axios.create({
baseURL: 'https://api.getmaintainx.com/v1',
timeout: 30_000, // 30 second timeout
headers: { Authorization: `Bearer ${apiKey}` },
});
/health) returning API connectivity status/ready) for container orchestration#!/bin/bash
echo "=== Post-Deployment Verification ==="
# 1. Health check
echo -n "Health check: "
curl -s http://YOUR_SERVICE_URL/health | jq -r '.status'
# 2. API connectivity
echo -n "MaintainX API: "
curl -s -o /dev/null -w "%{http_code}" \
https://api.getmaintainx.com/v1/users?limit=1 \
-H "Authorization: Bearer $MAINTAINX_API_KEY_PROD"
echo ""
# 3. Create test work order
echo "Creating test work order..."
WO=$(curl -s -X POST https://api.getmaintainx.com/v1/workorders \
-H "Authorization: Bearer $MAINTAINX_API_KEY_PROD" \
-H "Content-Type: application/json" \
-d '{"title":"Post-deploy verification test","priority":"LOW"}')
WO_ID=$(echo $WO | jq -r '.id')
echo " Created: #$WO_ID"
# 4. Verify retrieval
echo -n "Retrieve test: "
curl -s "https://api.getmaintainx.com/v1/workorders/$WO_ID" \
-H "Authorization: Bearer $MAINTAINX_API_KEY_PROD" | jq -r '.status'
# 5. Clean up
curl -s -X PATCH "https://api.getmaintainx.com/v1/workorders/$WO_ID" \
-H "Authorization: Bearer $MAINTAINX_API_KEY_PROD" \
-H "Content-Type: application/json" \
-d '{"status":"CLOSED"}' > /dev/null
echo " Cleaned up test work order #$WO_ID"
# 6. Check metrics endpoint
echo -n "Metrics endpoint: "
curl -s -o /dev/null -w "%{http_code}" http://YOUR_SERVICE_URL/metrics
echo ""
echo "=== Verification complete ==="
| Category | Requirement | Priority |
|---|---|---|
| Auth | Secret manager, no hardcoded keys | P0 |
| Errors | Retry + backoff for 429/5xx | P0 |
| Data | Pagination, idempotency, sync state | P0 |
| Observability | Logging, metrics, health check | P0 |
| Performance | Connection pooling, caching | P1 |
| Security | Input validation, audit logging | P1 |
| Deployment | Docker, non-root, resource limits | P1 |
| Recovery | Rollback procedure, reconciliation | P2 |
| Issue | Check | Solution |
|---|---|---|
| Health check fails post-deploy | curl /health |
Check API key is mounted, restart pod |
| Test work order creation fails | Check HTTP status | Verify API key permissions and plan tier |
| Metrics endpoint 404 | Check route config | Ensure metrics server started on correct port |
| High error rate after deploy | Check logs | Roll back, investigate, fix, redeploy |
For API version migrations, see maintainx-upgrade-migration.
Automated pre-deploy gate in CI:
# .github/workflows/deploy.yml
jobs:
pre-deploy-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npx gitleaks detect --source . --no-git
- run: npm run test -- --coverage --coverageThreshold='{"global":{"branches":80}}'
- run: npm run lint
- run: npm run typecheck