CI CD - emielregis2/SmartFlowAI GitHub Wiki
Kompletny przewodnik po systemie Continuous Integration i Continuous Deployment dla aplikacji SmartFlowAI.
SmartFlowAI wykorzystuje GitHub Actions do automatyzacji testów, budowania i deploymentu. Pipeline składa się z 7 głównych jobów wykonywanych sekwencyjnie i równolegle.
graph TD
A[📤 Push/PR] --> B[🧪 Test Job]
B --> C[🔒 Security Job]
C --> D[🏗️ Build Job]
D --> E[🐳 Docker Job]
E --> F{🌿 Branch?}
F -->|develop| G[🚀 Deploy Staging]
F -->|main| H[🚀 Deploy Production]
G --> I[📊 Monitoring]
H --> I[📊 Monitoring]
I --> J[🧹 Cleanup]
Metryka | Wartość | Opis |
---|---|---|
Całkowity czas | 12-18 min | Od push do deployment |
Testy | 25+ testów | Unit, Integration, E2E |
Pokrycie kodu | 85%+ | Automatyczne sprawdzanie |
Środowiska | 3 | Test, Staging, Production |
Języki | Python 3.9-3.11 | Matrix testing |
Trigger: Każdy push i PR
Matrix: Python 3.9, 3.10, 3.11
Równoległość: 3 joby jednocześnie
# Przykład konfiguracji
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11"]
Co się dzieje:
- ✅ Linting - flake8, black, isort
- ✅ Unit Tests - test_production_ready.py (25+ testów)
- ✅ Integration Tests - test_comprehensive.py (15+ testów)
- ✅ E2E Tests - test_e2e.py (10+ testów)
- ✅ AI Tests - test_enhanced_analysis.py (5+ testów)
- ✅ UTF-8 Tests - test_utf8.py (kodowanie)
- ✅ Coverage Report - upload do Codecov
Przykładowe testy:
# test_production_ready.py
def test_streamlit_app_loads():
"""Test czy aplikacja się uruchamia"""
def test_supabase_connection():
"""Test połączenia z bazą danych"""
def test_openai_integration():
"""Test integracji z OpenAI API"""
Trigger: Po udanych testach
Narzędzia: Bandit, Safety, Hadolint
Co się dzieje:
- 🛡️ Bandit - skanowanie kodu pod kątem podatności
- 🔍 Safety - sprawdzanie zależności Python
- 🐳 Hadolint - linting Dockerfile
- 📊 Raporty - JSON i TXT dla każdego narzędzia
Przykładowe sprawdzenia:
# Bandit - sprawdza m.in.:
- SQL injection
- Hardcoded passwords
- Shell injection
- Insecure random generators
# Safety - sprawdza:
- Known vulnerabilities in dependencies
- Outdated packages with security issues
Trigger: Po security check
Artefakty: Pakiet aplikacji, wheel, tar.gz
Co się dzieje:
- 📦 Python Build - tworzenie wheel package
- 🗜️ App Package - kompresja aplikacji
- 📤 Upload Artifacts - przechowywanie przez 30 dni
- ✅ Validation - sprawdzenie integralności
Struktura artefaktu:
smartflowai-app.tar.gz
├── streamlit_app.py
├── requirements.txt
├── .streamlit/
│ ├── config.toml
│ └── secrets.toml.example
└── static/
└── assets/
Trigger: Tylko na branch main
Registry: Docker Hub
Cache: GitHub Actions Cache
Co się dzieje:
- 🏗️ Multi-stage build - optymalizacja rozmiaru
- 🏷️ Tagging - latest + SHA commit
- 📤 Push - do Docker Hub
- 💾 Cache - przyspieszenie kolejnych buildów
Tags tworzone:
your-username/smartflowai:latest
your-username/smartflowai:abc1234 # SHA commit
- Środowisko: staging
- URL: https://smartflowai-staging.streamlit.app
- Automatyczny: Bez approval
- Dane: Test database
- Środowisko: production
- URL: https://smartflowai.streamlit.app
- Manual approval: Wymagane (1-2 reviewers)
- Wait timer: 5 minut
- Dane: Production database
Co się dzieje:
- 🏥 Health Check - sprawdzenie czy aplikacja odpowiada
- 📧 Notifications - Slack/Teams/Email
- 📈 Metrics - czas deploymentu, success rate
- 🔄 Rollback - automatyczny w przypadku błędu
Co się dzieje:
- 🗑️ Stare artefakty - usuwanie starszych niż 30 dni
- 💾 Cache cleanup - optymalizacja przestrzeni
- 📊 Logs rotation - archiwizacja logów
Dodaj w Settings → Secrets and variables → Actions:
# Docker Hub
DOCKER_USERNAME=your-docker-username
DOCKER_PASSWORD=your-docker-password
# Production API Keys
PROD_OPENAI_API_KEY=sk-your-production-key
PROD_SUPABASE_URL=https://your-prod-supabase.co
PROD_SUPABASE_ANON_KEY=your-prod-supabase-key
PROD_SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
# Notifications (opcjonalnie)
SLACK_WEBHOOK_URL=https://hooks.slack.com/your-webhook
TEAMS_WEBHOOK_URL=https://your-teams-webhook
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/your-webhook
# Monitoring (opcjonalnie)
SENTRY_DSN=https://your-sentry-dsn
DATADOG_API_KEY=your-datadog-key
name: staging
protection_rules: []
secrets:
STAGING_OPENAI_API_KEY: sk-staging-key
STAGING_SUPABASE_URL: https://staging-supabase.co
STAGING_SUPABASE_ANON_KEY: staging-anon-key
name: production
protection_rules:
- required_reviewers: 2
- wait_timer: 300 # 5 minut
- prevent_self_review: true
secrets:
PROD_OPENAI_API_KEY: sk-prod-key
PROD_SUPABASE_URL: https://prod-supabase.co
PROD_SUPABASE_ANON_KEY: prod-anon-key
Dla branch main
w Settings → Branches:
- ✅ Require PR - przed merge
- ✅ Require status checks:
-
test (3.9)
✅ -
test (3.10)
✅ -
test (3.11)
✅ -
security
✅ -
build
✅
-
- ✅ Require up-to-date - branch musi być aktualny
- ✅ Restrict pushes - tylko przez PR
- ✅ Require signed commits (opcjonalnie)
# Tworzenie feature branch
git checkout -b feature/new-analysis-feature
git push -u origin feature/new-analysis-feature
# Rozwój funkcji...
git add .
git commit -m "feat: dodanie nowej funkcji analizy"
git push origin feature/new-analysis-feature
# Tworzenie PR (GitHub CLI)
gh pr create \
--title "feat: Nowa funkcja analizy procesów" \
--body "Dodaje zaawansowaną analizę z wykorzystaniem GPT-4o" \
--assignee @me \
--label enhancement
# Lub przez GitHub Web UI
Co się dzieje: Uruchamiają się testy i security check (bez deploymentu)
# Po review i approval
gh pr merge --squash --delete-branch
Co się dzieje: Pełny pipeline z deploymentem do produkcji
# Pilna naprawa na produkcji
git checkout main
git pull origin main
git checkout -b hotfix/critical-bug-fix
# Naprawa...
git add .
git commit -m "fix: naprawa krytycznego błędu w analizie AI"
git push origin hotfix/critical-bug-fix
# Szybki PR i merge
gh pr create --title "HOTFIX: Krytyczna naprawa" --body "Pilna naprawa"
Dodaj do README.md:



