Update Cronicle Version #118
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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 }} |