🌍 🇩🇪 Deutsche Version | 🇺🇸 English Version
wp_plugin_releaser is a lightweight Go tool for automated WordPress plugin releases, with full internationalization support, including:
- Automatic version number updates in main PHP file
- Update info management (
update_info.json) - ZIP file creation with configurable exclusion patterns
- Optional automatic SSH upload to update server
- Multi-language support (German/English) with automatic language detection
This tool supports multiple languages:
- English (default)
- German (Deutsch)
- Automatic language detection based on system locale
- Extensible - add more languages by creating JSON files in
locales/
# Force German output
LANG=de_DE.UTF-8 wp_plugin_release /path/to/plugin
# Force English output
LANG=en_US.UTF-8 wp_plugin_release /path/to/plugin- Automatic version detection (from plugin comment or class variable)
- Update info management (
update_info.json) - ZIP creation with skip patterns
- SSH upload (key or password based)
- Comprehensive logging with all steps
- Hardware-bound encryption for secure password storage
- Multi-language support with automatic detection
- Plugin-update-checker integration for YahnisElsts
Download the latest release for your platform: Releases
go install github.com/janmz/wp_plugin_release@latestgit clone https://github.com/janmz/wp_plugin_release.git
cd wp_plugin_release
make buildwp_plugin_release /path/to/plugin- If no path is specified, the current directory is used
- Expects an
update.configfile in the working directory
{
"main_php_file": "my-plugin.php",
"skip_pattern": ["*.psd", "*.bak", "node_modules", ".git"],
"ssh_host": "example.com",
"ssh_port": "22",
"ssh_dir_base": "/var/www/html/updates",
"ssh_user": "username",
"ssh_key_file": "/path/to/key.pem",
"ssh_password": "password in plain text",
"ssh_secure_password": "will contain encrypted password after first run"
}| Field | Description | Required |
|---|---|---|
main_php_file |
Main PHP file of the plugin | ✅ |
skip_pattern |
Files/directories to exclude from ZIP | ❌ |
ssh_host |
SSH hostname for upload | ✅ |
ssh_port |
SSH port (default: 22) | ✅ |
ssh_dir_base |
Base directory on server | ✅ |
ssh_user |
SSH username | ✅ |
ssh_key_file |
Path to SSH private key | ❌ |
ssh_known_hosts |
Path to OpenSSH known_hosts file |
✅ (or -fetch-hostkey) |
ssh_password |
SSH password (encrypted after first use) | ✅ |
SSH upload requires host key verification via ssh_known_hosts or the default
~/.ssh/known_hosts. If the file is missing or does not contain the server key,
run once with -fetch-hostkey to fetch and append the key:
wp_plugin_release -fetch-hostkey /path/to/plugin-trustserver is kept as an alias for -fetch-hostkey.
Create a known hosts file manually with:
ssh-keyscan -p 22 your-server.example.com >> known_hostsExample config:
{
"ssh_known_hosts": "known_hosts"
}- Hardware-bound encryption: Passwords are encrypted with a key derived from your system's hardware
- Automatic password encryption: Plain text passwords are automatically encrypted after first use
- Secure file handling: Backup files are created before modifications
- SSH key authentication: Supports both key and password authentication
make setup# Standard build
make build
# Build for all platforms
make build-all
# Run tests
make test
# Test internationalization
make test-i18n
# Validate translations
make i18n-validatemake i18n-extract- Create
locales/[lang_code].json(e.g.,locales/fr.json) - Copy structure from
locales/en.json - Translate all values
- Test with
LANG=[lang_code] wp_plugin_release --help
{
"app.name": "WordPress Plugin Release Tool",
"app.version": "Version %s from %s started",
"error.no_directory": "Directory %s does not exist",
"log.processing_php": "Processing PHP file: %s"
}- Tag:
git tag v1.0.0→git push origin v1.0.0 - GitHub Actions builds binaries for Linux/macOS/Windows and creates release with assets
make release- No dependencies (static binary)
- Optional: SSH client for uploads
- Go 1.21+
- Make (for build automation)
- Git
Contributions are welcome! Please check CONTRIBUTING.md before creating a pull request.
We especially welcome contributions for additional languages:
- Fork the repository
- Add your language file in
locales/[lang_code].json - Test the translation
- Submit a pull request
This software is under a modified MIT license (see LICENSE).
You may freely use, modify, and distribute the code, provided you credit the original author
Jan Neuhaus and maintain a link to the original repository: https://github.com/janmz/wp_plugin_release.
No warranty is provided.
If you find this project helpful, please support CFI-Kinderhilfe: https://cfi-kinderhilfe.de (Donations go to CFI-Kinderhilfe, not the author.)
Author: Jan Neuhaus – VAYA Consulting
Repository: https://github.com/janmz/wp_plugin_release
- Full internationalization support (German/English)
- Automatic language detection
- Enhanced CI/CD pipeline
- Improved error handling and logging
- Various bug fixes and improvements
- Initial release
- Basic plugin release functionality
- SSH upload support
- Hardware-bound encryption