Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. View Slide

  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

    View Slide

  3. 1. Github Actions

    View Slide

  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

    View Slide

  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

    View Slide

  6. GitHub Actions: Ecossistema
    ● Actions
    ● Workflows
    ● Triggers
    ● Action Secrets

    View Slide

  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)

    View Slide

  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

    View Slide

  9. Exemplo de Workflow: PHP Composer
    name: PHP Composer
    on:
    push:
    branches: [ main ]
    jobs:
    build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/[email protected]
    - name: Install dependencies
    run: composer install --prefer-dist --no-progress
    - name: Run test suite
    run: composer test

    View Slide

  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

    View Slide

  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

    View Slide

  12. 2. Introdução ao Minicli

    View Slide

  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

    View Slide

  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:

    View Slide

  15. View Slide

  16. The Demo app

    View Slide

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

    View Slide

  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?

    View Slide

  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"]

    View Slide

  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'

    View Slide

  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

    View Slide

  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

    View Slide

  23. Criando um Workflow
    name: Import posts from DEV
    on:
    schedule:
    - cron: "0 1 * * *"
    workflow_dispatch
    :
    jobs:
    main:
    runs-on: ubuntu-latest
    steps:
    (...)

    View Slide

  24. Criando um Workflow: Steps
    - uses: actions/[email protected]
    - uses: erikaheidi/[email protected]
    name: "Import posts from DEV"
    env:
    DEVTO_USERNAME: erikaheidi
    APP_DATA_DIR: ${{ github.workspace }}/devto
    - name: Create a PR
    uses: peter-evans/[email protected]
    with:
    commit-message: Import posts from DEV
    title: "[automated] Import posts from DEV"
    token: ${{ secrets.GITHUB_TOKEN }}

    View Slide

  25. Workflow completo para referência

    View Slide

  26. Testando o workflow

    View Slide

  27. View Slide

  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

    View Slide

  29. Obrigada!
    @erikaheidi

    View Slide