Translate all Portuguese text to English

This commit is contained in:
2025-09-25 21:05:41 -03:00
parent f8279933d6
commit f38689d9dd
19 changed files with 509 additions and 509 deletions

View File

@@ -1,117 +1,117 @@
#!/bin/bash
# Script para deploy automático após GitHub Actions
# Este script pode ser executado localmente ou via webhook
# Auto-deploy script after GitHub Actions
# This script can be executed locally or via webhook
set -e
# Cores para output
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configurações
# Configuration
IMAGE_NAME="resource-governance"
REGISTRY="andersonid"
NAMESPACE="resource-governance"
IMAGE_TAG=${1:-latest}
echo -e "${BLUE}🚀 Auto-Deploy para OpenShift${NC}"
echo -e "${BLUE}Auto-Deploy to OpenShift${NC}"
echo "================================"
echo "Imagem: ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
echo "Image: ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
echo "Namespace: ${NAMESPACE}"
echo ""
# 1. Verificar login no OpenShift
# 1. Check OpenShift login
if ! oc whoami > /dev/null 2>&1; then
echo -e "${RED}❌ Não logado no OpenShift. Por favor, faça login com 'oc login'.${NC}"
echo -e "${RED}ERROR: Not logged into OpenShift. Please login with 'oc login'.${NC}"
exit 1
fi
echo -e "${GREEN}✅ Logado no OpenShift como: $(oc whoami)${NC}"
echo -e "${GREEN}SUCCESS: Logged into OpenShift as: $(oc whoami)${NC}"
echo ""
# 2. Verificar se a imagem existe no Docker Hub
echo -e "${BLUE}🔍 Verificando imagem no Docker Hub...${NC}"
# 2. Check if image exists on Docker Hub
echo -e "${BLUE}Checking image on Docker Hub...${NC}"
if ! skopeo inspect docker://${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} > /dev/null 2>&1; then
echo -e "${RED} Imagem ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} não encontrada no Docker Hub!${NC}"
echo -e "${RED}ERROR: Image ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} not found on Docker Hub!${NC}"
exit 1
fi
echo -e "${GREEN}✅ Imagem encontrada no Docker Hub${NC}"
echo -e "${GREEN}SUCCESS: Image found on Docker Hub${NC}"
echo ""
# 3. Verificar se o namespace existe
# 3. Check if namespace exists
if ! oc get namespace ${NAMESPACE} > /dev/null 2>&1; then
echo -e "${BLUE}📋 Criando namespace ${NAMESPACE}...${NC}"
echo -e "${BLUE}Creating namespace ${NAMESPACE}...${NC}"
oc create namespace ${NAMESPACE}
else
echo -e "${GREEN} Namespace ${NAMESPACE} existe${NC}"
echo -e "${GREEN}SUCCESS: Namespace ${NAMESPACE} already exists${NC}"
fi
echo ""
# 4. Aplicar manifests básicos
echo -e "${BLUE}📋 Aplicando manifests básicos...${NC}"
# 4. Apply basic manifests
echo -e "${BLUE}Applying basic manifests...${NC}"
oc apply -f k8s/rbac.yaml -n ${NAMESPACE}
oc apply -f k8s/configmap.yaml -n ${NAMESPACE}
echo ""
# 5. Verificar se o deployment existe
# 5. Check if deployment exists
if oc get deployment ${IMAGE_NAME} -n ${NAMESPACE} > /dev/null 2>&1; then
echo -e "${BLUE}🔄 Deployment existente encontrado. Iniciando atualização...${NC}"
echo -e "${BLUE}Existing deployment found. Starting update...${NC}"
# Obter imagem atual
# Get current image
CURRENT_IMAGE=$(oc get deployment ${IMAGE_NAME} -n ${NAMESPACE} -o jsonpath='{.spec.template.spec.containers[0].image}')
echo "Imagem atual: ${CURRENT_IMAGE}"
echo "Nova imagem: ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
echo "Current image: ${CURRENT_IMAGE}"
echo "New image: ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
# Verificar se a imagem mudou
# Check if image changed
if [ "${CURRENT_IMAGE}" = "${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}" ]; then
echo -e "${YELLOW}⚠️ Imagem já está atualizada. Nenhuma ação necessária.${NC}"
echo -e "${YELLOW}WARNING: Image already up to date. No action needed.${NC}"
exit 0
fi
# Atualizar deployment com nova imagem
echo -e "${BLUE}🔄 Atualizando imagem do deployment...${NC}"
# Update deployment with new image
echo -e "${BLUE}Updating deployment image...${NC}"
oc set image deployment/${IMAGE_NAME} ${IMAGE_NAME}=${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} -n ${NAMESPACE}
# Aguardar rollout
echo -e "${BLUE}⏳ Aguardando rollout (pode levar alguns minutos)...${NC}"
# Wait for rollout
echo -e "${BLUE}Waiting for rollout (may take a few minutes)...${NC}"
oc rollout status deployment/${IMAGE_NAME} -n ${NAMESPACE} --timeout=300s
echo -e "${GREEN} Rollout concluído com sucesso!${NC}"
echo -e "${GREEN}SUCCESS: Rollout completed successfully!${NC}"
else
echo -e "${BLUE}📦 Deployment não encontrado. Criando novo deployment...${NC}"
# Aplicar deployment, service e route
echo -e "${BLUE}Deployment not found. Creating new deployment...${NC}"
# Apply deployment, service and route
oc apply -f k8s/deployment.yaml -n ${NAMESPACE}
oc apply -f k8s/service.yaml -n ${NAMESPACE}
oc apply -f k8s/route.yaml -n ${NAMESPACE}
# Aguardar rollout inicial
echo -e "${BLUE}⏳ Aguardando rollout inicial...${NC}"
# Wait for initial rollout
echo -e "${BLUE}Waiting for initial rollout...${NC}"
oc rollout status deployment/${IMAGE_NAME} -n ${NAMESPACE} --timeout=300s
echo -e "${GREEN}✅ Rollout inicial concluído com sucesso!${NC}"
echo -e "${GREEN}SUCCESS: Initial rollout completed successfully!${NC}"
fi
echo ""
# 6. Verificar status final
echo -e "${BLUE}📊 STATUS FINAL:${NC}"
# 6. Check final status
echo -e "${BLUE}FINAL STATUS:${NC}"
echo "================"
oc get deployment ${IMAGE_NAME} -n ${NAMESPACE}
echo ""
oc get pods -n ${NAMESPACE} -l app.kubernetes.io/name=${IMAGE_NAME}
echo ""
# 7. Obter URLs de acesso
# 7. Get access URLs
ROUTE_URL=$(oc get route ${IMAGE_NAME}-route -n ${NAMESPACE} -o jsonpath='{.spec.host}' 2>/dev/null || echo "")
echo -e "${BLUE}🌐 URLs de acesso:${NC}"
echo -e "${BLUE}Access URLs:${NC}"
if [ -n "$ROUTE_URL" ]; then
echo " OpenShift: https://$ROUTE_URL"
else
echo " OpenShift: Rota não encontrada ou não disponível."
echo " OpenShift: Route not found or not available."
fi
echo " Port-forward: http://localhost:8080 (se ativo)"
echo " Port-forward: http://localhost:8080 (if active)"
echo ""
echo -e "${GREEN} Auto-deploy concluído com sucesso!${NC}"
echo -e "${BLUE}🔄 Estratégia: Rolling Update com maxUnavailable=0 (zero downtime)${NC}"
echo -e "${GREEN}SUCCESS: Auto-deploy completed successfully!${NC}"
echo -e "${BLUE}Strategy: Rolling Update with maxUnavailable=0 (zero downtime)${NC}"