Pipeline automatycznie wysyła powiadomienia o:
- ✅ Udanym deploymencie - Slack/Teams
- ❌ Błędach w testach - Email + Slack
- 🔒 Problemach bezpieczeństwa - Natychmiastowe powiadomienie
- 📊 Metrykach wydajności - Cotygodniowy raport
# Build lokalny
docker build -t smartflowai:local .
# Uruchomienie z docker-compose
docker-compose up -d
# Sprawdzenie logów
docker-compose logs -f smartflowai
# Health check
curl http://localhost:8501/_stcore/health
# Zatrzymanie
docker-compose down
# Pull najnowszego obrazu
docker pull your-username/smartflowai:latest
# Uruchomienie z pełną konfiguracją
docker run -d \
--name smartflowai-prod \
--restart unless-stopped \
-p 8501:8501 \
-e OPENAI_API_KEY=$PROD_OPENAI_API_KEY \
-e SUPABASE_URL=$PROD_SUPABASE_URL \
-e SUPABASE_ANON_KEY=$PROD_SUPABASE_ANON_KEY \
-e ENVIRONMENT=production \
-v /var/log/smartflowai:/app/logs \
your-username/smartflowai:latest
# Sprawdzenie statusu
docker ps | grep smartflowai
docker logs smartflowai-prod --tail 50
# Instalacja pre-commit
pip install pre-commit
# Instalacja hooks
pre-commit install
# Instalacja commit-msg hook
pre-commit install --hook-type commit-msg
# Test wszystkich plików
pre-commit run --all-files
Automatycznie uruchamiane przed każdym commitem:
- Black - formatowanie kodu Python
- isort - sortowanie importów
- flake8 - linting kodu
- mypy - type checking
- bandit - security linting
- YAML/JSON check - sprawdzanie składni
- Trailing whitespace - usuwanie białych znaków
- Large files check - sprawdzanie dużych plików
- Dockerfile lint - hadolint
- Safety check - podatności w zależnościach
Przykład użycia:
git add .
git commit -m "feat: nowa funkcja"
# Automatycznie uruchamiają się wszystkie hooks
# Jeśli coś nie przejdzie, commit zostanie odrzucony
Metryka | Cel | Aktualnie |
---|---|---|
Build Success Rate | >95% | 98.2% |
Test Coverage | >80% | 87.3% |
Deploy Time | <15 min | 12.4 min |
MTTR | <30 min | 18.7 min |
Security Issues | 0 critical | 0 |
- GitHub Actions - wbudowane metryki
- Codecov - pokrycie testami
- Docker Hub - statystyki obrazów
- Sentry - monitoring błędów (opcjonalnie)
- Datadog - metryki infrastruktury (opcjonalnie)
# Lokalne uruchomienie testów
python -m pytest test_production_ready.py -v
python run_tests.py
# Sprawdzenie coverage
python -m pytest --cov=. --cov-report=html
# Lokalne sprawdzenie bezpieczeństwa
bandit -r . -f txt
safety check
hadolint Dockerfile
# Lokalne testowanie Docker
docker build -t test .
docker run --rm test python -c "import streamlit; print('OK')"
# Sprawdzenie secrets
echo $PROD_OPENAI_API_KEY | wc -c # Powinno być >50
curl -H "Authorization: Bearer $PROD_SUPABASE_ANON_KEY" $PROD_SUPABASE_URL/rest/v1/
# GitHub Actions logs
gh run list --limit 10
gh run view <run-id> --log
# Docker logs
docker logs smartflowai-prod --tail 100 --follow
# Aplikacja logs
tail -f /var/log/smartflowai/app.log
- 🔄 Blue-Green Deployment - zero-downtime deployments
- 📊 Advanced Monitoring - Prometheus + Grafana
- 🧪 Chaos Engineering - testy odporności
- 🔒 SAST/DAST - zaawansowane testy bezpieczeństwa
- 📱 Mobile Testing - testy na urządzeniach mobilnych
- 🌍 Multi-region - deployment w wielu regionach
🎉 Gratulacje! Masz teraz pełny obraz systemu CI/CD dla SmartFlowAI!
Następny krok: Testowanie - dowiedz się więcej o strategii testowania aplikacji.