Files
prelang_test/prelang-init
2014-02-27 23:58:57 +00:00

153 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
# ================================================
# SHELL->PRELANG->INIT ===========================
# ================================================
# ------------------------------------------------
# UTILITY ----------------------------------------
# ------------------------------------------------
_fatal_error() {
echo "fatal: $@"
exit 1
}
_command_exists() {
(command -v $1 >/dev/null 2>&1)
}
_require_command() {
if ( ! `_command_exists $1` ) ; then
_fatal_error "Prelang init script requires '$1' but it is not installed."
fi
}
_topic() {
echo "-----> $@"
}
_execute_sucessfully_or_exit() {
# Raw execution of the command
$@
# Check exit status
if [[ $? != 0 ]] ; then
_fatal_error "Command '$@' failed."
fi
}
_git_commit_all_with_message() {
git add .
git commit --all --message="$1" --author="Prelang Builder <builder@prelang.com>"
}
_git_push() {
# FIX: Make sure the user is on master
git push origin master
}
_prompt() {
echo -e -n "\033[1;32m"
echo -n $1" (y/n): "
echo -e -n '\033[0m'
read answer
if [[ $answer == "y" ]] ; then
return 0
fi
return 1
}
_sleep_and_open_rails_url() {
_rails_url="http://localhost:3000"
# FIX: Make a better way to check if the Rails server is running.
sleep 7
if [[ `uname` == "Darwin" ]] ; then
open $_rails_url
elif [[ `uname` == "Linux" ]] ; then
if ( `_command_exists xdg-open` ) ; then
xdg-open $_rails_url
fi
fi
}
_source_rvm_if_exists() {
# In case RVM already is sourced don't source it.
# FIX: Not sure this can happen since we're launching from a shebang script.
if ( ! `_command_exists $1` ) ; then
return 0
fi
# Source RVM if it exists
if [[ -f $HOME/.rvm/scripts/rvm ]] ; then
source $HOME/.rvm/scripts/rvm
fi
}
# ------------------------------------------------
# MAIN -------------------------------------------
# ------------------------------------------------
_source_rvm_if_exists
_require_command "git"
# FIX: Check for non-Prelang Builder commits
# Run "bundle install"
# --------------------
_require_command "bundle"
_topic "Running 'bundle install' to fetch and install required Ruby Gems"
_execute_sucessfully_or_exit bundle install
# FIX: Do we need this commit?
_git_commit_all_with_message "Executed 'bundle install' to fetch and install required Ruby Gems"
# Require "rake" for next few commands
_require_command "rake"
# Run "rake db:create"
# --------------------
_topic "Running 'rake db:create' to create a development database"
_execute_sucessfully_or_exit rake db:create
# Run "rake db:migrate"
# --------------------
_topic "Running 'rake db:migrate' to migrate to the proper database schema"
_execute_sucessfully_or_exit rake db:migrate
# Track schema.rb
_git_commit_all_with_message "Executed 'rake db:migrate' to migrate all generated migrations which created schema.rb"
# Clean up
# --------
#_prompt "Would you like to keep this script (./prelang-init) in your repository? This will allow you to run it later if you need to reinitialize your Rails project."
#if [[ $? != 0 ]] ; then
#_topic "Removing 'prelang-init' script"
#if ( ! test -f ./prelang-init ) ; then
#_fatal_error "'./prelang-init' does not exist."
#fi
#_execute_sucessfully_or_exit git rm ./prelang-init
#_git_commit_all_with_message "Removed 'prelang-init' script after successful execution"
#fi
# Push
# ----
_topic "Pushing git repository changes back to origin"
_git_push
# Rails Server
# ------------
_prompt "Would you like to start the Rails server and open your running Rails application in a browser?"
if [[ $? == 0 ]] ; then
_sleep_and_open_rails_url &
# FIX: Will this be using the correct Rails? RVM?
rails server
fi