View File

@@ -1,57 +1,57 @@
#!/bin/bash
# Script de build para OpenShift Resource Governance Tool
# Build script for OpenShift Resource Governance Tool
set -e
# Cores para output
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configurações
# Configuration
IMAGE_NAME="resource-governance"
TAG="${1:-latest}"
REGISTRY="${2:-andersonid}"
FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${TAG}"
echo -e "${BLUE}🚀 Building OpenShift Resource Governance Tool${NC}"
echo -e "${BLUE}Building OpenShift Resource Governance Tool${NC}"
echo -e "${BLUE}Image: ${FULL_IMAGE_NAME}${NC}"
# Verificar se Podman está instalado
# Check if Podman is installed
if ! command -v podman &> /dev/null; then
echo -e "${RED} Podman não está instalado. Instale o Podman e tente novamente.${NC}"
echo -e "${RED}ERROR: Podman is not installed. Install Podman and try again.${NC}"
exit 1
fi
# Build da imagem
echo -e "${YELLOW}📦 Building container image with Podman...${NC}"
# Build image
echo -e "${YELLOW}Building container image with Podman...${NC}"
podman build -t "${FULL_IMAGE_NAME}" .
if [ $? -eq 0 ]; then
echo -e "${GREEN} Image built successfully!${NC}"
echo -e "${GREEN}SUCCESS: Image built successfully!${NC}"
else
echo -e "${RED} Build failed!${NC}"
echo -e "${RED}ERROR: Build failed!${NC}"
exit 1
fi
# Testar a imagem
echo -e "${YELLOW}🧪 Testing image...${NC}"
podman run --rm "${FULL_IMAGE_NAME}" python -c "import app.main; print(' App imports successfully')"
# Test image
echo -e "${YELLOW}Testing image...${NC}"
podman run --rm "${FULL_IMAGE_NAME}" python -c "import app.main; print('SUCCESS: App imports successfully')"
if [ $? -eq 0 ]; then
echo -e "${GREEN} Image test passed!${NC}"
echo -e "${GREEN}SUCCESS: Image test passed!${NC}"
else
echo -e "${RED} Image test failed!${NC}"
echo -e "${RED}ERROR: Image test failed!${NC}"
exit 1
fi
# Mostrar informações da imagem
echo -e "${BLUE}📊 Image information:${NC}"
# Show image information
echo -e "${BLUE}Image information:${NC}"
podman images "${FULL_IMAGE_NAME}"
echo -e "${GREEN}🎉 Build completed successfully!${NC}"
echo -e "${GREEN}SUCCESS: Build completed successfully!${NC}"
echo -e "${BLUE}To push to registry:${NC}"
echo -e " podman push ${FULL_IMAGE_NAME}"
echo -e "${BLUE}To run locally:${NC}"

