[PR #59] Push automático e variáveis com GitHub Actions
E um pouquinho de sed
Edited August 03, 2023
Vim do futuro dizer que esse PR não deu muito certo. Tivemos problemas com o build e não perdemos muito tempo em saber os detalhes do erro. Eu acredito que foi a falta de um comando
git pull
, mas optamos por excluir as Actions e usar um template de Pull Request para lembrar aos contribuidores de alterar a versão do plugin. Vou manter o post apenas como uma referência.
Recentemente fiz um pull request no Órbita para facilitar a vida do mantenedor, Gabriel Nunes: atualizar a versão do plugin sem a necessidade de abrir um novo PR ou solicitar alteração de código na revisão de PRs criados por mim ou pelo Ghedin.
Basicamente eu criei um workflow que usa uma Action para fazer push no repositório e fiz as alterações no código com sed. Além disso usei uma feature do GitHub que permite inputs antes de rodar o workflow.
É simples:
Configuração para disparar o workflow com input
on:
workflow_dispatch:
inputs:
version: #NOME_DO_INPUT
description: "Add new version"
required: true #força o workflow a rodar somente com input
Primero job: sed + git
- deletar e excluir linhas com sed
version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Update
working-directory: ./
run: |
#deleta a linha 14 no arquivo desejado
sed -i "14d" <FILENAME>
#cria a linha 14 com o valor do input
sed -i "14i \ <NOVO_TEXTO> ${{ github.event.inputs.NOME_DO_INPUT }}" <FILENAME>
- configurações básicas do git para a Action que faz o push
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
- commit das alterações (com ou sem o input)
git add .
git commit -m "<COMMIT_MSG> ${{ github.event.inputs.NOME_DO_INPUT }}"
Segundo job: push
- name: Push
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
E é isso.
Workflow do Órbita para atualizar a versão do plugin
name: Update version
on:
workflow_dispatch:
inputs:
version:
description: "Add new version"
required: true
jobs:
version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Update version
working-directory: ./
run: |
sed -i "14d" orbita.php
sed -i "14i \ * Version: ${{ github.event.inputs.version }}" orbita.php
sed -i "43d" orbita.php
sed -i "43i define( 'ORBITA_VERSION', '${{ github.event.inputs.version }}' );" orbita.php
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add .
git commit -m "Atualiza para a versão ${{ github.event.inputs.version }}"
- name: Push
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
Nota: o PR tem muitos commits porque tivemos problemas com outro workflow que rodava automaticamente. Como eu não sou owner do repositório as verificações falhavam e o merge não era possível. A solução do Gabriel foi criar uma cópia do workflow que não faz push na branch que faz o PR, e alterar o workflow original para somente fazer push na main. Foi uma manhã inteira só pra resolver isso.
Referências que usei durante o desenvolvimento: