diff --git a/generate_release.bat b/generate_release.bat index ffa79a1..707e63a 100644 --- a/generate_release.bat +++ b/generate_release.bat @@ -3,19 +3,28 @@ setlocal enabledelayedexpansion git fetch --all --tags -:: Função para encontrar a branch principal automaticamente (main ou master) +:: Detectar branch principal (main ou master) set "main_branch=" -call :get_main_branch +for /f "delims=" %%i in ('git symbolic-ref refs/remotes/origin/HEAD 2^>nul') do ( + set "main_branch=%%i" +) +set "main_branch=%main_branch:refs/remotes/origin/=%" + if "%main_branch%"=="" ( - echo Erro: Nao foi possivel detectar a branch principal. Certifique-se de que voce esta no diretorio correto do repositorio Git. + echo [Erro] Nao foi possivel detectar a branch principal. Certifique-se de que voce esta no diretorio correto do repositorio Git. exit /b 1 ) echo Branch principal detectada: %main_branch% -:: Função para obter a última tag e sugerir a próxima versão +:: Obter a ultima tag valida set "last_tag=" -call :get_last_tag +for /f "delims=" %%i in ('git tag --sort=-v:refname 2^>nul') do ( + set "last_tag=%%i" + goto :found_tag +) + +:found_tag if "%last_tag%"=="" ( echo Nenhuma tag encontrada. Sugerindo v1.0.0 como primeira tag. set "next_version=v1.0.0" @@ -26,50 +35,33 @@ if "%last_tag%"=="" ( ) ) -echo Ultima versao: %last_tag% +echo Ultima versao encontrada: %last_tag% +echo Proxima versao sugerida: %next_version% -:: Solicita ao usuário a versão ou usa a sugestão +:: Solicitar ao usuario a versao ou usar sugestao set /p "tag_version=Digite a versao da tag (%next_version%): " if "%tag_version%"=="" set "tag_version=%next_version%" -echo Criando tag %tag_version% na branch '%main_branch%' e enviando para o GitHub... +:: Confirmar ou cancelar operacao +choice /c SN /n /m "Continuar com a criacao da tag '%tag_version%'? (S = Sim, N = Nao): " +if %errorlevel%==2 ( + echo Operacao cancelada pelo usuario. + exit /b 1 +) -:: Cria a tag +:: Criar e enviar tag +echo Criando tag '%tag_version%' na branch '%main_branch%'... git tag "%tag_version%" "%main_branch%" if errorlevel 1 ( - echo Erro: Falha ao criar a tag %tag_version%. Verifique se a tag ja existe ou se voce tem permissoes adequadas. + echo [Erro] Falha ao criar a tag '%tag_version%'. Verifique se a tag ja existe ou se voce tem permissoes adequadas. exit /b 1 ) -:: Envia a tag para o repositório git push origin "%tag_version%" if errorlevel 1 ( - echo Erro: Falha ao enviar a tag %tag_version% para o GitHub. Verifique sua conexao e permissoes. + echo [Erro] Falha ao enviar a tag '%tag_version%' para o GitHub. Verifique sua conexao ou permissoes. exit /b 1 ) -echo Tag %tag_version% criada e enviada com sucesso a partir da branch '%main_branch%'! -goto :eof - -:get_main_branch -:: Obtém a branch principal (main ou master) -for /f "delims=" %%i in ('git symbolic-ref refs/remotes/origin/HEAD ^| findstr /r /v "^$" 2^>nul') do ( - set "main_branch=%%i" -) -set "main_branch=%main_branch:refs/remotes/origin/=%" -exit /b - -:get_last_tag -:: Obtém a última tag criada no repositório -for /f "delims=" %%i in ('git describe --tags --abbrev=0 2^>nul') do ( - set "last_tag=%%i" -) - -:: Verificação alternativa caso a última tag não seja encontrada -if "%last_tag%"=="" ( - for /f "delims=" %%j in ('git tag --sort=-v:refname ^| findstr /r /v "^$" 2^>nul') do ( - set "last_tag=%%j" - goto :eof - ) -) +echo Tag '%tag_version%' criada e enviada com sucesso a partir da branch '%main_branch%'! exit /b diff --git a/generate_release.sh b/generate_release.sh index 9e811a1..57d9fe3 100644 --- a/generate_release.sh +++ b/generate_release.sh @@ -1,58 +1,69 @@ #!/bin/bash +# Atualizar o repositório local git fetch --all --tags # Função para encontrar a branch principal automaticamente (main ou master) get_main_branch() { + local main_branch main_branch=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@') - # Verifica se a branch principal foi detectada if [[ -z "$main_branch" ]]; then - echo "Erro: Nao foi possivel detectar a branch principal. Certifique-se de que voce esta no diretorio correto do repositorio Git." + echo "Erro: Não foi possível detectar a branch principal. Certifique-se de que você está no diretório correto do repositório Git." exit 1 fi - echo "$main_branch" } # Função para obter a última tag e sugerir a próxima versão suggest_next_version() { + local last_tag="$1" if [[ -z "$last_tag" ]]; then - next_version="v1.0.0" + echo "v1.0.0" else - # Extrai a versão e sugere a próxima, incrementando o último dígito IFS='.' read -r major minor patch <<< "${last_tag//v/}" - next_version="v$major.$minor.$((patch + 1))" + echo "v$major.$minor.$((patch + 1))" fi - echo "$next_version" } -# Obtém a branch principal + +# Detectar branch principal main_branch=$(get_main_branch) echo "Branch principal detectada: $main_branch" -# Sugere a próxima versão com base na última tag -last_tag=$(git describe --tags $(git rev-list --tags --max-count=1) 2>/dev/null) -next_version=$(suggest_next_version) -echo "Ultima versao: ${last_tag:-Nenhuma}" +# Obter a última tag e calcular a próxima versão +last_tag=$(git tag --sort=-v:refname | head -n 1) +if [[ -z "$last_tag" ]]; then + echo "Nenhuma tag encontrada. Sugerindo v1.0.0 como primeira tag." +fi +next_version=$(suggest_next_version "$last_tag") + +echo "Última versão: ${last_tag:-Nenhuma}" +echo "Próxima versão sugerida: $next_version" -# Solicita ao usuário a versão ou usa a sugestão -read -p "Digite a versao da tag ($next_version): " tag_version +# Solicitar ao usuário a versão ou usar a sugestão +read -p "Digite a versão da tag ($next_version): " tag_version tag_version=${tag_version:-$next_version} -# Confirmação da criação da tag e envio -echo "Criando tag $tag_version na branch '$main_branch' e enviando para o GitHub..." +# Confirmação para continuar ou cancelar +read -p "Deseja continuar criando a tag $tag_version? (S/N): " confirmacao +case $confirmacao in + [Ss]* ) echo "Continuando com a operação...";; + [Nn]* ) echo "Operação cancelada pelo usuário."; exit 0;; + * ) echo "Resposta inválida. Operação cancelada."; exit 1;; +esac -# Cria a tag +# Criar e enviar tag +echo "Criando tag $tag_version na branch '$main_branch'..." git tag "$tag_version" "$main_branch" if [[ $? -ne 0 ]]; then - echo "Erro: Falha ao criar a tag $tag_version. Verifique se a tag ja existe ou se você tem permissoes adequadas." + echo "Erro: Falha ao criar a tag $tag_version. Verifique se a tag já existe ou se você tem permissões adequadas." exit 1 fi -# Envia a tag para o repositório +echo "Enviando a tag $tag_version para o GitHub..." git push origin "$tag_version" if [[ $? -ne 0 ]]; then - echo "Erro: Falha ao enviar a tag $tag_version para o GitHub. Verifique sua conexão e permissoes." + echo "Erro: Falha ao enviar a tag $tag_version para o GitHub. Verifique sua conexão e permissões." exit 1 fi