Archives de
Tag: php

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.

PhpStorm 2020.2 et Docker

PhpStorm 2020.2 et Docker

Si vous utilisez Docker et PhpStorm, il n’était jusque-là pas facile de les utiliser ensemble. Depuis la mise à jour 2020.2 il est simple de les utiliser conjointement. Dans la configuration de Docker il suffit de cocher « Docker for Windows » :

PhpStorm 2020.1
PhpStorm 2020.2

Il est alors possible de se connecter au service Docker via l’onglet « Services »

Il est aussi possible de configurer un interpréteur PHP depuis le conteneur :

Et voilà, PhpStorm et Docker fonctionnent enfin main dans la main.

Publier une librairie sur packagist

Publier une librairie sur packagist

En PHP le gestionnaire de dépendance le plus utiliser est composer. Composer utilise par défaut packagist.org pour chercher une librairie. Nous allons voir comment ajouter une librairie sur packagist afin de la rendre disponible au plus grand nombre.

Création de la librairie

Nous allons donc commencer par créer notre librairie dans un dossier avec un composer init, il nous sera alors demandé les informations suivantes :

  • nom du projet, celui utiliser lors du require
  • auteur
  • stabilité minimum
  • type de projet
  • licence
  • définition des dépendances
  • définition des dépendances de développement

Dans mon cas voilà ce que ça donne :

{
    "name": "dayofr/sfdc-rest-client",
    "description": "A SalesForce REST API PHP Wrapper",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "Dayo Fr",
            "email": "dayo@dayo.fr"
        }
    ],
    "require": {}
}

Nous créons ensuite un dossier src et tests afin de pouvoir définir les sections autoload et autoload-dev. Grace a ces définition nous pourrons utiliser les namespace PHP. Dans le code ci-dessous nous disons que les fichier situé dans le dossier src on pour namespace Dayofr :

"autoload": {
    "psr-4": {
      "Dayofr\\": "src/"
    }
  },
"autoload-dev": {
    "psr-4": {
      "Dayofr\\Tests\\": "tests/"
    }
  }

Les fichier PHP à la racine de src pourrons alors déclarer le namespace suivant :

<?php declare(strict_types=1);

namespace Dayofr;

Dans le cas où nous avons des sous dossiers sous la forme src/Responses/Limits le namespace serais alors :

<?php declare(strict_types=1);

namespace Dayofr\Responses\Limits;

Il en va de même pour les tests :

<?php

namespace Dayofr\Tests\Authentication;

Notre code peux donc est utiliser par l’autoloader de composer via :

use Dayofr\Authentication\LoginData;

Test en local

Afin de tester que tout fonctionne, vous pouvez créer un autre projet et ajouter une dépendance vers la libraire. Il nous faut rajouter un repository de type path. Pour cela modifier le composer.json de votre projet de test d’une des deux façon ci-dessous:

avec un lien symbolique :

"repositories": [
    {
        "type": "path",
        "url": "../sfdc-rest-client/",
    }
],

où en copiant le fichiers:

"repositories": [
    {
        "type": "path",
        "url": "../sfdc-rest-client/",
        "options": {
            "symlink": false
        }
    }
],

Il ne nous reste plus qu’a faire un

composer require dayofr/sfdc-rest-client:dev-master

Nous avons ici notre librairie copiée dans le dossier vendor. Vous pouvez alors utiliser votre librairie.

Déployer sur packagist

Pour ceci il vous faudra déployer votre code sur GitHub. Une fois fait, direction packagist.org. Premier étape, la connexion avec GitHub:

Ensuite direction la page d’ajout de librairie dans laquelle vous mettez l’url de projet sur GitHub:

Une fois envoyé, vous êtes redirigé vers la page de votre librairie, ou on vous dit que votre libraire va bientôt être ajouté.

Une fois ajouter vous avez plus d’information sur la page:

Suivez le lien en haut de la page pour activer le hook GitHub afin d’avoir la librairie à jour sur packagist.

Si vous voulez faire une version de votre librairie il vous suffit de créer un tag dans git et la version apparaitra dans packagist.

Votre libraire est prête à être utiliser par le monde entier 🙂

Pour en savoir plus sur packagist direction la page about.

Code Climate pour PHP

Code Climate pour PHP

Peu de temps après mon article sur Codecov, j’ai vu Codeclimate. En de fournir la couverture de code, Codeclimate donne aussi des information sur la qualité du code.

Première étape, la création d’un compte avec github en cliquant sur « Login » puis « Quality ».

Une fois connecté cliquez sur « Open source » puis sur « Add a repository ».

Dans la liste cliquez sur « Add Repo » pour en face de votre projet.

Lors de votre prochain build, vous aurez alors accès a des informations sur la qualité de votre code.

Dans mon cas, pour le moment tout va bien 🙂 Mais on peut voir qu’il manque la couverture de code.

Il nous faut pour cela rajouter un secret dans Travis CI. Pour le trouver direction « Repo Settings » => « Test coverage » => Copiez le « test reporter id »

Dans Travis CI ajoutez le dans la section « Settings ».

Et lors de votre prochain build vous aurez la couverture de code dans la section « Overview »

Dans la section « Issues » vous trouverez la liste des problèmes détecté par Code Climate. Vous pouvez alors les corriger, ou bien choisir un des options afin de ne plus le voir.

Dans la section « Code » vous trouverez des informations fichier par fichier.

En sélectionnant un fichier vous aurez plus détails sur celui-ci

Notamment la couverture de code.

Et voilà, il ne vous reste qu’a regardez tous ça.