Bei der Entwicklung von WordPress-Plugins gehört für mich auch die Automatisierung von Release-Prozessen dazu. Ein wichtiges Werkzeug ist die Powershell. Doch für die Automatisierung ziehe ich Node.js-Skripte vor.
Die Befehle
npm run status # Zeigt Versionsstatus aller Dateien
npm run version:patch # Erhöht Patch-Version (1.0.0 → 1.0.1)
npm run version:minor # Erhöht Minor-Version (1.0.1 → 1.1.0)
npm run version:major # Erhöht Major-Version (1.1.0 → 2.0.0)
npm run release:patch # Version + Release (kompletter Workflow)
npm run release:minor # Version + Release (kompletter Workflow)
npm run release:major # Version + Release (kompletter Workflow)Die Struktur
releases-and-github-workflow/
├── .github/workflows/release.yml # GitHub Actions Workflow
├── scripts/
│ ├── release.js # Node.js Release-Script
│ ├── status.js # Node.js Status-Check
│ └── update-version.js # Node.js Versionsverwaltung
├── package.json # NPM-Konfiguration
├── version.txt # Versionsdatei
└── README.md # Diese DateiSie sind plattformunabhängig
Im Gegensatz zu PowerShell-Skripten, die nur unter Windows laufen, sind Node.js-Skripte plattformübergreifend einsetzbar.
// Node.js funktioniert unter Windows, macOS und Linux
const fs = require('fs');
const path = require('path');Robuste Fehlerbehandlung
Ohne ordentliche Fehlerbehandlung kann man leicht in einem inkonsistenten Zustand landen – die Version wurde erhöht, aber das Git-Tag wurde nicht erstellt, oder die Plugin-Datei wurde nicht aktualisiert….
try {
execSync('git tag -a "v${version}" -m "Release v${version}"', { stdio: 'inherit' });
console.log('✅ Tag erfolgreich erstellt');
} catch (error) {
console.error('❌ Fehler beim Tagging:', error.message);
process.exit(1);
}Einfache Dateioperationen
// JSON-Parsing ist eingebaut
const packageData = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
const version = packageData.version;
// Regex-Ersetzungen sind präzise
pluginContent = pluginContent.replace(
/Version:\s*\d+\.\d+\.\d+/,
`Version: ${version}`
);Integration mit NPM-Scripts
Die Aufrufe werden einfach in die packacke.json-Datei geschrieben. Für das Versionsupdate auf dem localhost (version:patch…) braucht man ein lokales git-Repository.
> version:patch
> node scripts/update-version.js patch
🚀 Updating version (patch)...
📋 Current version: 1.0.1
🔄 Updating version: 1.0.1 → 1.0.2
✅ Updated version.txt
✅ Updated plugin-name.php
✅ Updated package.json
🏷️ Creating git tag: v1.0.2
✅ Git tag created
🎉 Version update completed successfully!
📝 Next steps:
1. Review changes: git diff
2. Commit changes: git add . && git commit -m "Release v1.0.2"
3. Push changes: git push && git push --tagsUm die herunterladbaren Releases auf Github zu erhalten braucht es zusätzlich ein Github-Repository, da das eigentliche Release (plugin-name.zip) dort entsteht. Workflow Actions müssen write permisions erhalten, damit das funktioniert. Im Repository unter Settings, Actions, General umstellen auf „Read and write permissions“.

"scripts": {
"version": "auto-changelog -p && git add CHANGELOG.md",
"status": "node scripts/status.js",
"version:patch": "node scripts/update-version.js patch",
"version:minor": "node scripts/update-version.js minor",
"version:major": "node scripts/update-version.js major",
"release:patch": "node scripts/update-version.js patch && node scripts/release.js",
"release:minor": "node scripts/update-version.js minor && node scripts/release.js",
"release:major": "node scripts/update-version.js major && node scripts/release.js"
},
Modularer Aufbau
Aufteilung in spezialisierte Skripte, z.B.:
- update-version.js – Synchronisiert Versionen zwischen Dateien
- release.js – Führt Git-Operationen aus
- status.js:
... npm run status
> status
> node scripts/status.js
📊 Version Status Check
📄 version.txt: 1.0.2
📦 package.json: 1.0.2
🔌 Plugin Header: 1.0.2
⚙️ Plugin Constant: 1.0.2
🔍 Synchronization Check:
✅ All versions are synchronizedProfessionelle Logging
console.log(`�� Creating release v${version} for Plugin Name...`);
console.log('�� Syncing version to plugin file...');
console.log('📦 Adding files to git...');
console.log('�� Committing changes...');
console.log('🏷️ Creating tag...');
console.log('⬆️ Pushing to GitHub...');Automatisierte GitHub Integration
# .github/workflows/release.yml
on:
push:
tags:
- "v*"
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- name: Create ZIP file
run: |
mkdir -p temp
cp plugin-name.php temp/
# ... weitere Dateien
zip -r ../plugin-name.zip .Vorteile gegenüber alternativen Lösungen
vs. Shell-Skripte:
- ✅ Bessere Fehlerbehandlung
- ✅ Plattformunabhängigkeit
- ✅ Einfacheres JSON-Parsing
- ✅ Modulare Struktur
vs. PowerShell allein:
- ✅ Funktioniert auf allen Plattformen
- ✅ Bessere Integration mit NPM
- ✅ Einfachere Git-Integration
vs. Manuelle Prozesse:
- ✅ Keine menschlichen Fehler
- ✅ Konsistente Releases
- ✅ Automatische Dokumentation
- ✅ Zeitersparnis
Praktische Implementierung
Die Vorgehensweise kombiniert die Stärken von PowerShell (für Windows-spezifische Operationen) mit Node.js (für plattformübergreifende Aufgaben):
- Node.js erhöht mit update-version.js die Version in version.txt
- Node.js synchronisiert die Version zu package.json
- Node.js aktualisiert die Plugin-Datei
- Node.js führt Git-Operationen aus
- GitHub Actions erstellt automatisch das Release
Hinweis: Weitgehend KI-generierter Inhalt (aus Erklärungen verwendeter KI-Tools zusammengesetzt)




Schreibe einen Kommentar