claromes.com

[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 }}

Workflow dispatch

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:

youtube.com
stackoverflow.com


Claromes


Comments? Ping me on Mastodon, Bluesky or Matrix
Tags: CICD · github · português brasileiro · open source
Share: Mastodon · Bluesky · Órbita · Hacker News · Email