View File

@@ -1,90 +1,90 @@
#!/bin/bash
# Script de deploy para OpenShift Resource Governance Tool
# Deploy script for OpenShift Resource Governance Tool
set -e
# Cores para output
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configurações
# Configuration
NAMESPACE="resource-governance"
IMAGE_NAME="resource-governance"
TAG="${1:-latest}"
REGISTRY="${2:-andersonid}"
FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${TAG}"
echo -e "${BLUE}🚀 Deploying OpenShift Resource Governance Tool${NC}"
echo -e "${BLUE}Deploying OpenShift Resource Governance Tool${NC}"
echo -e "${BLUE}Namespace: ${NAMESPACE}${NC}"
echo -e "${BLUE}Image: ${FULL_IMAGE_NAME}${NC}"
# Verificar se oc está instalado
# Check if oc is installed
if ! command -v oc &> /dev/null; then
echo -e "${RED} OpenShift CLI (oc) não está instalado.${NC}"
echo -e "${YELLOW}Instale o oc CLI: https://docs.openshift.com/container-platform/latest/cli_reference/openshift_cli/getting-started-cli.html${NC}"
echo -e "${RED}ERROR: OpenShift CLI (oc) is not installed.${NC}"
echo -e "${YELLOW}Install oc CLI: https://docs.openshift.com/container-platform/latest/cli_reference/openshift_cli/getting-started-cli.html${NC}"
exit 1
fi
# Verificar se está logado no OpenShift
# Check if logged into OpenShift
if ! oc whoami &> /dev/null; then
echo -e "${RED}❌ Não está logado no OpenShift.${NC}"
echo -e "${YELLOW}Faça login com: oc login <cluster-url>${NC}"
echo -e "${RED}ERROR: Not logged into OpenShift.${NC}"
echo -e "${YELLOW}Login with: oc login <cluster-url>${NC}"
exit 1
fi
echo -e "${GREEN}✅ Logado como: $(oc whoami)${NC}"
echo -e "${GREEN}SUCCESS: Logged in as: $(oc whoami)${NC}"
# Criar namespace se não existir
echo -e "${YELLOW}📁 Creating namespace...${NC}"
# Create namespace if it doesn't exist
echo -e "${YELLOW}Creating namespace...${NC}"
oc apply -f k8s/namespace.yaml
# Aplicar RBAC
echo -e "${YELLOW}🔐 Applying RBAC...${NC}"
# Apply RBAC
echo -e "${YELLOW}Applying RBAC...${NC}"
oc apply -f k8s/rbac.yaml
# Aplicar ConfigMap
echo -e "${YELLOW}⚙️ Applying ConfigMap...${NC}"
# Apply ConfigMap
echo -e "${YELLOW}Applying ConfigMap...${NC}"
oc apply -f k8s/configmap.yaml
# Atualizar imagem no DaemonSet
echo -e "${YELLOW}🔄 Updating image in DaemonSet...${NC}"
# Update image in DaemonSet
echo -e "${YELLOW}Updating image in DaemonSet...${NC}"
oc set image daemonset/resource-governance resource-governance="${FULL_IMAGE_NAME}" -n "${NAMESPACE}"
# Aplicar DaemonSet
echo -e "${YELLOW}📦 Applying DaemonSet...${NC}"
# Apply DaemonSet
echo -e "${YELLOW}Applying DaemonSet...${NC}"
oc apply -f k8s/daemonset.yaml
# Aplicar Service
echo -e "${YELLOW}🌐 Applying Service...${NC}"
# Apply Service
echo -e "${YELLOW}Applying Service...${NC}"
oc apply -f k8s/service.yaml
# Aplicar Route
echo -e "${YELLOW}🛣️ Applying Route...${NC}"
# Apply Route
echo -e "${YELLOW}Applying Route...${NC}"
oc apply -f k8s/route.yaml
# Aguardar pods ficarem prontos
echo -e "${YELLOW}Waiting for pods to be ready...${NC}"
# Wait for pods to be ready
echo -e "${YELLOW}Waiting for pods to be ready...${NC}"
oc wait --for=condition=ready pod -l app.kubernetes.io/name=resource-governance -n "${NAMESPACE}" --timeout=300s
# Obter URL da rota
# Get route URL
ROUTE_URL=$(oc get route resource-governance-route -n "${NAMESPACE}" -o jsonpath='{.spec.host}')
if [ -n "${ROUTE_URL}" ]; then
echo -e "${GREEN}🎉 Deploy completed successfully!${NC}"
echo -e "${BLUE}🌐 Application URL: https://${ROUTE_URL}${NC}"
echo -e "${GREEN}SUCCESS: Deploy completed successfully!${NC}"
echo -e "${BLUE}Application URL: https://${ROUTE_URL}${NC}"
else
echo -e "${YELLOW}⚠️ Deploy completed, but route URL not found.${NC}"
echo -e "${YELLOW}WARNING: Deploy completed, but route URL not found.${NC}"
echo -e "${BLUE}Check with: oc get routes -n ${NAMESPACE}${NC}"
fi
# Mostrar status
echo -e "${BLUE}📊 Deployment status:${NC}"
# Show status
echo -e "${BLUE}Deployment status:${NC}"
oc get all -n "${NAMESPACE}"
echo -e "${BLUE}🔍 To check logs:${NC}"
echo -e "${BLUE}To check logs:${NC}"
echo -e " oc logs -f daemonset/resource-governance -n ${NAMESPACE}"
echo -e "${BLUE}🧪 To test health:${NC}"
echo -e "${BLUE}To test health:${NC}"
echo -e " curl https://${ROUTE_URL}/health"

