https://github.com/ddtcorex/warden-custom-commands
Custom commands that extend Warden's functionality for multiple framework types.
https://github.com/ddtcorex/warden-custom-commands
docker laravel magento magento2 php symfony warden wordpress
Last synced: 3 months ago
JSON representation
Custom commands that extend Warden's functionality for multiple framework types.
- Host: GitHub
- URL: https://github.com/ddtcorex/warden-custom-commands
- Owner: ddtcorex
- License: gpl-3.0
- Created: 2023-03-12T19:51:09.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2026-03-31T12:55:00.000Z (3 months ago)
- Last Synced: 2026-03-31T14:44:57.324Z (3 months ago)
- Topics: docker, laravel, magento, magento2, php, symfony, warden, wordpress
- Language: Shell
- Homepage: https://docs.warden.dev/
- Size: 644 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Warden Custom Commands
Custom commands that extend Warden's functionality for multiple framework types.
## Installation
### Prerequisites
1. **Docker Desktop** or **Docker Engine**
- [Docker Desktop for Mac](https://hub.docker.com/editions/community/docker-ce-desktop-mac) 2.2.0.0 or later
- [Docker for Linux](https://docs.docker.com/install/) (tested on Fedora 29 and Ubuntu 18.10)
- [Docker for Windows](https://docs.docker.com/desktop/windows/install/)
**Important:** Docker Desktop should have at least **6GB RAM** allocated (Preferences → Resources → Advanced → Memory)
2. **docker-compose** version 2 or later
```bash
# Verify docker-compose is installed
docker-compose --version
```
### Install Warden
### Option 1: Manual Installation (Recommended)
```bash
sudo mkdir /opt/warden
sudo chown $(whoami) /opt/warden
git clone -b main https://github.com/wardenenv/warden.git /opt/warden
echo 'export PATH="/opt/warden/bin:$PATH"' >> ~/.bashrc
PATH="/opt/warden/bin:$PATH"
warden svc up
```
### Option 2: Via Homebrew
```bash
brew install wardenenv/warden/warden
warden svc up
```
**For zsh users:**
```bash
echo 'export PATH="/opt/warden/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
```
### DNS Resolver Configuration (Linux)
If you are running on Linux (Ubuntu, Fedora, etc.), you must configure `systemd-resolved` to work with Warden's DNS resolver.
1. Create a configuration directory for `systemd-resolved`:
```bash
sudo mkdir -p /etc/systemd/resolved.conf.d
```
2. Create the Warden configuration file:
```bash
sudo tee /etc/systemd/resolved.conf.d/warden.conf < [!TIP] > **Development Workflow:** If you are contributing or modifying these commands, it is recommended to symlink your development directory to `~/.warden/commands`:
>
> ```bash
> ln -s ~/path/to/your/repo ~/.warden/commands
> ```
Commands will be automatically available via `warden `.
### SSH Key Setup (Local → Remote Server)
If you plan to use remote operations (cloning sites, syncing media/files, downloading databases), set up SSH keys for passwordless authentication.
#### 1) Generate an SSH key on your local machine
```bash
# Use ed25519 (recommended) or RSA
ssh-keygen -t ed25519 -C "your_email@example.com"
# Or for RSA (wider compatibility)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```
#### 2) Start the SSH agent and add your key
```bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519 # or ~/.ssh/id_rsa
```
#### 3) Add your public key to the remote server
```bash
ssh-copy-id -p 22 user@your-server.com
# Or manually:
cat ~/.ssh/id_ed25519.pub | ssh user@server 'cat >> ~/.ssh/authorized_keys'
```
#### 4) Test SSH login
```bash
ssh -p 22 user@your-server.com
```
#### 5) Optional: Simplify with `~/.ssh/config`
```ssh-config
Host staging
HostName staging.example.com
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
```
Then connect with just `ssh staging`.
#### Troubleshooting
- **Permission denied**: Ensure `~/.ssh` is `700` and `authorized_keys` is `600` on remote
- **Agent not running**: Add `eval "$(ssh-agent -s)" && ssh-add` to your `.bashrc`/`.zshrc`
- **Host key verification**: Commands now include `-o StrictHostKeyChecking=no` to skip prompts
## Architecture
### Dispatcher Pattern
Commands use a **dispatcher pattern** where root commands delegate to environment-specific implementations:
```text
commands/
├── bootstrap.cmd # Dispatcher → env-adapters/{type}/bootstrap.cmd
├── db-dump.cmd # Dispatcher → env-adapters/{type}/db-dump.cmd
├── db-import.cmd # Dispatcher → env-adapters/{type}/db-import.cmd
├── deploy.cmd # Dispatcher → env-adapters/{type}/deploy.cmd
├── env-sync.cmd # Dispatcher → env-adapters/{type}/env-sync.cmd
├── fix-deps.cmd # Dispatcher → env-adapters/{type}/fix-deps.cmd
├── open.cmd # Dispatcher → env-adapters/{type}/open.cmd
├── set-config.cmd # Dispatcher → env-adapters/{type}/set-config.cmd
├── upgrade.cmd # Dispatcher → env-adapters/{type}/upgrade.cmd
│
├── env-variables # Global environment loader
├── remote-exec.cmd # Global command
├── self-update.cmd # Global command
├── setup-remotes.cmd # Global command
│
└── env-adapters/ # Environment-specific implementations
├── magento2/
│ ├── bootstrap.cmd
│ ├── bootstrap.help
│ ├── db-dump.cmd
│ ├── db-dump.help
│ ├── db-import.cmd
│ ├── db-import.help
│ ├── deploy.cmd
│ ├── deploy.help
│ ├── env-sync.cmd
│ ├── fix-deps.cmd
│ ├── fix-deps.help
│ ├── magento-versions.json
│ ├── open.cmd
│ ├── open.help
│ ├── set-config.cmd
│ ├── set-config.help
│ ├── upgrade.cmd
│ └── upgrade.help
│
├── laravel/
│ ├── bootstrap.cmd
│ ├── db-dump.cmd
│ ├── db-dump.help
│ ├── db-import.cmd
│ ├── env-sync.cmd
│ ├── fix-deps.cmd
│ ├── fix-deps.help
│ ├── open.cmd
│ ├── open.help
│ ├── set-config.cmd
│ ├── upgrade.cmd
│ └── upgrade.help
│
├── symfony/
│ ├── bootstrap.cmd
│ ├── db-dump.cmd
│ ├── db-dump.help
│ ├── db-import.cmd
│ ├── env-sync.cmd
│ ├── fix-deps.cmd
│ ├── fix-deps.help
│ ├── open.cmd
│ ├── open.help
│ ├── set-config.cmd
│ ├── upgrade.cmd
│ └── upgrade.help
│
└── wordpress/
├── bootstrap.cmd
├── db-dump.cmd
├── db-dump.help
├── db-import.cmd
├── env-sync.cmd
├── fix-deps.cmd
├── fix-deps.help
├── open.cmd
├── open.help
├── set-config.cmd
├── upgrade.cmd
└── upgrade.help
```
### How It Works
1. You run: `warden bootstrap`
2. Warden calls: `~/.warden/commands/bootstrap.cmd` (dispatcher)
3. Dispatcher reads `WARDEN_ENV_TYPE` from `.env`
4. Dispatcher sources the appropriate implementation:
- `env-adapters/magento2/bootstrap.cmd` for Magento 2
- `env-adapters/laravel/bootstrap.cmd` for Laravel
- etc.
## Commands Reference
### Global Options
Most commands support the following global flags:
- `-v`, `--verbose`: Enable verbose output (detailed logs).
- `-vv`: Enable debug mode (prints shell commands during execution).
### Common Commands
#### `warden env-sync`
The unified synchronization command for files, media, and databases.
**Options:**
- `-h, --help` - Display help menu
- `-s, -e, --source, --environment`: Source environment (default: `staging`)
- `-d, --destination`: Destination environment (default: `local`)
- `-f, --file`: Sync source code/files
- `-m, --media`: Sync media files
- `--db`: Sync database (streaming, no local dump file created)
- `-N, --no-noise`: Skip noise tables from DB sync (logs, cache, search indexes)
- `-S, --no-pii`: Exclude PII/GDPR sensitive tables (Customers, Orders, etc.)
- `--full`: Full Sync (Shortcut for `--file --media --db`)
- `-p, --path`: Sync a specific directory or file path
- `--include-product`: Include product/cache images in media sync (Magento 2 only)
- `--dry-run`: Show what would happen without making changes
- `--redeploy`: Redeploy destination after sync using `deploy.cmd` (default: disabled)
- `--delete`: Delete files on destination that are not present in source (rsync only)
- `--backup`: Create a backup of the destination database before syncing (if DB is synced)
- `--backup-dir=PATH`: Path to store backups (default: `~/backup` on destination)
- `-y, --yes`: Non-interactive mode
**Examples:**
1. **Sync Database (Remote to Local)**
```bash
# Pull database from staging (default) to local
warden env-sync --db
# Pull database from prod to local
warden env-sync -s prod --db
```
2. **Sync Media (Remote to Local)**
```bash
# Pull media files from staging to local
warden env-sync --media
# Delete local files that are missing on remote (mirroring)
warden env-sync --media --delete
```
3. **Sync Files/Code (Local to Remote)**
```bash
# Push local changes to dev environment
warden env-sync -d dev --file
# Push a specific file
warden env-sync -d dev -p app/etc/config.php
```
4. **Sync Specific Path (Remote to Remote)**
```bash
# Sync a specific log folder from prod to staging
warden env-sync -s prod -d staging -p var/log/
```
5. **Full Synchronization**
```bash
# Sync everything: DB, Media, Files (all tables included by default)
warden env-sync --full
# Sync DB, skipping noise tables (logs/cache/search indexes)
warden env-sync --db -N
# Sync DB, skipping both noise tables and PII/sensitive data
warden env-sync --db -N -S
```
6. **Dry Run**
```bash
# See what would happen without actually syncing
warden env-sync --media --delete --dry-run
```
> [!IMPORTANT]
> Operations to remote environments (where neither source nor destination is `local`) use **SSH Agent Forwarding**.
>
> - The local machine connects to the Source.
> - The Source connects to the Destination using **your local keys**.
> - **Requirement:** You must have your SSH keys loaded locally (`ssh-add -l`). If empty, run `ssh-add`.
### Magento 2 Commands
#### Magento 2: `warden bootstrap`
Initialize a new Magento 2 environment with all dependencies and configuration.
**Clone Options:**
- `-c, --clone` - Clone project from remote (source + DB + media)
- `--code-only` - With --clone: skip DB and media sync
**Install Options:**
- `--fresh` - Create fresh Magento project (aliases: `--clean-install`, `--fresh-install`)
- `--version, --meta-version=` - Magento version for fresh install (e.g., 2.4.8)
- `--meta-package=` - Magento package name (default: `magento/project-community-edition`)
- `--mage-username=` - Magento Marketplace Public Key
- `--mage-password=` - Magento Marketplace Private Key
- `--include-sample` - Include sample data (fresh install/bootstrap)
- `--hyva-install` - Install Hyvä theme (fresh install)
**Skip Options:**
- `--no-db` - Skip database import
- `--no-media` - Skip media sync from remote
- `--no-composer` - Skip composer install
- `--no-admin` - Skip admin user creation
- `--no-stream-db` - Use intermediate dump file instead of streaming
- `--no-noise` - Exclude noise tables (logs/cache/indexes) in DB sync during clone
- `--no-pii` - Exclude PII/sensitive data from DB sync during clone
**Other Options:**
- `-e, --environment=` - Source environment (staging, prod, dev). Default: staging
- `--db-dump=` - Use specific local database dump file for import
- `--fix-deps` - Auto-fix dependency versions (PHP, Redis, etc.) based on Magento version
- `-y, --yes` - Non-interactive mode
**Example:**
```bash
# Standard bootstrap from staging
warden bootstrap
# Clone project from prod (one-command setup)
warden bootstrap -c -e prod
# Clone code only, skip DB and media
warden bootstrap -c --code-only -e staging
# Fresh Magento installation
warden bootstrap --fresh --version=2.4.8
```
#### Magento 2: `warden db-dump`
Create a database backup with optional compression.
**Options:**
- `-h, --help` - Display help menu
- `-f, --file=` - Output file path
- `-e, --environment=` - Specific environment (local, dev, staging, prod). Default: local
- `-N, --no-noise` - Exclude noise tables from dump (logs/cache/indexes)
- `-S, --no-pii` - Exclude sensitive data (customers, orders, etc.)
- `--local` - Download the dump to your local machine (host) instead of storing it on the remote server.
(Applies only when dumping from remote environments; default behavior for remote is to store at `~/backup/` on the server).
**Example:**
```bash
warden db-dump # Dump all tables (default)
warden db-dump -N -e prod # Dump from prod, skip noise tables
warden db-dump -N -S # Skip noise + PII data
```
#### Magento 2: `warden db-import`
Import database from local or remote file.
**Options:**
- `-h, --help` - Display help menu
- `-f, --file=` - Path to existing database dump file (can be gzipped)
- `--stream-db` - Stream database directly from remote environment (no local file)
- `-e, --environment=` - Remote environment to stream from (used with `--stream-db`)
**Example:**
```bash
warden db-import --file=backup.sql.gz
warden db-import -f /path/to/database.sql
```
#### Magento 2: `warden deploy`
Deploy Magento application (run setup:upgrade, compile, deploy).
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Environment to deploy to. Default: local
- `-j, --jobs=` - Number of parallel jobs for static content (default: 4)
- `-o, --only-static` - Deploy static content only (skip composer, upgrade, compile)
- `--deployer` - Use Deployer strategy (equivalent to `--strategy=deployer`)
- `--strategy=` - Deployment strategy: `native` (default) or `deployer`
- `--deployer-config=` - Path to custom `deploy.php` or `deploy.yaml`
**Example:**
```bash
warden deploy
warden deploy --jobs=8
warden deploy --only-static
# Deployer Strategy
warden deploy --deployer
warden deploy -e staging --strategy=deployer
warden deploy --deployer-config=custom/deploy.php
```
#### Deployer Strategy
You can use [Deployer](https://deployer.org/) to handle deployments by passing the `--deployer` flag or using `--strategy=deployer`.
- **Automatic Detection:** Warden looks for `deploy.php` or `deploy.yaml`.
- **Global Installation:** If `dep` is not in your project, Warden installs it globally within the container.
- **SSH Config:** Host key verification is automatically handled.
- **Environment Matching:** The `-e` environment name (e.g., `staging`) is passed directly to Deployer as the stage name.
#### Magento 2: `warden open`
Open Magento services in browser or establish tunnels.
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Specific environment (local, dev, staging, prod). Default: local
**Arguments:**
- `db` - Open database connection (tunnels to remote if environment specified)
- `shell` - Open container shell (or SSH to remote)
- `sftp` - Open SFTP connection
- `admin` - Open admin panel in browser
- `elasticsearch` - Open Elasticsearch/OpenSearch
**Other Options:**
- `-a, --xdg-open` - Automatically open in browser/client
**Example:**
```bash
warden open
warden open admin
warden open -e staging
```
#### Magento 2: `warden set-config`
Automatically configure Magento settings to optimize for the Warden development environment.
**Features:**
- Sets base URLs to match Traefik configuration.
- Configures Varnish, Redis, and OpenSearch/Elasticsearch based on `.env` settings.
- Disables security features for easier development (2FA, reCAPTCHA, etc.).
- Enables developer mode.
- Supports custom hooks via `.warden/hooks`.
**Example:**
```bash
warden set-config
```
#### Magento 2: `warden upgrade`
Upgrade Magento to a specified version.
**Options:**
- `--version=` - Target version to upgrade to (required)
- `--dry-run` - Show what would be done without making changes
- `--skip-db-upgrade` - Skip database upgrade step
- `--skip-env-update` - Skip environment dependency updates (automatic `fix-deps`)
**Example:**
```bash
warden upgrade --version=2.4.8
warden upgrade --version=2.4.8 --dry-run
warden upgrade --version=2.4.8-p3 --skip-db-upgrade
```
#### Magento 2: `warden fix-deps`
Automatically detect and update environment dependency versions (PHP, MySQL, Redis, etc.) in `.env` based on the Magento version.
**Options:**
- `-v, --version=VERSION` - Specify Magento version manually (e.g., 2.4.8)
- `--dry-run` - Preview changes without modifying `.env`
**Example:**
```bash
warden fix-deps --version=2.4.8
warden fix-deps --dry-run
```
### Magento 1 Commands
#### Magento 1: `warden bootstrap`
Initialize a new Magento 1 / OpenMage environment.
**Options:**
- `-c, --clone` - Clone project from remote (source + DB + media)
- `--code-only` - With --clone: skip DB and media sync
- `--fresh` - Create fresh M1/OpenMage project
- `--no-db`, `--no-media`, `--no-composer` - Skip specific steps
- `--no-noise` - Exclude noise tables (logs/cache/indexes) in DB sync during clone
- `--no-pii` - Exclude PII/sensitive data from DB sync during clone
**Example:**
```bash
warden bootstrap -c -e staging
```
#### Magento 1: `warden env-sync`
Standardized synchronization for M1. Supports `--db`, `--media`, `--no-noise`, etc.
#### Magento 1: `warden db-dump` / `db-import`
Standardized database operations for M1 with support for `--no-noise` and `--no-pii`.
#### Magento 1: `warden upgrade` / `deploy` / `open`
Utility commands adapted for Magento 1 architecture.
### Laravel Commands
#### Laravel: `warden bootstrap`
Initialize Laravel environment with dependencies and database.
**Clone Options:**
- `-c, --clone` - Clone project from remote (source + DB)
- `--code-only` - With --clone: skip DB sync
**Install Options:**
- `--fresh` - Create fresh Laravel project
- `--fix-deps` - Auto-fix dependency versions
**Skip Options:**
- `--no-db` - Skip database import
- `--no-composer` - Skip composer install
- `--no-migrate` - Skip database migrations
- `--no-stream-db` - Use intermediate dump file instead of streaming
- `--no-noise` - Exclude noise tables (logs/cache/indexes) in DB sync during clone
- `--no-pii` - Exclude PII/sensitive data from DB sync during clone
**Other Options:**
- `-e, --environment=` - Source environment (staging, prod, dev). Default: staging
- `--db-dump=` - Use specific local database dump file for import
- `-y, --yes` - Non-interactive mode
**Example:**
```bash
warden bootstrap # Standard bootstrap
warden bootstrap -c -e prod # Clone from prod
warden bootstrap --fresh # Create new Laravel project
```
#### Laravel: `warden db-dump`
Dump database from a remote Laravel environment.
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Specific environment (local, dev, staging, prod). Default: local
- `-f, --file=` - Output file path
- `-N, --no-noise` - Skip noise tables (logs, cache, indexes)
- `-S, --no-pii` - Exclude sensitive data from the dump
- `--local` - Download remote dump to local machine (default: store on remote at `~/backup/`)
**Example:**
```bash
warden db-dump -e dev --local
warden db-dump --file=prod-backup.sql.gz -e prod
```
#### Laravel: `warden db-import`
Import database dump into Laravel project.
**Options:**
- `-h, --help` - Display help menu
- `-f, --file=` - Path to existing database dump file (can be gzipped)
- `--stream-db` - Stream database directly from remote environment (no local file)
- `-e, --environment=` - Remote environment to stream from (used with `--stream-db`)
**Example:**
```bash
warden db-import --file=backup.sql.gz
warden db-import --stream-db -e staging
```
#### Laravel: `warden open`
Open Laravel services (local or remote).
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Specific environment (local, dev, staging, prod). Default: local
- `-a, --xdg-open` - Automatically open in browser/client
**Arguments:** `db`, `shell`, `sftp`, `admin`, `elasticsearch`
**Example:**
```bash
warden open db
warden open -e staging shell
```
#### Laravel: `warden set-config`
Update Laravel `.env` configuration with Warden-specific settings.
**Example:**
```bash
warden set-config
```
#### Laravel: `warden deploy`
Deploy Laravel locally. Supports native strategy and Deployer.
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Environment to deploy to. Default: local
- `-o, --only-static` - Deploy static assets only (storage:link) and run hooks
- `--deployer` - Use Deployer strategy (equivalent to `--strategy=deployer`)
- `--strategy=` - Deployment strategy: `native` (default) or `deployer`
- `--deployer-config=` - Path to custom `deploy.php` or `deploy.yaml`
**Example:**
```bash
warden deploy
warden deploy --deployer
```
#### Laravel: `warden upgrade`
Upgrade Laravel framework to a specified version.
**Options:**
- `--version=` - Target version to upgrade to (required)
- `--dry-run` - Show what would be done without making changes
**Example:**
```bash
warden upgrade --version=11.0
warden upgrade --version=10.x --dry-run
```
### Symfony Commands
#### Symfony: `warden bootstrap`
Initialize Symfony environment with dependencies and database.
**Clone Options:**
- `-c, --clone` - Clone project from remote (source + DB)
- `--code-only` - With --clone: skip DB sync
**Install Options:**
- `--fresh` - Create fresh Symfony project
- `--fix-deps` - Auto-fix dependency versions
**Skip Options:**
- `--no-db` - Skip database import
- `--no-composer` - Skip composer install
- `--no-migrate` - Skip database migrations
- `--no-stream-db` - Use intermediate dump file instead of streaming
- `--no-noise` - Exclude noise tables (logs/cache/indexes) in DB sync during clone
- `--no-pii` - Exclude PII/sensitive data from DB sync during clone
**Other Options:**
- `-e, --environment=` - Source environment (staging, prod, dev). Default: staging
- `--db-dump=` - Use specific local database dump file for import
- `-y, --yes` - Non-interactive mode
**Example:**
```bash
warden bootstrap # Standard bootstrap
warden bootstrap -c -e prod # Clone from prod
warden bootstrap --fresh # Create new Symfony project
```
#### Symfony: `warden db-dump`
Dump database from a remote Symfony environment.
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Specific environment (local, dev, staging, prod). Default: local
- `-f, --file=` - Output file path
- `-N, --no-noise` - Skip noise tables (logs, cache, indexes)
- `-S, --no-pii` - Exclude sensitive data from the dump
- `--local` - Download remote dump to local machine (default: store on remote at `~/backup/`)
**Example:**
```bash
warden db-dump -e dev --local
warden db-dump --file=prod-backup.sql.gz -e prod
```
#### Symfony: `warden db-import`
Import database dump into Symfony project.
**Options:**
- `-h, --help` - Display help menu
- `-f, --file=` - Path to existing database dump file (can be gzipped)
- `--stream-db` - Stream database directly from remote environment (no local file)
- `-e, --environment=` - Remote environment to stream from (used with `--stream-db`)
**Example:**
```bash
warden db-import --file=backup.sql.gz
warden db-import --stream-db -e staging
```
#### Symfony: `warden open`
Open Symfony services (local or remote).
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Specific environment (local, dev, staging, prod). Default: local
- `-a, --xdg-open` - Automatically open in browser/client
**Arguments:** `db`, `shell`, `sftp`, `admin`, `elasticsearch`
**Example:**
```bash
warden open db
warden open -e staging shell
```
#### Symfony: `warden set-config`
Update Symfony configuration for Warden environment.
**Example:**
```bash
warden set-config
```
#### Symfony: `warden deploy`
Deploy Symfony locally. Supports native strategy and Deployer.
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Environment to deploy to. Default: local
- `-o, --only-static` - Deploy assets only (skip composer, migrations)
- `--deployer` - Use Deployer strategy (equivalent to `--strategy=deployer`)
- `--strategy=` - Deployment strategy: `native` (default) or `deployer`
- `--deployer-config=` - Path to custom `deploy.php` or `deploy.yaml`
**Example:**
```bash
warden deploy
warden deploy --deployer
```
#### Symfony: `warden upgrade`
Upgrade Symfony framework to a specified version.
**Options:**
- `--version=` - Target version to upgrade to (required)
- `--dry-run` - Show what would be done without making changes
**Example:**
```bash
warden upgrade --version=7.0
warden upgrade --version=6.4 --dry-run
```
### WordPress Commands
#### WordPress: `warden bootstrap`
Initialize WordPress environment with complete installation.
**Clone Options:**
- `-c, --clone` - Clone project from remote (source + DB)
- `--code-only` - With --clone: skip DB sync
**Install Options:**
- `--fresh` - Download fresh WordPress installation
- `--fix-deps` - Auto-fix dependency versions
**Skip Options:**
- `--no-db` - Skip database import
- `--no-composer` - Skip composer install
- `--no-wp-install` - Skip WordPress installation wizard
- `--no-stream-db` - Use intermediate dump file instead of streaming
- `--no-noise` - Exclude noise tables (logs/cache/indexes) in DB sync during clone
- `--no-pii` - Exclude PII/sensitive data from DB sync during clone
**Other Options:**
- `-e, --environment=` - Source environment (staging, prod, dev). Default: staging
- `--db-dump=` - Use specific local database dump file for import
- `-y, --yes` - Non-interactive mode
**Example:**
```bash
warden bootstrap # Standard bootstrap
warden bootstrap -c -e prod # Clone from prod
warden bootstrap --fresh # Download fresh WordPress
```
**Note:** With `--fresh`, WordPress will be downloaded, wp-config.php created, and the site installed with admin credentials displayed.
#### WordPress: `warden db-dump`
Dump database from a remote WordPress environment.
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Specific environment (local, dev, staging, prod). Default: local
- `-f, --file=` - Output file path
- `-N, --no-noise` - Skip noise tables (logs, cache, indexes)
- `-S, --no-pii` - Exclude sensitive data from the dump
- `--local` - Download remote dump to local machine (default: store on remote at `~/backup/`)
**Example:**
```bash
warden db-dump -e dev --local
warden db-dump --file=prod-backup.sql.gz -e prod
```
#### WordPress: `warden db-import`
Import database dump into WordPress.
**Options:**
- `-h, --help` - Display help menu
- `-f, --file=` - Path to existing database dump file (can be gzipped)
- `--stream-db` - Stream database directly from remote environment (no local file)
- `-e, --environment=` - Remote environment to stream from (used with `--stream-db`)
**Example:**
```bash
warden db-import --file=backup.sql.gz
warden db-import --stream-db -e staging
```
**Note:** After import, use WP-CLI to search-replace URLs if needed:
```bash
warden env exec php-fpm wp search-replace 'old-domain.com' 'app.test.test'
```
#### WordPress: `warden open`
Open WordPress services (local or remote).
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Specific environment (local, dev, staging, prod). Default: local
- `-a, --xdg-open` - Automatically open in browser/client
**Arguments:** `db`, `shell`, `sftp`, `admin`, `elasticsearch`
**Example:**
```bash
warden open db
warden open -e staging admin
```
#### WordPress: `warden deploy`
Deploy WordPress locally. Supports native strategy and Deployer.
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment=` - Environment to deploy to. Default: local
- `-o, --only-static` - Deploy static assets only (flush cache) and run hooks
- `--deployer` - Use Deployer strategy (equivalent to `--strategy=deployer`)
- `--strategy=` - Deployment strategy: `native` (default) or `deployer`
- `--deployer-config=` - Path to custom `deploy.php` or `deploy.yaml`
**Example:**
```bash
warden deploy
warden deploy --deployer
```
#### WordPress: `warden set-config`
Update WordPress configuration for Warden environment.
**Example:**
```bash
warden set-config
```
#### WordPress: `warden upgrade`
Upgrade WordPress core to a specified version.
**Options:**
- `--version=` - Target version to upgrade to (required)
- `--dry-run` - Show what would be done without making changes
**Example:**
```bash
warden upgrade --version=6.5
warden upgrade --version=6.4.3 --dry-run
```
### Global Commands
#### `warden self-update`
Update both **Warden Core** and these **Custom Commands** to the latest versions. It also applies necessary patches to Warden to ensure compatibility.
**Options:**
- `-f, --force`: Force update, overwriting local changes (uncommitted files).
- `--dry-run`: Simulate the update process without making changes.
**Example:**
```bash
warden self-update
warden self-update --dry-run
warden self-update --force
```
#### `warden setup-remotes`
Interactive wizard to configure remote environment connection details (Dev, Staging) in your `.env` file.
**Features:**
- Interactive prompts for Host, User, Port, and Path.
- Auto-validation of SSH connectivity.
- Updates/Creates `.env` entries safely.
**Example:**
```bash
warden setup-remotes
warden setup-remotes --help
```
#### `warden remote-exec`
Run arbitrary commands on a remote environment via SSH.
**Options:**
- `-h, --help` - Display help menu
- `-e, --environment` - Remote environment to execute on (default: `staging`)
- `-v, --verbose` - Print the command execution details for debugging
**Example:**
```bash
# Run command on staging (default)
warden remote-exec bin/magento cache:flush
# Run command on prod
warden remote-exec -e prod bin/magento indexer:reindex
```
## Adding New Environment Support
To add support for a new framework (e.g., Drupal):
1. **Create the directory:**
```bash
mkdir -p ~/.warden/commands/env-adapters/symfony
```
2. **Create command files:**
```bash
touch ~/.warden/commands/env-adapters/symfony/bootstrap.cmd
touch ~/.warden/commands/env-adapters/symfony/set-config.cmd
# ... other commands
```
3. **Implement the logic:**
```bash
#!/usr/bin/env bash
# Don't include shebang - file will be sourced
:: Installing Symfony
warden env exec php-fpm composer install
# ... Symfony-specific logic
```
4. **Create help files (optional):**
```bash
touch ~/.warden/commands/env-adapters/symfony/bootstrap.help
```
5. **Make executable:**
```bash
chmod +x ~/.warden/commands/env-adapters/symfony/*.cmd
```
The commands will automatically be available when `WARDEN_ENV_TYPE=symfony` is set in `.env`.
## Configuration
Custom commands read environment variables from the project's `.env` file:
```bash
# Required
WARDEN_ENV_NAME=myproject
WARDEN_ENV_TYPE=magento2 # or laravel, wordpress, symfony
# Optional (framework-specific)
TRAEFIK_DOMAIN=myproject.test
TRAEFIK_SUBDOMAIN=app
# Magento 2 specific
PHP_VERSION=8.2
COMPOSER_VERSION=2
MYSQL_DISTRIBUTION=mysql
MYSQL_DISTRIBUTION_VERSION=8.0
# Laravel specific
DB_CONNECTION=mysql
DB_HOST=db
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=laravel
```
## Troubleshooting
### Commands not found
```bash
# Ensure commands are executable
chmod +x ~/.warden/commands/*.cmd
chmod +x ~/.warden/commands/env-adapters/*/*.cmd
```
### Wrong environment commands loading
```bash
# Check .env file has correct WARDEN_ENV_TYPE
cat .env | grep WARDEN_ENV_TYPE
```
### Permission issues
```bash
# Fix ownership
chown -R $(whoami):$(whoami) ~/.warden/commands
```
## Testing
This project includes a comprehensive testing suite (Unit & Integration) based on Docker. It simulates multiple environments (`-local`, `-dev`, `-staging`) to verify the `warden` custom commands across different frameworks.
Detailed instructions can be found in [tests/README.md](tests/README.md).
### Quick Start
```bash
# Run all tests for Magento 2 (Unit + Integration)
./tests/run-tests.sh magento2
# Run only unit tests
./tests/run-tests.sh magento2 --unit-only
```
The runner will automatically:
1. Detect container IPs for dynamic environments.
2. Isolate the SSH environment to prevent conflicts with your host's ssh-agent.
3. Distribute safe test keys between containers.
4. Execute all test suites (files, media, db, custom paths, R2R, error handling).
## Contributing
1. Create a feature branch
2. Make your changes
3. Test with different environment types
4. Submit a pull request
## License
GNU General Public License v3.0