$30 off During Our Annual Pro Sale. View Details »

Criando GitHub Actions em PHP com Minicli

Erika Heidi
September 23, 2022

Criando GitHub Actions em PHP com Minicli

Palestra apresentada em 23/09/2022 na Codecon (codecon.dev)

Erika Heidi

September 23, 2022
Tweet

More Decks by Erika Heidi

Other Decks in Technology

Transcript

  1. None
  2. O que esperar desta apresentação • Visão geral sobre GitHub

    Actions • Introdução ao Minicli • Visão geral da aplicação demo • Transformando a aplicação demo em uma GitHub Action • Espaço para perguntas
  3. 1. Github Actions

  4. GitHub Actions: Visão Geral • Recurso oferecido pelo GitHub que

    permite a criação de pipelines automatizadas (workflows) • Podem ser engatilhadas por eventos, mas que também podem rodar em agendamento • Popular para CI/CD • Repositórios open source têm acesso gratuito ao recurso • O GitHub Marketplace oferece uma vasta coleção de Actions prontas para uso
  5. GitHub Actions: Visão Geral • Casos de uso comuns: rodar

    testes ao fazer merge / PR etc • Caso de uso menos comum: scripts / containers rodando em agendamento
  6. GitHub Actions: Ecossistema • Actions • Workflows • Triggers •

    Action Secrets
  7. Actions • Unidades de execução que podem ser combinadas em

    um workflow • Ficam em um repositório dedicado com um arquivo action.yml que as define • Podemos combinar Actions do Marketplace com as nossas próprias Actions customizadas • Precisam ser "empacotadas" em uma imagem OCI (Docker)
  8. Workflows • Definido em um arquivo YAML, um repositório pode

    ter vários • Um processo configurável que pode executar um ou mais "jobs" • Cada job pode ter múltiplos "steps" • Cada step pode executar uma Action ou um shell script • Steps são executados em ordem e compartilham dados entre si • Jobs rodam em paralelo por padrão
  9. Exemplo de Workflow: PHP Composer name: PHP Composer on: push:

    branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: composer install --prefer-dist --no-progress - name: Run test suite run: composer test
  10. Triggers (Gatilhos) • A execução de um workflow pode ser

    engatilhada por eventos (mais comum para CI/CD) • Também é possível executar workflows em agendamento • Ao rodar em agendamento, o intervalo de execução mínimo é de 5 minutos
  11. Action Secrets • Variáveis de ambiente encriptadas que só podem

    ser acessadas por GitHub Actions • Podem ser configuradas por repositório ou por "environments" • Ideais para guardar chaves de API e outros dados sigilosos
  12. 2. Introdução ao Minicli

  13. Minicli: Visão Geral • Microframework para aplicações PHP em linha

    de comando • Arquitetura simplificada • Comandos podem ser definidos como callback ou controllers • Zero dependências (exceto DEV) • Ideal para pequenos bots, workers, scripts que rodam em cron
  14. Criando uma nova App $ composer create-project minicli/application myApp $

    composer require minicli/minicli Aplicação estruturada com comandos e subcomandos: Aplicação mínima, ou para incluir em projeto existente:
  15. None
  16. The Demo app

  17. 3. Transformando uma app Minicli em uma GitHub Action

  18. Preparação 1. Qual será o gatilho desta Action? 2. Preciso

    combinar essa Action com outras? 3. Vou precisar de Action Secrets ou variáveis de ambiente para configurar minha Action? 4. Se minha Action gera output de algum conteúdo, para onde vai?
  19. Criando um Dockerfile para a aplicação Minicli FROM php:8.1-cli RUN

    apt-get update && apt-get install -y git curl libxml2-dev zip unzip RUN apt-get clean && rm -rf /var/lib/apt/lists/* COPY --from=composer:latest /usr/bin/composer /usr/bin/composer RUN mkdir /application COPY . /application/ RUN cd /application && composer install ENTRYPOINT [ "php", "/application/minicli" ] CMD ["import", "dev"]
  20. O arquivo action.yml name: 'Import DEV.to posts' description: 'Imports posts

    from DEV.to as markdown files' outputs: response: description: 'Output from command' runs: using: 'docker' image: 'Dockerfile'
  21. Criando uma tag para sua Action git add . git

    commit -m "My first action is ready" git tag -a -m "My first action release" v1 git push --follow-tags
  22. Estrutura do Repositório . ├── app/ │ └── Command/ │

    ├── Help/ │ └── Import/ ├── data/ ├── action.yml ├── composer.json ├── composer.lock ├── config.php ├── Dockerfile ├── LICENSE ├── minicli ├── phpunit.xml └── README.md https://github.com/erikaheidi/importDevTo
  23. Criando um Workflow name: Import posts from DEV on: schedule:

    - cron: "0 1 * * *" workflow_dispatch : jobs: main: runs-on: ubuntu-latest steps: (...)
  24. Criando um Workflow: Steps - uses: actions/checkout@v2 - uses: erikaheidi/importDevTo@v1.2

    name: "Import posts from DEV" env: DEVTO_USERNAME: erikaheidi APP_DATA_DIR: ${{ github.workspace }}/devto - name: Create a PR uses: peter-evans/create-pull-request@v3 with: commit-message: Import posts from DEV title: "[automated] Import posts from DEV" token: ${{ secrets.GITHUB_TOKEN }}
  25. Workflow completo para referência

  26. Testando o workflow

  27. None
  28. Referências / Links Úteis • Video Playlist (pt-BR): Criando uma

    GitHub Action em PHP com Minicli • Demo: ImportDevTo Action • Tutorial (Eng): How to Create a GitHub Action to Import Posts from DEV to a Repository you Own • GitHub Actions docs: https://docs.github.com/en/actions • Minicli docs: https://docs.minicli.dev • Outras Actions criadas com Minicli ◦ Dynacover: https://github.com/erikaheidi/dynacover-actions ◦ Update CONTRIBUTORS: https://github.com/minicli/action-contributors
  29. Obrigada! @erikaheidi