Browse Source

Release v1.1.0: Massive KISS Refactoring & Documentation Overhaul

michelphp 1 week ago
parent
commit
8c34460cd3
1 changed files with 139 additions and 436 deletions
  1. 139 436
      README.md

+ 139 - 436
README.md

@@ -1,436 +1,139 @@
-
-# WF - Workflow Automation
-
-**WF** is a minimalist and procedural language designed to simplify the automation of common tasks, such as building, installing, or deploying applications.
-
-
-## 📖 Documentation
-- [English](#english)
-- [Français](#français)
-
-## English
-
-
-**WF** is a minimalist and procedural language designed to simplify the automation of common tasks, such as building, installing, or deploying applications.
-
-The `wf` binary is a command-line interface that automatically detects `.wf` files in the current directory. These files are structured into **sections**, containing sequentially organized commands to execute workflows efficiently and reproducibly.
-
-With WF, you can centralize and standardize your automation processes while maintaining a clear and accessible syntax.
-
----
-
-## Structure of a `.wf` File
-
-A `.wf` file is organized into **sections**, each corresponding to a specific step in your workflow. Each section contains a list of commands to execute in a precise order.
-
-### Basic Example
-```wf
-[section-name] # Comment: Description of the section
-SET VARIABLE=value
-run command
-```
-
----
-
-## Example of a `.wf` File
-
-### **Example 1: Deploying a Symfony Application**
-
-```wf
-[prepare-env] # Prepare environment variables and system clock
-SET SYMFONY_CONSOLE=php bin/console
-sync_time
-echo "Environment preparation complete"
-
-[install-dependencies] # Install dependencies
-run composer install --no-dev --optimize-autoloader
-run ${SYMFONY_CONSOLE} doctrine:database:create --if-not-exists
-run ${SYMFONY_CONSOLE} doctrine:migrations:migrate --no-interaction
-echo "Dependencies installed and database is up to date"
-
-[build-assets] # Build and optimize assets
-run npm install
-run npm run build
-run ${SYMFONY_CONSOLE} assets:install --symlink --relative
-echo "Assets built and installed"
-
-[set-permissions] # Set required permissions
-set_permissions var/cache 775
-set_permissions var/log 775
-echo "Permissions set"
-
-[deploy] # Full deployment workflow
-wf prepare-env
-wf install-dependencies
-wf build-assets
-wf set-permissions
-notify_success "Symfony application deployed successfully"
-```
-
-### **Example 2: Deploying a Dockerized Application**
-
-```wf
-[prepare-docker] # Prepare Docker environment
-SET DOCKER_COMPOSE=docker compose
-sync_time
-echo "Docker environment prepared"
-
-[build-containers] # Build Docker containers
-run ${DOCKER_COMPOSE} build
-echo "Docker containers built"
-
-[start-containers] # Start Docker containers
-run ${DOCKER_COMPOSE} up -d
-echo "Docker containers started"
-
-[cleanup] # Clean up old images
-run ${DOCKER_COMPOSE} prune --force
-echo "Old Docker images removed"
-
-[deploy] # Full deployment workflow
-wf prepare-docker
-wf build-containers
-wf start-containers
-wf cleanup
-notify_success "Dockerized application deployed successfully"
-```
-
----
-
-### **Key Features Across Examples**
-
-1. **Modularity with Sections:** Each section corresponds to a logical step in the deployment process.
-2. **Reusability:** Sections like `prepare-env` or `set-permissions` can be reused in different projects.
-3. **Notifications:** Use `notify_success` or other notifications to indicate the completion or status of deployments.
-4. **Environment Variables:** Variables like `SYMFONY_CONSOLE` or `DOCKER_COMPOSE` simplify command reuse.
-5. **Simplicity:** The examples remain procedural and straightforward, aligning with the philosophy of WF.
-
----
-
-## Available Commands
-
-1. **`SET VARIABLE=value`**: Defines an environment variable to be used in commands.
-2. **`run command`**: Executes a system command or script.
-3. **`copy src dest`**: Copies a file or directory.
-4. **`sync_time`**: Synchronizes the system clock with a time server.
-5. **`set_permissions path mode`**: Changes the permissions of a file or directory.
-6. **`echo message`**: Prints a message to the standard output.
-7. **`exit`**: Immediately terminates the script execution with an exit code of `0`.
-8. **`touch file`**: Creates an empty file unless it already exists.
-9. **`mkdir folder`**: Creates a directory, including any missing parent directories.
-10. **`docker_compose command`**: Executes a `docker compose` or `docker-compose` command, depending on availability.
-11. **`wf workflow_name`**: Executes a workflow defined in the `.wf` file.
-12. **`notify message`**: Displays a generic notification.
-13. **`notify_success message`**: Displays a success notification.
-14. **`notify_error message`**: Displays an error notification.
-15. **`notify_warning message`**: Displays a warning notification.
-16. **`notify_info message`**: Displays an informational notification.
-
----
-
-## **How Does WF Work?**
-
-1. **Scanning `.wf` Files**:  
-   - When executed, `wf` scans the current directory and identifies all files with the `.wf` extension.
-   - Each `.wf` file is read, and all defined **sections** are collected.
-
-2. **Structure of Sections**:  
-   - Each `.wf` file is divided into **sections** marked by a section header, such as `[section-name]`.
-   - Sections contain commands to be executed in order.
-
-3. **Executing a Section**:  
-   - Once all sections from the `.wf` files are loaded, you can execute a specific section using the command:  
-     ```bash
-     wf section-name
-     ```
-   - WF will then execute all commands defined in that section.
-
----
-
-## **Example Usage**
-
-### Example `.wf` File
-```wf
-[docker-build] # Build Section: Build the application with Docker
-SET DOCKER_COMPOSE=docker compose exec -T app-gaia
-run ${DOCKER_COMPOSE} ./wf build
-
-[build] # Build Section: Build the application
-sync_time
-run php -v
-SET SYMFONY_CONSOLE=php bin/console
-copy .env .env.local
-run composer install --optimize-autoloader
-run ${SYMFONY_CONSOLE} doctrine:migrations:migrate --no-interaction
-```
-
-### Available Commands in This Example
-
-When the `wf` binary is executed, the sections are detected and listed as available commands.
-
-#### Example of Available Commands:
-```bash
-NAME:
-   wf - A new CLI application
-
-USAGE:
-   wf [global options] command [command options]
-
-COMMANDS:
-   build         Build Section: Build the application
-   docker-build  Build Section: Build the application with Docker
-   help, h       Shows a list of commands or help for one command
-
-GLOBAL OPTIONS:
-   --help, -h  show help
-```
-
----
-
-## **Executing a Section**
-
-1. **List Available Sections**  
-   To display all available sections in the `.wf` files in the current directory:
-   ```bash
-   wf --help
-   ```
-
-2. **Execute a Specific Section**  
-   To execute a specific section, simply use its name as a command:
-   ```bash
-   wf docker-build
-   ```
-   This will execute all commands defined in the `[docker-build]` section.
-
----
-
-## **Advantages of WF**
-
-- **Simple to Use**: No need to configure a complex tool like Makefile; everything is centralized in `.wf` files.
-- **Modular**: Divide your workflows into multiple reusable sections.
-- **Flexible**: Easily add your own commands and variables.
-
-With `wf`, you can efficiently automate your build, installation, or deployment tasks by unifying everything in a simple and readable tool.
-
-
-## License
-
-WF is licensed under the **GNU Affero General Public License v3.0 (AGPL-3.0)**.  
-
-### Key Terms:
-- You are free to use this tool in any project or environment, including commercial ones.
-- Any modifications or improvements to this software must be made public under the same license.
-- This tool cannot be integrated into proprietary software or systems without respecting the terms of this license.
-
-For the full license text, see the LICENSE file.
-
-
-## Français
-
-**WF** est un langage minimaliste et procédural conçu pour simplifier l'automatisation des tâches courantes, telles que la construction, l'installation ou le déploiement d'applications.
-
-Le binaire `wf` est une interface en ligne de commande qui détecte automatiquement les fichiers `.wf` présents dans le répertoire courant. Ces fichiers sont structurés en **sections**, contenant des commandes organisées de manière séquentielle pour exécuter des workflows de manière efficace et reproductible.
-
-Avec WF, vous pouvez centraliser et standardiser vos processus d'automatisation tout en gardant une syntaxe claire et accessible.
-
----
-
-## Structure d'un Fichier `.wf`
-
-Un fichier `.wf` est organisé en **sections**, chacune correspondant à une étape spécifique de votre workflow. Chaque section contient une liste de commandes à exécuter dans un ordre précis.
-
-### Exemple Basique
-```wf
-[section-name] # Commentaire : Description de la section
-SET VARIABLE=value
-run command
-```
-
-
-## Exemple de fichier `.wf`
-
-### **Exemple 1 : Déploiement d'une application Symfony**
-
-```wf
-[prepare-env] # Préparation des variables d'environnement et de l'horloge système
-SET SYMFONY_CONSOLE=php bin/console
-sync_time
-echo "Préparation de l'environnement terminée"
-
-[install-dependencies] # Installation des dépendances
-run composer install --no-dev --optimize-autoloader
-run ${SYMFONY_CONSOLE} doctrine:database:create --if-not-exists
-run ${SYMFONY_CONSOLE} doctrine:migrations:migrate --no-interaction
-echo "Les dépendances sont installées et la base de données est à jour"
-
-[build-assets] # Construction et optimisation des assets
-run npm install
-run npm run build
-run ${SYMFONY_CONSOLE} assets:install --symlink --relative
-echo "Les assets ont été construits et installés"
-
-[set-permissions] # Définition des permissions nécessaires
-set_permissions var/cache 775
-set_permissions var/log 775
-echo "Les permissions ont été configurées"
-
-[deploy] # Workflow complet de déploiement
-wf prepare-env
-wf install-dependencies
-wf build-assets
-wf set-permissions
-notify_success "Application Symfony déployée avec succès"
-```
-
-
-### **Exemple 2 : Déploiement d'une application Dockerisée**
-
-```wf
-[prepare-docker] # Préparation de l'environnement Docker
-SET DOCKER_COMPOSE=docker compose
-sync_time
-echo "Environnement Docker prêt"
-
-[build-containers] # Construction des conteneurs Docker
-run ${DOCKER_COMPOSE} build
-echo "Les conteneurs Docker ont été construits"
-
-[start-containers] # Démarrage des conteneurs Docker
-run ${DOCKER_COMPOSE} up -d
-echo "Les conteneurs Docker sont démarrés"
-
-[cleanup] # Nettoyage des anciennes images
-run ${DOCKER_COMPOSE} prune --force
-echo "Les anciennes images Docker ont été supprimées"
-
-[deploy] # Workflow complet de déploiement
-wf prepare-docker
-wf build-containers
-wf start-containers
-wf cleanup
-notify_success "Application Dockerisée déployée avec succès"
-```
-
----
-
-### **Principales caractéristiques des exemples**
-
-1. **Modularité avec les sections :** Chaque section correspond à une étape logique du processus de déploiement.
-2. **Réutilisabilité :** Des sections comme `prepare-env` ou `set-permissions` peuvent être réutilisées dans différents projets.
-3. **Notifications :** Utilisez `notify_success` ou d'autres notifications pour indiquer l'état ou la réussite des déploiements.
-4. **Variables d'environnement :** Des variables comme `SYMFONY_CONSOLE` ou `DOCKER_COMPOSE` simplifient la réutilisation des commandes.
-5. **Simplicité :** Les exemples restent procéduraux et simples, respectant la philosophie de WF.
-
-## Commandes Disponibles
-
-1. **`SET VARIABLE=value`** : Définit une variable d'environnement utilisée dans les commandes.
-2. **`run command`** : Exécute une commande système ou un script.
-3. **`copy src dest`** : Copie un fichier ou répertoire.
-4. **`sync_time`** : Synchronise l'horloge système avec un serveur de temps.
-5. **`set_permissions path mode`** : Change les permissions d'un fichier ou répertoire.
-6. **`echo message`** : Affiche un message sur la sortie standard.
-7. **`exit`** : Termine immédiatement l'exécution du script avec un code de sortie `0`.
-8. **`touch file`** : Crée un fichier vide, sauf s'il existe déjà.
-9. **`mkdir folder`** : Crée un répertoire, y compris les parents inexistants.
-10. **`docker_compose command`** : Exécute une commande `docker compose` ou `docker-compose`, selon ce qui est disponible.
-11. **`wf workflow_name`** : Exécute un workflow défini dans le fichier `.wf`.
-12. **`notify message`** : Affiche une notification générique.
-13. **`notify_success message`** : Affiche une notification de succès.
-14. **`notify_error message`** : Affiche une notification d'erreur.
-15. **`notify_warning message`** : Affiche une notification d'avertissement.
-16. **`notify_info message`** : Affiche une notification d'information.
-
-
-## **Comment Fonctionne WF ?**
-
-1. **Recherche des Fichiers `.wf` :**  
-   - Lors de l’exécution, `wf` scanne le répertoire courant et identifie tous les fichiers avec l'extension `.wf`.
-   - Chaque fichier `.wf` est lu, et toutes les **sections** définies sont collectées.
-
-2. **Structure des Sections :**  
-   - Chaque fichier `.wf` est divisé en **sections** délimitées par un en-tête de section, comme `[section-name]`.
-   - Les sections contiennent des commandes à exécuter dans l'ordre.
-
-3. **Exécution d'une Section :**  
-   - Une fois que toutes les sections des fichiers `.wf` ont été chargées, vous pouvez exécuter une section spécifique en utilisant la commande :  
-     ```bash
-     wf section-name
-     ```
-   - WF exécute alors toutes les commandes définies dans cette section.
-
----
-
-## **Exemple d'Utilisation**
-
-### Exemple de Fichier `.wf`
-```wf
-[docker-build] # Section Build : Build de l'application avec Docker
-SET DOCKER_COMPOSE=docker compose exec -T app-gaia
-run ${DOCKER_COMPOSE} ./wf build
-
-[build] # Section Build : Build de l'application
-sync_time
-run php -v
-SET SYMFONY_CONSOLE=php bin/console
-copy .env .env.local
-run composer install --optimize-autoloader
-run ${SYMFONY_CONSOLE} doctrine:migrations:migrate --no-interaction
-```
-
-### Commandes Disponibles dans Cet Exemple
-
-Lors de l'exécution du binaire `wf`, les sections sont détectées et listées comme des commandes disponibles.
-
-#### Exemple de Commandes Disponibles :
-```bash
-NAME:
-   wf - A new cli application
-
-USAGE:
-   wf [global options] command [command options]
-
-COMMANDS:
-   build         Section Build : Build de l'application
-   docker-build  Section Build : Build de l'application on Docker
-   help, h       Shows a list of commands or help for one command
-
-GLOBAL OPTIONS:
-   --help, -h  show help
-```
-
----
-
-## **Exécution d'une Section**
-
-1. **Lister les Sections Disponibles**  
-   Pour afficher toutes les sections disponibles dans les fichiers `.wf` du répertoire courant :
-   ```bash
-   wf --help
-   ```
-
-2. **Exécuter une Section**  
-   Pour exécuter une section spécifique, utilisez simplement son nom comme commande :
-   ```bash
-   wf docker-build
-   ```
-   Cela exécutera toutes les commandes définies dans la section `[docker-build]`.
-
-
-## **Avantages de WF**
-
-- **Simple à Utiliser :** Pas besoin de configurer un outil complexe comme Makefile, tout est centralisé dans des fichiers `.wf`.
-- **Modulaire :** Divisez vos workflows en plusieurs sections réutilisables.
-- **Flexible :** Ajoutez facilement vos propres commandes et variables.
-
-Avec `wf`, vous pouvez automatiser efficacement vos tâches de build, d’installation, ou de déploiement en unifiant tout dans un outil simple et lisible.
-
-## Licence
-
-WF est distribué sous la **GNU Affero General Public License v3.0 (AGPL-3.0)**.
-
-### Principaux termes :
-- Vous êtes libre d'utiliser cet outil dans tout projet ou environnement, y compris des projets commerciaux.
-- Toute modification ou amélioration de ce logiciel doit être rendue publique sous la même licence.
-- Cet outil ne peut pas être intégré dans des logiciels ou systèmes propriétaires sans respecter les termes de cette licence.
-
-Pour consulter le texte complet de la licence, veuillez vous référer au fichier LICENSE.
+# ⚡ WF - Minimalist Workflow Automation
+
+**WF** is a stupidly simple procedural language to automate your everyday tasks (build, install, deploy). 
+Write your workflows in `.wf` files. No complex syntax, no steep learning curve. Just simple, sequential commands.
+
+🌍 [English](#-english) | 🇫🇷 [Français](#-français)
+
+---
+
+## 🇬🇧 English
+
+### 🚀 Quick Start (with Sub-Workflows)
+
+WF shines when you split your tasks into logical blocks. Calling one workflow from another creates a beautiful, readable execution tree.
+
+1. **Create a `deploy.wf` file:**
+```wf
+[build] # Sub-workflow: Build the app
+echo "Building the application..."
+run npm install
+run npm run build
+sync_time
+
+[permissions] # Sub-workflow: Set correct rights
+echo "Setting permissions..."
+set_permissions dist/ 0777
+
+[deploy] # Main workflow
+echo "Starting deployment pipeline..."
+SET ENV=production
+wf build
+wf permissions
+notify_success "Deployment done!"
+```
+
+2. **Run the main workflow:**
+```bash
+wf deploy
+```
+*WF automatically parses all `.wf` files in the current folder, detects the sections, and executes them top-to-bottom. Sub-workflows (`wf build`) will be visually indented in your terminal like a tree.*
+
+### 🛠️ Built-in Commands vs System Commands
+
+WF comes with **native** cross-platform commands. If a command isn't native, you can simply use `run <command>` to execute it via your operating system's default shell!
+
+**Native Commands:**
+- `SET VAR=value` : Define an environment variable for the session
+- `wf <section>` : Call another workflow section (creates a visual tree 🌳)
+- `copy <src> <dst>` : Copy a file or directory
+- `mkdir <dir>` : Create a directory (and its parents)
+- `touch <file>` : Create an empty file
+- `set_permissions <path> <mode>` : Apply permissions (e.g., `0777`). Applied recursively for folders.
+- `sync_time` : Synchronize system clock
+- `echo <msg>` : Print a simple message
+- `docker_compose <cmd>` : Run Docker Compose (auto-detects `docker compose` or `docker-compose`)
+- `notify <msg>` : Standard OS notification
+- `notify_success <msg>` : Success OS notification
+- `notify_error <msg>` : Error OS notification
+- `notify_warning <msg>` : Warning OS notification
+- `notify_info <msg>` : Info OS notification
+- `exit` : Stop the workflow immediately
+
+**System Commands:**
+- `run <cmd>` : Execute ANY system command (e.g., `run composer install`, `run php bin/console`).
+
+### 🎯 Philosophy
+
+- **KISS (Keep It Simple, Stupid)**: Procedural, top-to-bottom execution. No complex logic.
+- **Beautiful Output**: Clean, tree-like execution logs for sub-workflows.
+- **Maintainable**: Understandable by any developer instantly. 
+
+---
+
+## 🇫🇷 Français
+
+### 🚀 Démarrage Rapide (avec Sous-Workflows)
+
+WF excelle lorsque vous divisez vos tâches en blocs logiques. Appeler un workflow depuis un autre crée un arbre d'exécution propre et lisible.
+
+1. **Créez un fichier `deploy.wf` :**
+```wf
+[build] # Sous-workflow : Build l'application
+echo "Construction de l'application..."
+run npm install
+run npm run build
+sync_time
+
+[permissions] # Sous-workflow : Gère les droits
+echo "Configuration des permissions..."
+set_permissions dist/ 0777
+
+[deploy] # Workflow principal
+echo "Lancement du pipeline de déploiement..."
+SET ENV=production
+wf build
+wf permissions
+notify_success "Déploiement terminé !"
+```
+
+2. **Exécutez le workflow principal :**
+```bash
+wf deploy
+```
+*WF analyse automatiquement tous les fichiers `.wf`, détecte les sections, et les exécute de haut en bas. Les sous-workflows (`wf build`) seront visuellement indentés dans votre terminal sous forme d'arborescence.*
+
+### 🛠️ Commandes Natives vs Commandes Système
+
+WF intègre des commandes **natives** multiplateformes. Si une commande n'est pas native, utilisez simplement `run <commande>` pour l'exécuter via le shell de votre système d'exploitation !
+
+**Commandes Natives :**
+- `SET VAR=value` : Définir une variable d'environnement pour la session
+- `wf <section>` : Appeler une autre section de workflow (crée un arbre visuel 🌳)
+- `copy <src> <dst>` : Copier un fichier ou dossier
+- `mkdir <dir>` : Créer un dossier (et ses parents)
+- `touch <file>` : Créer un fichier vide
+- `set_permissions <path> <mode>` : Appliquer des droits (ex: `0777`). Récursif pour les dossiers.
+- `sync_time` : Synchroniser l'horloge système
+- `echo <msg>` : Afficher un message simple
+- `docker_compose <cmd>` : Lancer Docker Compose (détecte `docker compose` ou `docker-compose`)
+- `notify <msg>` : Notification système standard
+- `notify_success <msg>` : Notification système de succès
+- `notify_error <msg>` : Notification système d'erreur
+- `notify_warning <msg>` : Notification système d'avertissement
+- `notify_info <msg>` : Notification système d'information
+- `exit` : Arrêter le workflow immédiatement
+
+**Commandes Système :**
+- `run <cmd>` : Exécuter N'IMPORTE QUELLE commande système (ex: `run composer install`, `run ls -la`).
+
+### 🎯 Philosophie
+
+- **KISS (Keep It Simple, Stupid)** : Procédural, exécution de haut en bas. Aucune logique complexe.
+- **Rendu Visuel** : Logs propres sous forme d'arborescence pour les sous-workflows.
+- **Maintenable** : Compréhensible par n'importe quel développeur instantanément.
+
+---
+
+## 📄 Licence
+**AGPL-3.0**. Free to use, modifications must be open-sourced under the same license.