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. 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 full-size slide

  2. 1. Github Actions

    View full-size slide

  3. 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 full-size slide

  4. 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 full-size slide

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

    View full-size slide

  6. 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 full-size slide

  7. 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 full-size slide

  8. 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

    View full-size slide

  9. 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 full-size slide

  10. 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 full-size slide

  11. 2. Introdução ao Minicli

    View full-size slide

  12. 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 full-size slide

  13. 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 full-size slide

  14. The Demo app

    View full-size slide

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

    View full-size slide

  16. 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 full-size slide

  17. 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 full-size slide

  18. 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 full-size slide

  19. 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 full-size slide

  20. 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 full-size slide

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

    View full-size slide

  22. Criando um Workflow: Steps
    - uses: actions/checkout@v2
    - 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/create-pull-request@v3
    with:
    commit-message: Import posts from DEV
    title: "[automated] Import posts from DEV"
    token: ${{ secrets.GITHUB_TOKEN }}

    View full-size slide

  23. Workflow completo para referência

    View full-size slide

  24. Testando o workflow

    View full-size slide

  25. 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 full-size slide

  26. Obrigada!
    @erikaheidi

    View full-size slide