Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

1. Github Actions

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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)

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

2. Introdução ao Minicli

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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:

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

The Demo app

Slide 17

Slide 17 text

3. Transformando uma app Minicli em uma GitHub Action

Slide 18

Slide 18 text

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?

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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'

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Workflow completo para referência

Slide 26

Slide 26 text

Testando o workflow

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Obrigada! @erikaheidi