Vapora/provisioning/.woodpecker/validate-and-build.yml
Jesús Pérez a395bd972f
Some checks failed
Rust CI / Security Audit (push) Has been cancelled
Rust CI / Check + Test + Lint (nightly) (push) Has been cancelled
Rust CI / Check + Test + Lint (stable) (push) Has been cancelled
mdBook Build & Deploy / Build mdBook (push) Has been cancelled
Nickel Type Check / Nickel Type Checking (push) Has been cancelled
mdBook Build & Deploy / Documentation Quality Check (push) Has been cancelled
mdBook Build & Deploy / Deploy to GitHub Pages (push) Has been cancelled
mdBook Build & Deploy / Notification (push) Has been cancelled
chore: add cd/ci ops
2026-01-12 03:36:55 +00:00

187 lines
6.0 KiB
YAML

# VAPORA Woodpecker Pipeline - Validate & Build
# Validates all configurations and generates deployment artifacts
# Triggers on: push to main/develop, pull requests, manual dispatch
trigger:
event: [push, pull_request, manual]
branch: [main, develop]
paths:
include:
- provisioning/schemas/**
- provisioning/scripts/**
- .woodpecker/validate-and-build.yml
variables:
ARTIFACTS_DIR: provisioning/artifacts
LOG_DIR: provisioning/logs
stages:
setup:
steps:
- name: prepare
image: alpine:latest
commands:
- mkdir -p ${ARTIFACTS_DIR} ${LOG_DIR}
- echo "🔧 VAPORA CI/CD Pipeline - Validate & Build"
- echo "Commit: ${CI_COMMIT_SHA:0:8}"
- echo "Branch: ${CI_COMMIT_BRANCH}"
- echo "Event: ${CI_PIPELINE_EVENT}"
install_dependencies:
steps:
- name: install_tools
image: rust:latest
commands:
- apt-get update && apt-get install -y curl jq yq
- cargo install nu --locked
- cargo install nickel --locked
- pip install jinja2-cli
- nickel --version
- nu --version
- jinja2 --version
- yq --version
validate_solo:
depends_on: [install_dependencies]
steps:
- name: validate_solo
image: rust:latest
commands:
- apt-get update && apt-get install -y curl jq yq
- cargo install nu --locked > /dev/null 2>&1
- cargo install nickel --locked > /dev/null 2>&1
- pip install jinja2-cli > /dev/null 2>&1
- cd provisioning
- nu scripts/validate-config.nu --mode solo 2>&1 | tee ../${LOG_DIR}/validate-solo.log
environment:
RUST_LOG: warn
validate_multiuser:
depends_on: [install_dependencies]
steps:
- name: validate_multiuser
image: rust:latest
commands:
- apt-get update && apt-get install -y curl jq yq
- cargo install nu --locked > /dev/null 2>&1
- cargo install nickel --locked > /dev/null 2>&1
- pip install jinja2-cli > /dev/null 2>&1
- cd provisioning
- nu scripts/validate-config.nu --mode multiuser 2>&1 | tee ../${LOG_DIR}/validate-multiuser.log
environment:
RUST_LOG: warn
validate_enterprise:
depends_on: [install_dependencies]
steps:
- name: validate_enterprise
image: rust:latest
commands:
- apt-get update && apt-get install -y curl jq yq
- cargo install nu --locked > /dev/null 2>&1
- cargo install nickel --locked > /dev/null 2>&1
- pip install jinja2-cli > /dev/null 2>&1
- cd provisioning
- nu scripts/validate-config.nu --mode enterprise 2>&1 | tee ../${LOG_DIR}/validate-enterprise.log
environment:
RUST_LOG: warn
build_artifacts:
depends_on: [validate_solo, validate_multiuser, validate_enterprise]
steps:
- name: install_tools
image: rust:latest
commands:
- apt-get update && apt-get install -y curl jq yq
- cargo install nu --locked > /dev/null 2>&1
- cargo install nickel --locked > /dev/null 2>&1
- pip install jinja2-cli > /dev/null 2>&1
- echo "✓ Tools installed"
- name: build_artifacts
image: rust:latest
commands:
- cd provisioning
- nu scripts/ci-pipeline.nu --artifact-dir ../artifacts --mode multiuser 2>&1 | tee ../${LOG_DIR}/build.log
environment:
RUST_LOG: warn
- name: verify_artifacts
image: alpine:latest
commands:
- ls -la artifacts/
- echo "Validating JSON outputs..."
- for f in artifacts/config-*.json; do jq . "$$f" > /dev/null && echo "✓ $$f"; done
- echo "Validating YAML outputs..."
- yq eval '.' artifacts/*.yaml > /dev/null && echo "✓ YAML files valid"
- echo "Validating TOML outputs..."
- test -f artifacts/*.toml && echo "✓ TOML files generated"
- name: generate_manifest
image: alpine:latest
commands:
- cat > artifacts/README.md << 'EOF'
# VAPORA Deployment Artifacts
Generated: $(date -u +'%Y-%m-%dT%H:%M:%SZ')
Commit: ${CI_COMMIT_SHA}
Branch: ${CI_COMMIT_BRANCH}
Pipeline: ${CI_BUILD_LINK}
## Files Generated
### Configurations (JSON)
- config-solo.json - Solo mode configuration
- config-multiuser.json - Multiuser mode configuration
- config-enterprise.json - Enterprise mode configuration
### Configuration Formats
- vapora-solo.toml / vapora-solo.yaml
- vapora-multiuser.toml / vapora-multiuser.yaml
- vapora-enterprise.toml / vapora-enterprise.yaml
### Kubernetes Manifests
- configmap.yaml - Kubernetes ConfigMap
- deployment.yaml - Kubernetes Deployments
### Docker Compose
- docker-compose.yml - Docker Compose stack
## Status
✅ All configurations generated and validated
✅ All templates rendered successfully
✅ Ready for deployment
EOF
- cat artifacts/README.md
publish:
depends_on: [build_artifacts]
steps:
- name: publish_artifacts
image: alpine:latest
commands:
- echo "📦 Artifacts ready for deployment"
- ls -lah artifacts/
- echo ""
- echo "Total files: $(find artifacts -type f | wc -l)"
- du -sh artifacts/
notify:
slack:
enabled: true
when:
status: [success, failure]
webhook_id: ${SLACK_WEBHOOK}
channel: deployments
template: |
{{#success build.status}}
✅ **VAPORA Validate & Build Successful**
Commit: {{commit.sha}}
Branch: {{commit.branch}}
Author: {{commit.author}}
{{else}}
❌ **VAPORA Validate & Build Failed**
Commit: {{commit.sha}}
Branch: {{commit.branch}}
{{/success}}