As developers, we often perform repetitive tasks that could be automated to save time and reduce the risk of human error.
In this blog post, we'll explore how to automate a series of Laravel tasks using a JSON-based task runner. We'll cover pulling from the main branch, updating Composer dependencies, running migrations, and starting the Laravel application.
Why Automate Tasks?
- Consistency: Ensures tasks are performed the same way every time.
- Efficiency: Saves time by reducing manual work.
- Error Reduction: Minimizes the risk of human error.
Setting Up the Task Runner
To get started, we'll create a tasks.json
file that defines the tasks we want to automate. Then, we'll write a shell script to read and execute these tasks.
- Define Tasks in
tasks.json
Create a tasks.json
file in your project directory with the following content:
{
"version": "2.0.0",
"tasks": {
"pull-main": {
"command": "git pull origin main",
"args": [],
"type": "shell",
"label": "Pull from main branch"
},
"composer-update": {
"command": "composer update",
"args": [],
"type": "shell",
"label": "Update Composer dependencies"
},
"migrate": {
"command": "php artisan migrate",
"args": [],
"type": "shell",
"label": "Run migrations"
},
"start-app": {
"command": "php artisan serve",
"args": [],
"type": "shell",
"label": "Start Laravel application"
}
}
}
This JSON file defines four tasks: pulling from the main branch, updating Composer dependencies, running migrations, and starting the Laravel application.
- Create the Task Runner Script
Next, create a shell script named run-tasks.sh
to read and execute the tasks from tasks.json
:
#!/bin/bash
# Read tasks.json
TASKS=$(jq -c '.tasks[]' tasks.json)
for TASK in $TASKS; do
LABEL=$(echo $TASK | jq -r '.label')
COMMAND=$(echo $TASK | jq -r '.command')
echo "Running: $LABEL"
eval $COMMAND
if [ $? -ne 0 ]; then
echo "Task failed: $LABEL"
exit 1
fi
done
echo "All tasks completed successfully."
This script uses jq
, a lightweight and flexible command-line JSON processor, to parse the tasks.json
file and execute each task sequentially.
- Install
jq
Ensure jq
is installed on your system. On Ubuntu, you can install it with:
sudo apt-get install jq
- Make the Script Executable and Run It
Make the run-tasks.sh
script executable and run it:
chmod +x run-tasks.sh
./run-tasks.sh
The script will sequentially execute the tasks defined in the tasks.json
file. If any task fails, the script will stop and display an error message.
Benefits of This Approach
- Modularity: Tasks are defined in a separate JSON file, making it easy to add, remove, or modify tasks.
- Simplicity: The shell script is straightforward to understand.
- Reusability: This setup can be reused for different projects with minimal changes.
Conclusion
Automating repetitive tasks in your Laravel project can save time, ensure consistency, and reduce the risk of errors. By defining tasks in a JSON file and using a simple shell script to execute them, you can streamline your workflow and focus on what really matters: building great applications.
Share your thoughts: How do you automate tasks in your development workflow?
Happy coding!