Reusable workflows para Forgejo Actions across TMF projects
Find a file
Tarcisio Bannwart 0a7a918dd0
Some checks failed
generate-docs.yml / Merge pull request 'chore(ci): sync-docs-to-hub aceita secret TMF_HUB_TENANT_TOKEN [TH-59673]' (#6) from chore/TH-59673-tenant-token-secret into main (push) Failing after 0s
login-forgejo-registry.yml / Merge pull request 'chore(ci): sync-docs-to-hub aceita secret TMF_HUB_TENANT_TOKEN [TH-59673]' (#6) from chore/TH-59673-tenant-token-secret into main (push) Failing after 0s
sync-docs-to-hub.yml / Merge pull request 'chore(ci): sync-docs-to-hub aceita secret TMF_HUB_TENANT_TOKEN [TH-59673]' (#6) from chore/TH-59673-tenant-token-secret into main (push) Failing after 0s
Merge pull request 'chore(ci): sync-docs-to-hub aceita secret TMF_HUB_TENANT_TOKEN [TH-59673]' (#6) from chore/TH-59673-tenant-token-secret into main
Reviewed-on: #6
2026-08-18 10:31:37 -03:00
.forgejo/workflows Merge pull request 'chore(ci): sync-docs-to-hub aceita secret TMF_HUB_TENANT_TOKEN [TH-59673]' (#6) from chore/TH-59673-tenant-token-secret into main 2026-08-18 10:31:37 -03:00
README.md feat(ci): 4 reusable workflows — install-docker, install-aws-kubectl, login-registry, smoke-test [TH-54337] 2026-05-30 12:59:00 -03:00

TMF CI-Shared

Reusable Forgejo Actions workflows para reduzir duplicação de código CI/CD across 6 projetos.

Workflows Disponíveis

1. install-docker.yml

Instala Docker CLI e Docker Buildx para operações de build/push de imagens.

Uso:

jobs:
  setup:
    runs-on: docker
    steps:
      - uses: TMF/ci-shared/.forgejo/workflows/install-docker.yml@main
        with:
          buildx_version: "latest"  # ou "0.13.0"

Inputs:

  • buildx_version (opcional, default: "latest"): Versão do Docker Buildx

Resultado: Docker e Buildx instalados, buildx builder criado e pronto para uso.


2. install-aws-kubectl.yml

Instala AWS CLI v2 e kubectl para operações em EKS/AWS.

Uso:

jobs:
  deploy:
    runs-on: docker
    steps:
      - uses: TMF/ci-shared/.forgejo/workflows/install-aws-kubectl.yml@main
        with:
          aws_region: "sa-east-1"
          kubectl_version: "1.28"  # ou "latest"

Inputs:

  • aws_region (opcional, default: "sa-east-1"): Region AWS
  • kubectl_version (opcional, default: "latest"): Versão do kubectl

Resultado: AWS CLI v2 e kubectl instalados e configurados.


3. login-forgejo-registry.yml

Autentica no Forgejo container registry para push/pull de imagens.

Uso:

jobs:
  build:
    runs-on: docker
    steps:
      - uses: TMF/ci-shared/.forgejo/workflows/login-forgejo-registry.yml@main
        with:
          registry_url: "git.trademarketingforce.com"
          username: ${{ secrets.FORGEJO_USER }}
          password_secret_name: "FORGEJO_TOKEN"

      - name: Build and push image
        run: |
          docker build -t git.trademarketingforce.com/tmf/myapp:latest .
          docker push git.trademarketingforce.com/tmf/myapp:latest

Inputs:

  • registry_url (opcional, default: "git.trademarketingforce.com"): URL do registry
  • username (obrigatório): Username para login
  • password_secret_name (opcional, default: "FORGEJO_TOKEN"): Nome do secret com token/senha

Secrets necessários no repositório:

FORGEJO_USER    = seu username no Forgejo
FORGEJO_TOKEN   = seu API token ou senha

Resultado: Docker logado no registry Forgejo, pronto para push/pull.


4. smoke-test-health.yml

Executa health checks com retry automático em endpoints HTTP.

Uso:

jobs:
  verify-deploy:
    runs-on: docker
    steps:
      - uses: TMF/ci-shared/.forgejo/workflows/smoke-test-health.yml@main
        with:
          health_url: "https://api.example.com/health"
          max_attempts: 30
          timeout_seconds: 1
          expected_status: "200"
          delay_between_attempts_seconds: 2
        id: health
      
      - name: Check result
        run: |
          if [ "${{ steps.health.outputs.status }}" = "healthy" ]; then
            echo "✅ Service is ready"
          else
            echo "❌ Service failed health check"
            exit 1
          fi

Inputs:

  • health_url (obrigatório): URL do endpoint de health check
  • max_attempts (opcional, default: 30): Número máximo de tentativas
  • timeout_seconds (opcional, default: 1): Timeout por request (segundos)
  • expected_status (opcional, default: "200"): HTTP status code esperado
  • delay_between_attempts_seconds (opcional, default: 2): Delay entre tentativas (segundos)

Outputs:

  • status: "healthy" se passou, "unhealthy" se falhou

Resultado: Verifica que o endpoint responde com status esperado.


Exemplo: Arquivo CI/CD Completo

name: Build and Deploy

on:
  push:
    branches: [main]
  workflow_dispatch:

jobs:
  # Setup tools
  setup:
    runs-on: docker
    steps:
      - uses: actions/checkout@v4

      - uses: TMF/ci-shared/.forgejo/workflows/install-docker.yml@main

      - uses: TMF/ci-shared/.forgejo/workflows/install-aws-kubectl.yml@main
        with:
          aws_region: "sa-east-1"

      - uses: TMF/ci-shared/.forgejo/workflows/login-forgejo-registry.yml@main
        with:
          username: ${{ secrets.FORGEJO_USER }}

  # Build and push
  build:
    needs: [setup]
    runs-on: docker
    steps:
      - uses: actions/checkout@v4

      - uses: TMF/ci-shared/.forgejo/workflows/login-forgejo-registry.yml@main
        with:
          username: ${{ secrets.FORGEJO_USER }}

      - name: Build and push image
        run: |
          docker build -t git.trademarketingforce.com/tmf/myapp:latest .
          docker push git.trademarketingforce.com/tmf/myapp:latest

  # Verify deployment
  verify:
    needs: [build]
    runs-on: docker
    steps:
      - uses: TMF/ci-shared/.forgejo/workflows/smoke-test-health.yml@main
        with:
          health_url: "https://myapp.example.com/health"
          max_attempts: 30

Secrets no Repositório

Configure os seguintes secrets em Settings > Actions > Secrets:

FORGEJO_USER = seu_username
FORGEJO_TOKEN = seu_api_token
SSH_PRIVATE_KEY = sua_chave_ssh_privada
DEPLOY_HOST = seu_servidor_producao
DEPLOY_USER = usuario_ssh

Setup automático:

./scripts/ci-cd/setup-forgejo-secrets.sh

Manutenção

Cada workflow é autônomo e pode ser atualizado sem afetar outros. Commits que alteram workflows devem incluir testes em pelo menos 1 projeto consumidor antes de merge em main.

Testar workflow locally:

git clone https://git.trademarketingforce.com/TMF/ci-shared.git
cd ci-shared
# Editar workflow
git add .
git commit -m "Update workflow X"
git push origin main

# Em um projeto consumidor, atualizar a referência de branch:
# uses: TMF/ci-shared/.forgejo/workflows/xxx.yml@main  # antes
# uses: TMF/ci-shared/.forgejo/workflows/xxx.yml@seu-branch  # durante teste

Projetos Consumidores (6 projetos)

Projeto Prefixo URL
TMF9 TMF9 git.trademarketingforce.com/TMF/tmf9
TMF Management TH git.trademarketingforce.com/tarcisio/tmf-management
DANI DAI git.trademarketingforce.com/tarcisio/dani
Fina FINA git.trademarketingforce.com/tarcisio/fina
HelpCor HCOR git.trademarketingforce.com/tarcisio/helpcor-admin
HelpCor Backend CE git.trademarketingforce.com/tarcisio/helpcor-backend

Histórico

  • TH-54337: Criação inicial (4 workflows)
  • TH-54330: Story parent (padronizar CI/CD em 6 projetos)

Licença

Trade Marketing Force © 2026