Action que cria tag automáticamente

🎯 O que faz?

Esta action cria automaticamente uma tag baseada na versão do pubspec.yaml sempre que algo é mergeado na branch main.

⚙️ Fluxo da Action:

  1. Trigger: Executa quando há push na branch main

  2. Extrai versão do pubspec.yaml (ex: version: 1.2.3)

  3. Verifica se tag já existe - se sim, para por aqui

  4. Se não existe: Cria tag v1.2.3

  5. Faz push da tag para o repositório


🔄 Conexão com GitFlow

📚 Lembra do GitFlow?

No GitFlow, toda vez que algo vai para Master/Main, precisa ter uma tag de versão. Isso é obrigatório para:

  • Marcar releases oficiais

  • Ter histórico de versões

  • Permitir rollback para versões específicas

  • Rastrear o que mudou entre versões

🤖 Automatização Inteligente:

GitFlow Manual: GitFlow Automatizado:

1. Merge para main 1. Merge para main

2. [DEV ESQUECE] Criar tag 2. ✅ Action cria tag automaticamente

3. [DEV ESQUECE] Push da tag 3. ✅ Action faz push da tag

Problema resolvido: Devs sempre esquecem de criar tags!


🎯 Fluxo Completo das 2 Actions:

flowchart TD

A[Dev abre PR] --> B[Action 1: Check Pubspec Version]

B --> C{Versão já existe?}

C -->|Sim| D[❌ Bloqueia PR]

C -->|Não| E[✅ Permite continuar]

E --> F[Dev faz merge para main]

F --> G[Action 2: Create Release Tag]

G --> H[✅ Cria tag automaticamente]

🔒 Sistema de Proteção:

  1. Antes do merge: Action verifica se versão é única

  2. Depois do merge: Action cria tag automaticamente

  3. Resultado: Sempre tem tag, nunca duplicada!


💡 Por que esse fluxo é importante?

✅ Benefícios:

  • Zero intervenção manual - tags criadas automaticamente

  • Zero versões duplicadas - primeira action previne

  • 100% compatível com GitFlow - toda main tem tag

  • Histórico limpo - fácil navegar entre versões

  • Deploys confiáveis - sempre sabemos qual versão está onde

🚀 Cenário Real:

v1.0.0 → Lançamento inicial

v1.0.1 → Hotfix de bug crítico

v1.1.0 → Nova feature de pagamento

v1.1.1 → Correção no pagamento

v2.0.0 → Refatoração completa

Cada tag = um ponto na história que você pode voltar ou deployar.


📋 Resumo Final:

Action 1 (Check): "Ei, essa versão já existe? Se sim, muda ela!" Action 2 (Create): "Beleza, merged! Vou criar a tag pra você."

Resultado: GitFlow automatizado - toda main tem tag única, sem esforço manual! 🎯

Agora a action de "Check Pubspec Version" faz muito mais sentido, né? Ela é a guardiã que garante que a action de criação sempre funcione perfeitamente!

A ACTION ABAIXO:

name: Create Release Tag

on:
  push:
    branches:
      - main

jobs:
  create-release-tag:
    permissions: write-all
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Setup Git
        run: |
          git config --global user.name 'github-actions[bot]'
          git config --global user.email 'github-actions[bot]@users.noreply.github.com'

      - name: Extract version from pubspec.yaml
        id: extract_version
        run: |
          VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //')
          echo "VERSION=$VERSION" >> $GITHUB_ENV

      - name: Check if tag exists
        id: check_tag
        run: |
          if git rev-parse "v${{ env.VERSION }}" >/dev/null 2>&1; then
            echo "Tag v${{ env.VERSION }} already exists"
            exit 0
          fi

      - name: Create new tag
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          git tag -a "v${{ env.VERSION }}" -m "Release version ${{ env.VERSION }}"
          git push https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} "v${{ env.VERSION }}"

Last updated