View File

@@ -1,46 +1,46 @@
#!/bin/bash
# Script para criar releases e tags do OpenShift Resource Governance
# Script to create releases and tags for OpenShift Resource Governance
set -e
# Cores para output
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Função para mostrar ajuda
# Function to show help
show_help() {
echo "🚀 OpenShift Resource Governance - Release Script"
echo "=================================================="
echo "OpenShift Resource Governance - Release Script"
echo "=============================================="
echo ""
echo "Uso: $0 [COMANDO] [VERSÃO]"
echo "Usage: $0 [COMMAND] [VERSION]"
echo ""
echo "Comandos:"
echo " patch Criar release patch (ex: 1.0.0 -> 1.0.1)"
echo " minor Criar release minor (ex: 1.0.0 -> 1.1.0)"
echo " major Criar release major (ex: 1.0.0 -> 2.0.0)"
echo " custom Criar release com versão customizada"
echo " list Listar releases existentes"
echo " help Mostrar esta ajuda"
echo "Commands:"
echo " patch Create patch release (ex: 1.0.0 -> 1.0.1)"
echo " minor Create minor release (ex: 1.0.0 -> 1.1.0)"
echo " major Create major release (ex: 1.0.0 -> 2.0.0)"
echo " custom Create release with custom version"
echo " list List existing releases"
echo " help Show this help"
echo ""
echo "Exemplos:"
echo "Examples:"
echo " $0 patch # 1.0.0 -> 1.0.1"
echo " $0 minor # 1.0.0 -> 1.1.0"
echo " $0 custom 2.0.0-beta.1 # Versão customizada"
echo " $0 list # Listar releases"
echo " $0 custom 2.0.0-beta.1 # Custom version"
echo " $0 list # List releases"
echo ""
}
# Função para obter a versão atual
# Function to get current version
get_current_version() {
local latest_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
echo "${latest_tag#v}" # Remove o 'v' do início
echo "${latest_tag#v}" # Remove 'v' prefix
}
# Função para incrementar versão
# Function to increment version
increment_version() {
local version=$1
local type=$2
@@ -66,78 +66,78 @@ increment_version() {
esac
}
# Função para validar versão
# Function to validate version
validate_version() {
local version=$1
if [[ ! $version =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.-]+)?$ ]]; then
echo -e "${RED}❌ Versão inválida: $version${NC}"
echo "Formato esperado: X.Y.Z ou X.Y.Z-suffix"
echo -e "${RED}ERROR: Invalid version: $version${NC}"
echo "Expected format: X.Y.Z or X.Y.Z-suffix"
exit 1
fi
}
# Função para criar release
# Function to create release
create_release() {
local version=$1
local tag="v$version"
echo -e "${BLUE}🚀 Criando release $tag${NC}"
echo -e "${BLUE}Creating release $tag${NC}"
echo ""
# Verificar se já existe
# Check if already exists
if git tag -l | grep -q "^$tag$"; then
echo -e "${RED} Tag $tag existe!${NC}"
echo -e "${RED}ERROR: Tag $tag already exists!${NC}"
exit 1
fi
# Verificar se há mudanças não commitadas
# Check for uncommitted changes
if ! git diff-index --quiet HEAD --; then
echo -e "${YELLOW}⚠️ Há mudanças não commitadas. Deseja continuar? (y/N)${NC}"
echo -e "${YELLOW}WARNING: There are uncommitted changes. Continue? (y/N)${NC}"
read -r response
if [[ ! "$response" =~ ^[Yy]$ ]]; then
echo "Cancelado."
echo "Cancelled."
exit 1
fi
fi
# Fazer commit das mudanças se houver
# Commit changes if any
if ! git diff-index --quiet HEAD --; then
echo -e "${BLUE}📝 Fazendo commit das mudanças...${NC}"
echo -e "${BLUE}Committing changes...${NC}"
git add .
git commit -m "Release $tag"
fi
# Criar tag
echo -e "${BLUE}🏷️ Criando tag $tag...${NC}"
# Create tag
echo -e "${BLUE}Creating tag $tag...${NC}"
git tag -a "$tag" -m "Release $tag"
# Push da tag
echo -e "${BLUE}📤 Fazendo push da tag...${NC}"
# Push tag
echo -e "${BLUE}Pushing tag...${NC}"
git push origin "$tag"
echo ""
echo -e "${GREEN} Release $tag criado com sucesso!${NC}"
echo -e "${GREEN}SUCCESS: Release $tag created successfully!${NC}"
echo ""
echo "🔗 Links úteis:"
echo "Useful links:"
echo " GitHub: https://github.com/andersonid/openshift-resource-governance/releases/tag/$tag"
echo " Docker Hub: https://hub.docker.com/r/andersonid/resource-governance/tags"
echo ""
echo "🚀 O GitHub Actions irá automaticamente:"
echo " 1. Buildar a imagem Docker"
echo " 2. Fazer push para Docker Hub"
echo " 3. Criar release no GitHub"
echo "GitHub Actions will automatically:"
echo " 1. Build Docker image"
echo " 2. Push to Docker Hub"
echo " 3. Create GitHub release"
echo ""
echo "⏳ Aguarde alguns minutos e verifique:"
echo "Wait a few minutes and check:"
echo " gh run list --repo andersonid/openshift-resource-governance --workflow='build-only.yml'"
}
# Função para listar releases
# Function to list releases
list_releases() {
echo -e "${BLUE}📋 Releases existentes:${NC}"
echo -e "${BLUE}Existing releases:${NC}"
echo ""
git tag -l --sort=-version:refname | head -10
echo ""
echo "💡 Para ver todos: git tag -l --sort=-version:refname"
echo "To see all: git tag -l --sort=-version:refname"
}
# Main
@@ -162,8 +162,8 @@ case "${1:-help}" in
;;
"custom")
if [ -z "$2" ]; then
echo -e "${RED}❌ Versão customizada não fornecida!${NC}"
echo "Uso: $0 custom 2.0.0-beta.1"
echo -e "${RED}ERROR: Custom version not provided!${NC}"
echo "Usage: $0 custom 2.0.0-beta.1"
exit 1
fi
validate_version "$2"

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python3
"""
Webhook para deploy automático após GitHub Actions
Este script pode ser executado como um serviço para detectar mudanças no Docker Hub
Webhook for automatic deployment after GitHub Actions
This script can be run as a service to detect changes on Docker Hub
"""
import os
@@ -11,13 +11,13 @@ import logging
from flask import Flask, request, jsonify
from datetime import datetime
# Configuração do logging
# Logging configuration
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = Flask(__name__)
# Configurações
# Configuration
IMAGE_NAME = os.getenv('IMAGE_NAME', 'resource-governance')
REGISTRY = os.getenv('REGISTRY', 'andersonid')
NAMESPACE = os.getenv('NAMESPACE', 'resource-governance')
@@ -25,100 +25,100 @@ SCRIPT_PATH = os.getenv('AUTO_DEPLOY_SCRIPT', './scripts/auto-deploy.sh')
@app.route('/webhook/dockerhub', methods=['POST'])
def dockerhub_webhook():
"""Webhook para receber notificações do Docker Hub"""
"""Webhook to receive Docker Hub notifications"""
try:
data = request.get_json()
# Verificar se é uma notificação de push
# Check if it's a push notification
if data.get('push_data', {}).get('tag') == 'latest':
logger.info(f"Recebida notificação de push para {REGISTRY}/{IMAGE_NAME}:latest")
logger.info(f"Received push notification for {REGISTRY}/{IMAGE_NAME}:latest")
# Executar deploy automático
# Execute automatic deployment
result = run_auto_deploy('latest')
return jsonify({
'status': 'success',
'message': 'Deploy automático iniciado',
'message': 'Automatic deployment started',
'result': result
}), 200
else:
logger.info(f"Push ignorado - tag: {data.get('push_data', {}).get('tag')}")
return jsonify({'status': 'ignored', 'message': 'Tag não é latest'}), 200
logger.info(f"Push ignored - tag: {data.get('push_data', {}).get('tag')}")
return jsonify({'status': 'ignored', 'message': 'Tag is not latest'}), 200
except Exception as e:
logger.error(f"Erro no webhook: {e}")
logger.error(f"Webhook error: {e}")
return jsonify({'status': 'error', 'message': str(e)}), 500
@app.route('/webhook/github', methods=['POST'])
def github_webhook():
"""Webhook para receber notificações do GitHub"""
"""Webhook to receive GitHub notifications"""
try:
# Verificar se é um push para main
# Check if it's a push to main
if request.headers.get('X-GitHub-Event') == 'push':
data = request.get_json()
if data.get('ref') == 'refs/heads/main':
logger.info("Recebida notificação de push para main branch")
logger.info("Received push notification for main branch")
# Executar deploy automático
# Execute automatic deployment
result = run_auto_deploy('latest')
return jsonify({
'status': 'success',
'message': 'Deploy automático iniciado',
'message': 'Automatic deployment started',
'result': result
}), 200
else:
logger.info(f"Push ignorado - branch: {data.get('ref')}")
return jsonify({'status': 'ignored', 'message': 'Branch não é main'}), 200
logger.info(f"Push ignored - branch: {data.get('ref')}")
return jsonify({'status': 'ignored', 'message': 'Branch is not main'}), 200
else:
logger.info(f"Evento ignorado: {request.headers.get('X-GitHub-Event')}")
return jsonify({'status': 'ignored', 'message': 'Evento não é push'}), 200
logger.info(f"Event ignored: {request.headers.get('X-GitHub-Event')}")
return jsonify({'status': 'ignored', 'message': 'Event is not push'}), 200
except Exception as e:
logger.error(f"Erro no webhook: {e}")
logger.error(f"Webhook error: {e}")
return jsonify({'status': 'error', 'message': str(e)}), 500
@app.route('/deploy/<tag>', methods=['POST'])
def manual_deploy(tag):
"""Deploy manual com tag específica"""
"""Manual deployment with specific tag"""
try:
logger.info(f"Deploy manual solicitado para tag: {tag}")
logger.info(f"Manual deployment requested for tag: {tag}")
result = run_auto_deploy(tag)
return jsonify({
'status': 'success',
'message': f'Deploy manual iniciado para tag: {tag}',
'message': f'Manual deployment started for tag: {tag}',
'result': result
}), 200
except Exception as e:
logger.error(f"Erro no deploy manual: {e}")
logger.error(f"Manual deployment error: {e}")
return jsonify({'status': 'error', 'message': str(e)}), 500
def run_auto_deploy(tag):
"""Executar script de deploy automático"""
"""Execute automatic deployment script"""
try:
logger.info(f"Executando deploy automático para tag: {tag}")
logger.info(f"Executing automatic deployment for tag: {tag}")
# Executar script de deploy
# Execute deployment script
result = subprocess.run(
[SCRIPT_PATH, tag],
capture_output=True,
text=True,
timeout=600 # 10 minutos timeout
timeout=600 # 10 minutes timeout
)
if result.returncode == 0:
logger.info("Deploy automático concluído com sucesso")
logger.info("Automatic deployment completed successfully")
return {
'success': True,
'stdout': result.stdout,
'stderr': result.stderr
}
else:
logger.error(f"Deploy automático falhou: {result.stderr}")
logger.error(f"Automatic deployment failed: {result.stderr}")
return {
'success': False,
'stdout': result.stdout,
@@ -126,13 +126,13 @@ def run_auto_deploy(tag):
}
except subprocess.TimeoutExpired:
logger.error("Deploy automático timeout")
logger.error("Automatic deployment timeout")
return {
'success': False,
'error': 'Timeout'
}
except Exception as e:
logger.error(f"Erro ao executar deploy automático: {e}")
logger.error(f"Error executing automatic deployment: {e}")
return {
'success': False,
'error': str(e)
@@ -150,9 +150,9 @@ def health():
@app.route('/status', methods=['GET'])
def status():
"""Status do serviço"""
"""Service status"""
try:
# Verificar se está logado no OpenShift
# Check if logged into OpenShift
result = subprocess.run(['oc', 'whoami'], capture_output=True, text=True)
return jsonify({
@@ -174,7 +174,7 @@ if __name__ == '__main__':
port = int(os.getenv('PORT', 8080))
debug = os.getenv('DEBUG', 'false').lower() == 'true'
logger.info(f"Iniciando webhook server na porta {port}")
logger.info(f"Configurações: IMAGE_NAME={IMAGE_NAME}, REGISTRY={REGISTRY}, NAMESPACE={NAMESPACE}")
logger.info(f"Starting webhook server on port {port}")
logger.info(f"Configuration: IMAGE_NAME={IMAGE_NAME}, REGISTRY={REGISTRY}, NAMESPACE={NAMESPACE}")
app.run(host='0.0.0.0', port=port, debug=debug)