Com o GitHub Actions, podemos executar fluxos de trabalho personalizados diretamente em nosso repositório. Podemos descobrir, criar e compartilhar ações para automação eficiente, CI/CD e muito mais.
Vamos automatizar o fluxo de trabalho de um projeto já bem conhecido em nossos artigos, product-api.
Product API
Easily start application with docker.
docker compose up
About Laravel
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
- Simple, fast routing engine.
- Powerful dependency injection container.
- Multiple back-ends for session and cache storage.
- Expressive, intuitive database ORM.
- Database agnostic schema migrations.
- Robust background job processing.
- Real-time event broadcasting.
Laravel is accessible, powerful, and provides tools required for large, robust applications.
Learning Laravel
Laravel has the most extensive and thorough documentation and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
You may also try the Laravel Bootcamp, where you will be guided through building a modern Laravel…
Vou criar duas ações que serão executadas após pull requests. A primeira realiza testes para evitar quebras de recursos, enquanto a segunda executa lint para garantir qualidade no código.
Vamos para a tab Actions em nosso repositório.
Observe que ele me sugere alguns workflows. Vamos configurar o Laravel.
name: Laravel
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
laravel-tests:
runs-on: ubuntu-latest
steps:
- uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e
with:
php-version: '8.0'
- uses: actions/checkout@v3
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Create Database
run: |
mkdir -p database
touch database/database.sqlite
- name: Execute tests (Unit and Feature tests) via PHPUnit
env:
DB_CONNECTION: sqlite
DB_DATABASE: database/database.sqlite
run: vendor/bin/phpunit
Vamos ajustar o fluxo de trabalho para acionar em qualquer pull request, atualizar a versão do PHP para 8.1 e remover a criação do banco de dados e variáveis de ambiente, pois nosso projeto está configurado para usar banco de dados em memória durante os testes.
name: Laravel
on:
push:
branches: [ "master" ]
pull_request:
jobs:
laravel-tests:
runs-on: ubuntu-latest
steps:
- uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e
with:
php-version: '8.1'
- uses: actions/checkout@v3
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Execute tests (Unit and Feature tests) via PHPUnit
run: vendor/bin/phpunit
Agora, criaremos nosso segundo workflow responsavel por executar lint no código. Em 'Actions', clique em 'Skip this and set up a workflow yourself'. Ao pesquisar 'lint' no marketplace, encontraremos o action que precisamos. Entretanto, o .yml sugerido está incompleto, então escreveremos o nosso.
Vamos aplicar a mesma configuração para pushes e pull requests utilizado no laravel.yml. Em seguida, modificaremos os steps para utilizar a ação aglipanci/laravel-pint-action.
name: PHP Linting
on:
push:
branches: ["master"]
pull_request:
jobs:
phplint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: "laravel-pint"
uses: aglipanci/laravel-pint-action@2.0.0
with:
preset: laravel
verboseMode: true
testMode: true
pintVersion: 1.8.0
onlyDirty: true
Com os workflows criados, vamos aproveitar pra passar um lint no projeto. Em seguida, faremos um pull request e aguardaremos os workflows executarem. Se tudo estiver correto, poderemos seguir com o merge do pull request.
Agora faremos o pull request de uma branch que possui um teste que falhará e chave aberta na mesma linha que o nome da classe.
<?php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class FalseAssertTest extends TestCase {
/**
* A basic unit test example.
*/
public function test_example(): void
{
$this->assertTrue(false);
}
}
A implementação de fluxos de trabalho eficientes, agiliza a validação de código, aumenta a confiança nas alterações e aprimora o processo de CI/CD, promovendo um desenvolvimento ágil e de alta qualidade.
Top comments (0)