Skip to content

Update Cronicle Version #118

Update Cronicle Version

Update Cronicle Version #118

# Nome do Workflow
name: Update Cronicle Version
# Gatilhos que iniciam o workflow
on:
schedule:
# Executa a verificação a cada 24 horas
- cron: "0 */24 * * *"
# Permite a execução manual a partir da interface do GitHub
workflow_dispatch:
jobs:
# Job 1: Apenas verifica se existe uma nova versão
check-for-updates:
runs-on: ubuntu-latest
outputs:
needs_update: ${{ steps.version_check.outputs.needs_update }}
new_version: ${{ steps.version_check.outputs.new_version }}
steps:
# Faz o checkout para poder ler o Dockerfile
- name: Checkout repository
uses: actions/checkout@v4
# Busca a última versão e a versão atual
- name: Get latest and current versions
id: version_check
run: |
# Busca a última versão do Cronicle
LATEST_TAG=$(curl -s https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | jq -r '.tag_name')
VERSION_NUMBER=$(echo "$LATEST_TAG" | sed 's/^v//')
echo "Última versão encontrada no GitHub: $VERSION_NUMBER"
# Extrai a versão atual do Dockerfile. O '|| echo ""' evita que o grep falhe se a linha não existir.
CURRENT_VERSION=$(grep 'ENV CRONICLE_VERSION' ./docker/Dockerfile | cut -d'=' -f2 || echo "")
echo "Versão atual no Dockerfile: $CURRENT_VERSION"
# Compara as versões e define a saída para o próximo job
if [ "$CURRENT_VERSION" == "$VERSION_NUMBER" ]; then
echo "A versão do Cronicle já está atualizada. Nenhuma ação é necessária."
echo "needs_update=false" >> $GITHUB_OUTPUT
else
echo "Nova versão ($VERSION_NUMBER) encontrada. O workflow de atualização continuará."
echo "needs_update=true" >> $GITHUB_OUTPUT
echo "new_version=$VERSION_NUMBER" >> $GITHUB_OUTPUT
fi
# Job 2: Executa a atualização, somente se o Job 1 indicar que é necessário
update-version:
# Este job depende do sucesso do job de verificação
needs: check-for-updates
# Condição para executar: somente se a saída 'needs_update' do job anterior for 'true'
if: needs.check-for-updates.outputs.needs_update == 'true'
runs-on: ubuntu-latest
steps:
# 1. Faz o checkout do código do repositório
- name: Checkout repository
uses: actions/checkout@v4
with:
# O token é necessário para poder fazer push das alterações
token: ${{ secrets.PAT_TOKEN }}
# 2. Atualiza o Dockerfile com a nova versão
- name: Update Dockerfile version
run: |
# Usa a versão passada como output pelo job 'check-for-updates'
sed -i "s/^ENV CRONICLE_VERSION=.*/ENV CRONICLE_VERSION=${{ needs.check-for-updates.outputs.new_version }}/" ./docker/Dockerfile
echo "Dockerfile atualizado para a versão ${{ needs.check-for-updates.outputs.new_version }}"
# 3. Configura o Git, faz o commit e envia as alterações
- name: Commit and Push changes
run: |
# Configura o usuário do Git para o bot do GitHub Actions
git config user.email "github-actions[bot]@users.noreply.github.com"
git config user.name "github-actions[bot]"
# Adiciona o arquivo modificado e cria o commit
git add ./docker/Dockerfile
git commit -m "chore: Update Cronicle to v${{ needs.check-for-updates.outputs.new_version }}"
# Faz o push para o branch principal
git push origin HEAD:main
# 4. Cria uma nova Tag e um Release no GitHub
- name: Create GitHub Tag and Release
uses: softprops/action-gh-release@v2
with:
tag_name: "v${{ needs.check-for-updates.outputs.new_version }}"
name: "Cronicle v${{ needs.check-for-updates.outputs.new_version }}"
body: "Atualização automática para a versão do Cronicle ${{ needs.check-for-updates.outputs.new_version }}."
env:
# O token do GitHub é necessário para criar o release
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}