Version 7 de mon blog refonte complète et nouveau socle technique

Version 7 de mon journal : refonte complète et nouveau socle technique

Vous l’aurez peut-être remarqué, mais le blog vient d’atteindre sa 7ème itération en 22 ans d’existence.

J’en avais un peu marre de mon ancien thème basé sur des widgets, que je trouvais difficile à faire évoluer. Sa structure reposait sur une base Timber / webpack vieillissante et particulièrement lourde. Et puisqu’on parle de lourdeur, l’interface et les temps de chargement étaient clairement pénalisants, notamment au regard des scores Google PageSpeed.

Du coup, je me suis un peu aidé de ChatGPT pour accélérer le développement et trouver des idées de design. J’ai aussi basculé sur un child theme basé sur Twenty Twenty-Five booster avec Vite, que je déploie automatiquement via Deploy PHP. Bref, on aime ou on n’aime pas (je suis moi-même encore un peu mitigé), mais au moins, j’ai maintenant une base beaucoup plus simple à faire évoluer rapidement.

Côté extensions, j’ai fait un bon ménage. J’ai supprimé pas mal de choses, comme Contact Form 7 qui faisait doublon avec Jetpack, mais aussi Yoast SEO, qui lui aussi faisait doublon tout en devenant de plus en plus lourd.

Enfin, j’ai remplacé Jetpack Boost par W3 Total Cache, couplé à Cloudflare en CDN via l’extension dédiée W3TC.

Pour ceux qui veulent voir ce qu’il y a sous le capot : le code n’est pas public pour des raisons liées au déploiement automatique. En revanche, j’ai repris un starter kit que j’utilise également sur Borsalinux-Fr et Fedora-fr, que vous pouvez retrouver sur GitHub ici et .

Concernant le déploiement automatique, je vais partager ici mon deployer.yaml, suivi du deploy-env.php pour la gestion des variables d’environnement, ainsi que mon devops.yaml utilisé pour déployer depuis GitHub.

Le devops.yaml gérant les Github Actions:

name: DevOps
on:
  [push]

env:
  NODE_LAST_VERSION: '25'
  PHP_LAST_VERSION: '8.5'

jobs:

  ##############################################################################
  # Test WordPress theme
  #
  test_assets:
    runs-on: ubuntu-latest
    name: Test Assets (javascript and styles)
    strategy:
      fail-fast: false
      matrix:
        node-version: ['25']
    steps:
    - name: Git checkout
      uses: actions/checkout@v6
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v6
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
        cache-dependency-path: package-lock.json
    - name: Install dependencies
      run: npm install
    - name: Run eslint (*.js)
      run: npm run eslint
    - name: Run stylelint (*.css)
      run: npm run stylelint

  test_php:
    runs-on: ubuntu-latest
    name: Test PHP
    strategy:
      fail-fast: false
      matrix:
        php-version: ['8.5']
    steps:
    - name: Git checkout
      uses: actions/checkout@v6
    - name: Use PHP ${{ matrix.php-version }}
      uses: shivammathur/setup-php@v2
      with:
        php-version: ${{ matrix.php-version }}
        tools: composer:v2
    - name: Get composer cache directory
      id: composer-cache
      run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
    - name: Cache dependencies
      uses: actions/cache@v5
      with:
        path: ${{ steps.composer-cache.outputs.dir }}
        key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: ${{ runner.os }}-composer-
    - name: Install dependencies
      run: composer install --prefer-dist
    - name: Run test suite
      run: composer run-script test

  ##############################################################################
  # Markdownlint
  #
  test_markdownlint:
    runs-on: ubuntu-latest
    name: MarkdownLint
    steps:
    - name: Git checkout
      uses: actions/checkout@v6
    - name: markdownlint-cli
      uses: nosborn/[email protected]
      with:
        files: "*.md"
        config_file: ".markdownlint.yaml"

  ##############################################################################
  # Deploy
  #
  deploy:
    if: ${{ github.ref == 'refs/heads/main' }}
    needs: [
      test_assets,
      test_php,
      test_markdownlint,
    ]
    runs-on: ubuntu-latest
    name: Deploy to server
    steps:
    - name: Git checkout
      uses: actions/checkout@v6
    - name: Use Node.js ${{ env.NODE_LAST_VERSION }}
      uses: actions/setup-node@v6
      with:
        node-version: ${{ env.NODE_LAST_VERSION }}
        cache: 'npm'
        cache-dependency-path: package-lock.json
    - name: Install dependencies
      run: npm install
    - name: Deploy
      uses: deployphp/action@v1
      with:
        dep: deploy
        private-key: ${{ secrets.DEPLOY_SSH_KEY }}
      env:
        DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
        DEPLOY_TARGET: ${{ secrets.DEPLOY_TARGET }}

Le deploy-env.php qui va prendre les secrets de Github pour les injecter en variables Deployer:

<?php
/**
 * TTF Material functions and definitions.
 *
 * @link https://developer.wordpress.org/themes/basics/theme-functions/
 *
 * @package WordPress
 * @subpackage TTF_Material
 * @since TTF Material 1.0
 */

namespace Deployer;

set( 'DEPLOY_TARGET', getenv( 'DEPLOY_TARGET' ) );
set( 'REMOTE_USER', getenv( 'DEPLOY_USER' ) );

Et le deploy.yaml qui va gérer mon déploiement :

import:
  - recipe/common.php
  - ./deploy-env.php

config:
  application: "ttf-material"
  deploy_target: "{{DEPLOY_TARGET}}"
  wp_theme_dir: "{{DEPLOY_TARGET}}/www/wp-content/themes"
  remote_user: "{{REMOTE_USER}}"
  repository: "[email protected]:llaumgui/{{application}}.git"
  keep_releases: 5

hosts:
  xxx.xxx.fr:
    deploy_path:  "{{deploy_target}}/{{application}}"

tasks:
  assets:build:
    - run_locally: "npm run build"

  assets:upload:
    - run: "mkdir -p {{release_path}}/assets/dist"
    - upload:
        src: "assets/dist"
        dest: "{{release_path}}/assets"

  deploy:symlink:
    - run: "cp -rf {{release_path}}/* {{wp_theme_dir}}/{{application}}"
    - run: "cd {{deploy_path}} && rm release"

  deploy:cache:
    - run: "cd {{deploy_target}}/www/ && /usr/local/bin/wp w3tc flush all"

after:
  deploy:release: assets:build
  deploy:update_code: assets:upload
  deploy:symlink: deploy:cache
  deploy:failed: deploy:unlock

À noter que W3TC & docker m’empêchent un peu de jouer avec les liens symboliques. Je prends donc le thème et je le copie. Vous pouvez adapter !

Avatar de Guillaume Kulakowski

À propos de l’auteur

Commentaires

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Derniers articles sur le journal