Archives de
Tag: phpunit

Utiliser les GitHub Actions pour PHP

Utiliser les GitHub Actions pour PHP

GitHub a publié les GitHub actions afin de mettre en place du CI/CD directement sur leur plateforme.

Nous allons les utiliser pour lancer les tests et PHPStan.

Afin de pourvoir tester en local et pas seulement sir GitHub nous utiliserons ACT. Une fois installé, utiliser les commandes :

  • act.exe -l afin de lister vos actions
  • act.exe afin d’exécuter vos actions
La liste des actions
L’exécution d’une action

Pour avoir une actions il faut créer un fichier sous .github/workflows/. Afin de ne pas avoir à tout faire nous allons utiliser l’action setup-php-action.

Voici le fichier que nous allons utiliser.

name: "CI"

# Triggers the workflow on push or pull request events
on: [push, pull_request]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
            php-version: '7.4'
            tools: phpstan, composer

      - name: Validate composer.json and composer.lock
        run: composer validate

      - name: Get composer cache directory
        id: composercache
        run: echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Cache dependencies
        uses: actions/cache@v2
        with:
          path: ${{ steps.composercache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: ${{ runner.os }}-composer-

      - name: Install dependencies
        run: composer install --prefer-dist

      - name: Setup problem matchers for PHPUnit
        run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"

      - name: Run PHPStan
        run: phpstan analyse src --level max

      - name: "Run tests"
        env:
          sfdc_username: ${{ secrets.SFDC_USERNAME }}
          sfdc_password: ${{ secrets.SFDC_PASSWORD }}
          sfdc_client_secret: ${{ secrets.SFDC_CLIENT_SECRET }}
          sfdc_client_id: ${{ secrets.SFDC_CLIENT_ID }}
        run: |
          cp .env.example .env
          vendor/bin/phpunit --coverage-clover=coverage.xml
  • A la ligne 4 nous demandons a lancer l’action sur les push et les pull request.
  • Ligne 11 et 12 nous fessons un checkout de notre code.
  • Ligne 14 et 14 nous utilisons l’action « Setup PHP » avec PHP 7.4 et composer, ligne 18 et 19.
  • Ensuite nous installons nos dépendances.
  • Puis ligne 39 nous ajoutons un matcher PHPUnit afin d’avoir les informations dans la GUI.
  • Ligne 42 nous exécutons PHPStan.
  • Ligne 45 a 49, nous utilisons des secret en tant que variable d’environnements, puis ligne 52 nous exécutons nos tests.

Afin d’ajouter des secrets, directions l’onglet Settings puis la section Secrets, il vous restera à cliquer sur New Secret.

Pour plus d’informations, direction la section Secret de la doc.

Ci-dessous d’autre image des actions:

Actions en cours
Affichage lors d’un échec
Détails de l’échec.
Historique des actions

Pour plus d’informations, regardez la documentations des GitHub Actions.

GitHub, Travis CI et Codecov pour PHP

GitHub, Travis CI et Codecov pour PHP

GitHub

Première étape la création d’un compte GitHub.

Ensuite il faut créer un nouveau repository.

Il faut choisir un nom, une description, si le projet est publique ou priver, si on veux un fichier README ainsi qu’une licence et un fichier .gitignore.

Une fois fait direction la ligne de commande pour utiliser git.

Dans un dossier vide faites la première commande, puis votre travail et la 2eme et 3eme commande afin de commiter vos fichier. Quand vous être prêt a pousser votre projet sur GitHub faites les 2 dernières.

git init
git add .
git commit -m "first commit"
git remote add origin git@github.com:dayofr/sfdc-rest-client1.git
git push -u origin master

Dans mon cas, sur GitHub on peut voir:

Travis CI

Première étape, la création du fichier .travis.yml. C’est ce fichier qui sera utilisé par Travis CI pour exécuter ce que vous lui demanderait.

Dans notre cas, on demande un machine pour PHP version 7.4, il est possible de demander plusieurs machine en rajoutant des valeur a la liste.

La partie script contient les commandes exécutés par travis, dans notre cas nous copions un fichier, installons les dépendance avec composer puis lançons les test avec phpunit. Il faut bien sur commiter et pousser ce fichier sur GitHub.

language: php
php:
  - '7.4'

script:
  - cp .env.example .env
  - composer install
  - vendor/bin/phpunit

Direction Travis CI pour la configuration. Une fois connecté avec GitHub, cliquez sur le menu en haut a droite et sur « Settings ».

Dans la liste des projets sélectionnez celui sur lequel vous travaillez.

Cliquez alors sur le nom de votre projet et vous devriez voir:

Il vous faut alors pousser du code sur GitHub pour que le travail soit effectué. Un nouveau travail devrais alors être démarré par Travis CI et vous devriez voir:

Nous avons la sortie console du travail fait par Travis CI.

Codecov

Pour avoir accès à la couverture de code, nous utilisons Codecov. Une fois connecté avec GitHub, cliquez sur le bouton « Add new repository » puis le projet que vous souhaitez ajouter.

La page suivante nous explique qu’il n’est pas obligatoire de rajouter une variable d’environnement pour Travis CI mais il m’a fallut le faire. Direction Travis CI afin de rajouter cette variable. Cliquez sur « Settings ».

Un peu plus bas dans la page vous trouverez une section « Environment Variables », ajoutez alors la variable.

L’étape suivante consiste a modifier le fichier .travis.yml pour lui rajouter les information de couverture de code et l’appel a Codecov.

  - vendor/bin/phpunit --coverage-clover=coverage.xml

after_success:
  # Submit coverage report to https://codecov.io
  - bash <(curl -s https://codecov.io/bash)

Lors du prochain travail de Travis CI vous aurez alors dans Codecov des informations.

Et voila, a chaque fois que vous pousserais du code sur GitHub, vous aurez un job Travis CI avec vos tests et la couverture de code avec Codecov.