Skip to content

feat: Production-ready Agentic AI framework with enterprise deployment #1

feat: Production-ready Agentic AI framework with enterprise deployment

feat: Production-ready Agentic AI framework with enterprise deployment #1

Workflow file for this run

name: Deploy to Production
on:
push:
branches: [ main ]
tags:
- 'v*.*.*'
workflow_dispatch:
inputs:
environment:
description: 'Deployment environment'
required: true
default: 'staging'
type: choice
options:
- staging
- production
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
# Build and push Docker image
build-and-push:
name: Build & Push Docker Image
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
outputs:
image-tag: ${{ steps.meta.outputs.tags }}
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=sha,prefix={{branch}}-
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
target: production
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
BUILD_DATE=${{ github.event.head_commit.timestamp }}
VCS_REF=${{ github.sha }}
VERSION=${{ steps.meta.outputs.version }}
# Deploy to staging
deploy-staging:
name: Deploy to Staging
runs-on: ubuntu-latest
needs: build-and-push
if: github.event_name == 'push' && github.ref == 'refs/heads/develop'
environment:
name: staging
url: https://staging.agenticai.example.com
steps:
- uses: actions/checkout@v4
- name: Deploy to staging server
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.STAGING_HOST }}
username: ${{ secrets.STAGING_USER }}
key: ${{ secrets.STAGING_SSH_KEY }}
script: |
cd /opt/agenticai
docker-compose pull
docker-compose up -d
docker-compose exec -T api alembic upgrade head
- name: Health check
run: |
sleep 10
curl -f https://staging.agenticai.example.com/health || exit 1
# Deploy to production
deploy-production:
name: Deploy to Production
runs-on: ubuntu-latest
needs: build-and-push
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
environment:
name: production
url: https://agenticai.example.com
steps:
- uses: actions/checkout@v4
- name: Create backup
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PRODUCTION_HOST }}
username: ${{ secrets.PRODUCTION_USER }}
key: ${{ secrets.PRODUCTION_SSH_KEY }}
script: |
cd /opt/agenticai
./scripts/backup.sh
- name: Deploy to production server
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PRODUCTION_HOST }}
username: ${{ secrets.PRODUCTION_USER }}
key: ${{ secrets.PRODUCTION_SSH_KEY }}
script: |
cd /opt/agenticai
docker-compose pull
docker-compose up -d --no-deps api worker
docker-compose exec -T api alembic upgrade head
- name: Health check
run: |
sleep 15
curl -f https://agenticai.example.com/health || exit 1
- name: Rollback on failure
if: failure()
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PRODUCTION_HOST }}
username: ${{ secrets.PRODUCTION_USER }}
key: ${{ secrets.PRODUCTION_SSH_KEY }}
script: |
cd /opt/agenticai
./scripts/rollback.sh
- name: Notify on success
if: success()
run: echo "Production deployment successful! 🚀"
# Database migrations
migrate-production:
name: Run Database Migrations
runs-on: ubuntu-latest
needs: deploy-production
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- name: Run Alembic migrations
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PRODUCTION_HOST }}
username: ${{ secrets.PRODUCTION_USER }}
key: ${{ secrets.PRODUCTION_SSH_KEY }}
script: |
cd /opt/agenticai
docker-compose exec -T api alembic upgrade head
docker-compose exec -T api alembic current
# Smoke tests
smoke-tests:
name: Smoke Tests
runs-on: ubuntu-latest
needs: deploy-production
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Run smoke tests
env:
API_URL: https://agenticai.example.com
API_KEY: ${{ secrets.SMOKE_TEST_API_KEY }}
run: |
# Health check
curl -f $API_URL/health
# API docs accessible
curl -f $API_URL/docs
# Metrics endpoint
curl -f $API_URL/metrics
echo "Smoke tests passed! ✅"