Laravel Setup Script to craft new Laravel 4.1 (has drop down support for Laravel 4.0.x as well) application and optionally install a suite of commonly used developer tools. In addition, provides support for creating a new MySQL database as well as setting up a new git repository.
#!/bin/bash
# Current Version 0.0.9
# dont forget to create write permissions on this file
# 2013-12-20: 0.0.9
# - refactored .bowerrc to store in 'lib' instead of components
# 2013-12-16: 0.0.8
# - Updated Gruntfile.js and .jshint gist referece
# - Added lodash install
# 2013-12-15: 0.0.7
# - Added basic .jshintrc file to support jsHint service from Sublime Plugin
# - Updated Gruntfile.js and Package.json for refactored grunt workflow
# 2013-12-14: 0.0.6
# - Updated to work with release version of Laravel 4.1.x (bootstrap/start.php)
# - Updated version of Way/Generators to use 1.1.* instead of dev-master to fix errors with Laravel 4.1 release
# - Updated to use semver versioning
# - Removed clockwork (go head and bring that in if you want to separately)
# 2013-12-08: 0.0.5
# - Added application Todo file($appname.todo)
# 2013-12-08: 0.0.4
# - Added key:generate call (app.php)
# - Added ctags call
# - Added setting timezone (app.php)
# - Added update database password (database.php)
# - Added .bowerrc file (stored public/components)
# - Added bower install bootstrap (pulls in jquery as depedency)
# - Added support for supplying appname as paramater to script
# 2013-12-06: 0.0.3
# - Refactored to use new laravel.phar command, replacing call to composer create-project
# 2013-12-04: 0.0.2
# - Added Faker package
# - Updated to use Laravel 4.1
# - Removed initial question about setting up new Laravel app, why else call the script
# - Add colors ;-)
# 2013-11-28: 0.0.1
# - Initial Release
# - Make sure gsed is installed if using OSX (install via Homebrew)
# $ brew install gnu-sed
# Colors
ESC_SEQ="\x1b["
COL_RESET=$ESC_SEQ"39;49;00m"
COL_RED=$ESC_SEQ"31;01m"
COL_GREEN=$ESC_SEQ"32;01m"
COL_LIGHTGREEN=$ESC_SEQ"92;01m"
COL_YELLOW=$ESC_SEQ"33;01m"
COL_BLUE=$ESC_SEQ"34;01m"
COL_MAGENTA=$ESC_SEQ"35;01m"
COL_CYAN=$ESC_SEQ"36;01m"
COL_PURPLE=$ESC_SEQ"35;01m"
YN_PROMPT=$COL_RESET"["$COL_YELLOW"Y,n"$COL_RESET"]?"
appname=''
# Get appname if supplied as parameter
appname=$1
# Intial Setup
echo -e "\n$COL_PURPLE Configuring New Laravel 4.1 Application...\n$COL_RESET"
# Create new laravel Project
if [[ $appname == '' ]]
then
echo -e -n "$COL_BLUE What is the name of the app? $COL_RESET"
read appname
echo -e "\n"
fi
# --- Laravel 4.0 Support ---
# composer create-project laravel/laravel $appname
# --- Laravel 4.1 Support ---
# use new laravel.phar command to 'craft' new application
# maintained name of 'laravel.phar' to avoid conflict with existing alias named 'laravel'
# stored in '/usr/local/bin/'
laravel.phar new $appname
cd $appname
# update application key (currently not done by laravel.phar)
php artisan key:generate
# create customized .bowerrc file (may be used by dev tools)
echo '{
"directory": "public/lib",
"json": "bower.json"
}' > .bowerrc
# create application todo file
echo "$appname Todos:" > $appname.todo
# set local timezone
gsed -i "s/'timezone' => 'UTC',/'timezone' => 'America\/Los_Angeles',/g" app/config/app.php
# Install and Configure Way/Generators Package
echo -e "\n"
echo -e -n "$COL_BLUE Do you want to add Common Development Libraries to $COL_YELLOW$appname$COL_RESET $YN_PROMPT "
read -e devtools
if [[ $devtools == "Y" ]]
then
echo -e "-- Adding $COL_GREEN Way/Generators, Darsain/Console, ChromePhp, PHPUnit$COL_RESET and$COL_GREEN Faker$COL_RESET Libraries to $COL_YELLOW$appname$COL_RESET"
gsed -i '8 a\ \t"require-dev" : { \n \t\t"way/generators": "1.1.*", \n \t\t"phpunit/phpunit": "3.7.*", \n \t\t"darsain/laravel-console": "dev-master", \n \t\t"ccampbell/chromephp": "dev-master", \n \t\t"fzaninotto/faker": "dev-master" \n\t},' composer.json
gsed -i '22 a\ \t\t\t"vendor/ccampbell/chromephp/ChromePhp.php",' composer.json
gsed -i "109 a\ \t\t'Way\\\Generators\\\GeneratorsServiceProvider'," app/config/app.php
gsed -i "110 a\ \t\t'Darsain\\\Console\\\ConsoleServiceProvider'," app/config/app.php
# gsed -i "111 a\ \t\t'Clockwork\\\Support\\\Laravel\\\ClockworkServiceProvider'," app/config/app.php
echo -e "\n$COL_PURPLE Performing Composer Update with new dependencies...\n$COL_RESET"
composer update
echo -e "-- Adding $COL_GREEN Twitter Bootstrap and jQuery$COL_RESET"
bower install bootstrap lodash
echo -e "-- $COL_GREEN Updating CTags... $COL_RESET"
ctags -R -f .tags
echo "\n"
fi
wget https://gist.github.com/mikeerickson/7975294/raw/be46c66f9bcf83c5770f6d59a1b6070ecebf6279/.jshintrc
# publish console assets
php artisan asset:publish
# Update app/bootstrap/start.php with env function
echo -e -n "$COL_BLUE Setup Development Environment $YN_PROMPT "
read -e development
if [[ $development == "Y" ]]
then
gsed -i -e'27,31d' bootstrap/start.php
gsed -i "26 a\ \$env = \$app->detectEnvironment(function() { return getenv('ENV') ?: 'development'; });" bootstrap/start.php
fi
# Pull in grunt workflow
echo -e -n "$COL_BLUE Would you like to use Grunt Workflow (Node.js must be installed) $YN_PROMPT "
read -e useGrunt
if [[ $useGrunt == "Y" ]]
then
wget https://gist.github.com/mikeerickson/7921915/raw/05e8c3f41663d3518f7af7f99958b680be0e0a8e/Gruntfile.js
wget https://gist.github.com/mikeerickson/7921972/raw/7628316347c26ea239067310cb2deb111f747e6c/package.json
sudo npm install grunt grunt-contrib-less grunt-contrib-watch grunt-contrib-uglify grunt-contrib-cssmin grunt-contrib-jshint grunt-phpunit
clear
fi
# Create mysql database
echo -e -n "$COL_BLUE Does you app need a database $YN_PROMPT "
read -e needdb
if [[ $needdb == 'Y' ]]
then
echo -e -n "$COL_MAGENTA What is the name of the database for this app?$COL_RESET "
read -e database
echo -e -n "$COL_MAGENTA Would you like to create database in MySQL $YN_PROMPT "
read -e createdb
if [[ $createdb == 'Y' ]]
then
echo "-- Creating MySQL database"
mysql -uroot -p -e "CREATE DATABASE \`$DATABASE\`"
fi
echo -e "-- Updating database configuration file\n"
gsed -i "s/'database' => 'database',/'database' => '$database',/g" app/config/database.php
gsed -i "s/'password' => '',/'password' => 'root',/g" app/config/database.php
fi
echo -e -n "$COL_BLUE Do you need a users table $YN_PROMPT "
read -e userstable
if [[ $userstable == 'Y' ]]
then
echo "-- Creating Users Table"
php artisan generate:migration create_users_table --fields="username:string:unique, email:string:unique, password:string"
echo "-- Migrating the database"
php artisan migrate
fi
echo -e -n "$COL_BLUE Would you like to create a Git Repository $YN_PROMPT "
read -e git
if [[ $git == 'Y' ]]
then
echo "-- Initializing Git"
git init
git add .
git commit -m "Initial Commit"
echo -e -n "$COL_BLUE Would you like to add this Repo to Github $YN_PROMPT "
read -e github
if [[ $github == 'Y' ]]
then
echo -e -n "$COL_BLUE What is your github username?$COL_RESET "
read -e githubUsername
curl -u "$githubUsername" https://api.github.com/user/repos -d "{\"name\":\"$appname\"}"
git remote add origin git@github.com:$githubUsername/$appname.git
git push origin master
fi
fi
echo -e "\n $COL_PURPLE Setup Complete!\n $COL_RESET"