Pular para o conteúdo principal

Estrutura de Diretórios e Arquivos

Introdução

Criar seu primeiro workflow requer compreender a estrutura organizacional que o GitHub Actions utiliza. A organização correta de diretórios e arquivos é fundamental para que o sistema reconheça e execute seus workflows automaticamente.

Definição

A estrutura de diretórios do GitHub Actions segue um padrão específico onde workflows são armazenados no diretório .github/workflows/ na raiz do repositório. Cada arquivo YAML neste diretório representa um workflow independente que pode ser executado baseado em eventos configurados.

Explicação Técnica

1. Diretório .github/workflows

O diretório .github/workflows/ é o local obrigatório onde o GitHub procura por arquivos de workflow. Esta estrutura deve estar presente na raiz do repositório:

repositorio/
├── .github/
│ └── workflows/
│ ├── ci.yml
│ ├── deploy.yml
│ └── release.yml
├── src/
├── tests/
└── README.md

O GitHub Actions automaticamente detecta qualquer arquivo .yml ou .yaml neste diretório e o trata como um workflow. Não há necessidade de configuração adicional ou registro manual.

2. Convenções de Nomenclatura

Extensões aceitas: .yml e .yaml são ambas válidas, mas .yml é mais comum por ser mais concisa.

Nomes descritivos facilitam identificação:

ci.yml                    # Continuous Integration
deploy-production.yml # Deploy para produção
test-coverage.yml # Cobertura de testes
security-scan.yml # Análise de segurança
release-automation.yml # Automação de releases

Boas práticas de nomenclatura:

  • Use kebab-case (palavras separadas por hífen)
  • Seja específico sobre o propósito
  • Evite espaços e caracteres especiais
  • Prefixe por ambiente quando necessário (dev-, prod-)

3. Sintaxe YAML Básica para Workflows

Estrutura Fundamental

name: CI Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'

- name: Run tests
run: ./mvnw test

Elementos Obrigatórios

name (opcional mas recomendado): Nome exibido na interface

name: "Spring Boot CI/CD"

on (obrigatório): Define quando o workflow executa

on:
push: # Em push
pull_request: # Em pull request
schedule: # Agendado
- cron: '0 2 * * 1' # Segunda-feira às 2h
workflow_dispatch: # Manual

jobs (obrigatório): Define os trabalhos a executar

jobs:
test:
name: 'Unit Tests'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm test

build:
name: 'Build Application'
needs: test # Executa após 'test'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm run build

Sintaxe YAML Essencial

Indentação: Use 2 espaços (nunca tabs)

jobs:          # Nível 0
build: # Nível 1 (2 espaços)
runs-on: # Nível 2 (4 espaços)

Listas: Use hífen seguido de espaço

branches: [ main, develop ]
# ou
branches:
- main
- develop

Strings: Aspas opcionais, mas recomendadas para valores com espaços

name: "My Workflow"
run: echo "Hello World"

Multiline: Use | para preservar quebras de linha

run: |
echo "Linha 1"
echo "Linha 2"
./script.sh

Variáveis e Contextos

env:
NODE_VERSION: '18'

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Use environment variable
run: echo "Node version: ${{ env.NODE_VERSION }}"

- name: Access GitHub context
run: |
echo "Repository: ${{ github.repository }}"
echo "Actor: ${{ github.actor }}"
echo "SHA: ${{ github.sha }}"

Output Esperado

Ao criar este workflow você verá:

  • Detecção automática pelo GitHub na aba Actions
  • Execução em push/PR conforme configurado
  • Logs estruturados mostrando cada step
  • Cache de dependências para builds mais rápidos
  • Relatórios de teste integrados à interface

Conclusão

A estrutura de diretórios do GitHub Actions é simples mas poderosa. O diretório .github/workflows/ centraliza toda automação, while convenções de nomenclatura clara facilitam manutenção. Dominar a sintaxe YAML básica permite criar workflows robustos que automatizam eficientemente seu pipeline de desenvolvimento.