Ankerlink an den Anfang der Seite
dsc 8957
Generic filters
Filter by Kategorien

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 Datei

Sie 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 --tags

Um 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“.

grafik
  "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 synchronized

Professionelle 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):

  1. Node.js erhöht mit update-version.js die Version in version.txt
  2. Node.js synchronisiert die Version zu package.json
  3. Node.js aktualisiert die Plugin-Datei
  4. Node.js führt Git-Operationen aus
  5. GitHub Actions erstellt automatisch das Release

Bitte das Kommentarfeld nicht für Supportanfragen nutzen; hier kann kein Support angeboten werden. Die Angabe von Name oder E-Mail-Adresse ist optional, ein Spitzname wäre trotzdem nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Name und E-Mail-Adresse (beides optional, da alle Kommentare moderiert werden) werden dauerhaft gespeichert. Über dieses Formular kann jeder Zeit die Löschung persönlicher Daten oder Kommentare angefordert werden; die Anfrage wird nicht veröffentlicht und nach der Bearbeitung gelöscht. IP-Adressen, die mit Kommentaren gespeichert werden, werden nach zwei Monaten automatisch gelöscht.

Ihre Nachricht wird möglicherweise zur Spam-Prüfung an OpenAI (USA) weitergeleitet. Weitere Informationen finden Sie in unserer Datenschutzerklärung.