Automatisation du Déploiement WordPress Plugin : Git vers SVN
Publié le - 6 février 2025 par Andy Cinquin
SvnWordpressGitGithub actions
Automatisation du Déploiement WordPress Plugin : Git vers SVN
Introduction
WordPress utilise toujours SVN (Subversion) pour son dépôt de plugins officiel, tandis que la plupart des développeurs modernes préfèrent Git et GitHub pour leur workflow quotidien. Cette différence peut créer une friction lors du déploiement de mises à jour de plugins, nécessitant souvent des actions manuelles pour synchroniser le code entre Git et SVN.
Cette solution résout ce problème en automatisant complètement le processus via GitHub Actions. À chaque push sur la branche principale, le système incrémente automatiquement la version, crée une release GitHub, et synchronise le code avec le dépôt SVN de WordPress.org. Plus besoin de jongler entre deux systèmes de versioning ou d'effectuer des actions manuelles répétitives : un simple push déclenche toute la chaîne de déploiement.
Configuration des Secrets GitHub
1. Création du GitHub Token
- Générez un token personnel dans les paramètres de votre compte GitHub
- Ajoutez les droits d'accès nécessaires pour les dépôts
- Ce token peut être réutilisé sur d'autres projets si besoin
2. Configuration dans GitHub


3. Ajout des Secrets
Configurez ces trois variables secrètes :
GH_TOKEN
: Votre token GitHub personnelSVN_USERNAME
: Votre nom d'utilisateur WordPress.orgSVN_PASSWORD
: Votre mot de passe WordPress.org
Note : La configuration peut se faire au niveau organisation ou repository selon vos besoins de réutilisation.
Fichiers de Configuration
1. Workflow de Déploiement
# File: .github/workflows/deploy.yml
name: Deploy WordPress Plugin
on:
push:
branches:
- main
paths:
- 'package.json'
- 'auto-alt-text-for-images.php'
- 'readme.txt'
jobs:
build-and-deploy:
name: Build and Deploy Plugin
runs-on: ubuntu-latest
if: "contains(github.event.head_commit.message, '✨ Release version')"
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install SVN
run: |
sudo apt-get update
sudo apt-get install -y subversion
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
tools: composer, wp-cli
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Get version from commit message
id: get_version
run: |
VERSION=$(echo "${{ github.event.head_commit.message }}" | grep -oP '✨ Release version \K[0-9]+\.[0-9]+\.[0-9]+')
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Install dependencies
run: |
composer install --no-dev --optimize-autoloader
npm ci
- name: Generate POT file
run: |
mkdir -p languages
wp i18n make-pot . languages/auto-alt-text-for-images.pot --domain=auto-alt-text-for-images --allow-root
- name: Create ZIP archive
run: composer run zip
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
files: release/auto-alt-text-for-images.zip
body_path: CHANGELOG.md
name: ${{ steps.get_version.outputs.version }}
tag_name: ${{ steps.get_version.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout WordPress SVN repository
env:
SVN_USERNAME: ${{ secrets.SVN_USERNAME }}
SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
run: |
svn checkout "https://plugins.svn.wordpress.org/auto-alt-text-for-images" \
--username "$SVN_USERNAME" \
--password "$SVN_PASSWORD" \
--no-auth-cache \
--non-interactive \
--trust-server-cert \
svn
- name: Prepare SVN
working-directory: svn
run: |
VERSION=${{ steps.get_version.outputs.version }}
rm -rf trunk/* tags/$VERSION
rm -rf assets/*
cp -r ../assets/* assets/
svn add assets/* --force
cp -r ../includes trunk/
cp -r ../languages trunk/
cp -r ../templates trunk/
cp ../auto-alt-text-for-images.php trunk/
cp ../README.md trunk/
cp ../readme.txt trunk/
cp ../uninstall.php trunk/
svn add trunk/* --force
mkdir -p tags/$VERSION
cp -r trunk/* tags/$VERSION/
svn add tags/$VERSION --force
svn status | grep '^\!' | sed 's/! *//' | xargs -I% svn rm %@
- name: Commit to SVN
working-directory: svn
env:
SVN_USERNAME: ${{ secrets.SVN_USERNAME }}
SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}
run: |
VERSION=${{ steps.get_version.outputs.version }}
svn commit -m "Release version $VERSION" \
--username "$SVN_USERNAME" \
--password "$SVN_PASSWORD" \
--no-auth-cache \
--non-interactive \
--trust-server-cert
- name: Notify on success
if: success()
run: |
echo "Plugin successfully deployed to WordPress.org and GitHub!"
echo "Version ${{ steps.get_version.outputs.version }} is now live!"
2. Workflow de Version Bump
# File: .github/workflows/version-bump.yml
name: Version Bump
on:
push:
branches:
- main
paths-ignore:
- '.github/workflows/**'
jobs:
version-bump:
name: Create New Version
runs-on: ubuntu-latest
permissions:
contents: write
if: "!contains(github.event.head_commit.message, '✨ Release version')"
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GH_TOKEN }}
fetch-depth: 0
- name: Read current version
id: version
run: |
CURRENT_VERSION=$(grep -Po '"version": "\K[^"]*' package.json)
echo "current_version=${CURRENT_VERSION}" >> $GITHUB_OUTPUT
- name: Increment version
id: bump_version
run: |
IFS='.' read -r -a version_parts <<< "${{ steps.version.outputs.current_version }}"
new_patch=$((version_parts[2] + 1))
NEW_VERSION="${version_parts[0]}.${version_parts[1]}.$new_patch"
echo "new_version=${NEW_VERSION}" >> $GITHUB_OUTPUT
- name: Update version numbers
run: |
NEW_VERSION="${{ steps.bump_version.outputs.new_version }}"
sed -i "s/\"version\": \".*\"/\"version\": \"$NEW_VERSION\"/" package.json
sed -i "s/Version: .*/Version: $NEW_VERSION/" auto-alt-text-for-images.php
sed -i "s/define( 'FORVOYEZ_VERSION', '.*' );/define( 'FORVOYEZ_VERSION', '$NEW_VERSION' );/" auto-alt-text-for-images.php
sed -i "s/Stable tag: .*/Stable tag: $NEW_VERSION/" readme.txt
- name: Commit and tag new version
run: |
NEW_VERSION="${{ steps.bump_version.outputs.new_version }}"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
git pull origin main
git add package.json auto-alt-text-for-images.php readme.txt
git commit -m "✨ Release version $NEW_VERSION ✨"
git tag $NEW_VERSION
git push origin main && git push origin $NEW_VERSION
Fonctionnement du Système
- À chaque push sur main :
- Le système vérifie si les fichiers de version ont été modifiés
- Incrémente automatiquement la version
- Crée un commit spécial de release
- Pousse les modifications avec un tag
- Le commit de release déclenche :
- La création d'une release GitHub
- La synchronisation avec SVN WordPress.org
- La mise à jour de la documentation
Un simple push sur la branche principale suffit maintenant pour déclencher toute la chaîne de déploiement. Les versions sont gérées automatiquement, et tout reste synchronisé entre GitHub et WordPress.org !
🚀 Merci d'avoir lu jusqu'ici !
Si cet article vous a plu, partagez-le autour de vous.
💡 Une idée en tête ? Discutons-en !☕