Translate all Portuguese text to English
This commit is contained in:
@@ -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} já 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}"
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 já 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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user