Skip to content

Instantly share code, notes, and snippets.

@zeraphie
Created September 27, 2016 11:06
Show Gist options
  • Save zeraphie/5b04f2d79549c195f8bf335405d364b2 to your computer and use it in GitHub Desktop.
Save zeraphie/5b04f2d79549c195f8bf335405d364b2 to your computer and use it in GitHub Desktop.
A simplified interaction to run gulp and git to deploy from a development site to gtilab/staging/live
#!/bin/bash
set -o nounset -o pipefail -o errexit
cd "$(dirname "$0")/../.."
################################################################################
# Master one liner interaction with deploying files
#
# Build the assets, then add and commit the files to git
# Then uploads the current branch to the live site, staging site and to GitLab
#
# USAGE:
# Default usage - ./scripts/deploy/build.sh
#
# This will add and commit files to git with the message
# Committing changes, and then push the changes to gitlab and
# staging
#
# Remove push - ./scripts/deploy/build.sh -g -s
#
# There are two flags with which you can stop pushing to
# their respective remotes
#
# -g means don't push to gitlab
# -s means don't push to staging
#
# Deploy to live - ./scripts/deploy/build.sh -l
#
# This is the same behaviour as the default, except it will
# also push to the live site
#
# Build assets - ./scripts/deploy/build.sh -b
#
# This is the same behaviour as the default, except it will
# also run the builder (normally gulp) before adding the files
# to git
#
# Custom Message - ./scripts/deploy/build.sh -m "Custom message"
#
# This is the same behaviour as the default, except it will
# also add a custom git commit message instead of the default
#
# Note: all these flags are combinable, example below with every flag
#
# ./scripts/deploy/build.sh -b -m "Custom message" -gsl
#
# Note: If dotfiles are installed, you can also run a command instead of
#
# ./scripts/deploy/build.sh
#
# which is as follows:
#
# t deploy build
#
#
################################################################################
message="Committing changes"
build="false"
gitlab="true"
staging="true"
live="false"
colour="\e[32m" # Green
reset="\e[0m"
# Add remotes if they don't already exist
source "scripts/deploy/_config.sh"
gitlaburl="($(git config remote.origin.url))"
stagingurl="($(git config remote.staging.url))"
liveurl="($(git config remote.live.url))"
# Get all the flags for the script,
# loop through them and then do override the necessary variables
while getopts "bm:gslc:" flag; do
case "${flag}" in
b) build="true" ;;
m) message="${OPTARG}" ;;
g) gitlab="false" ;;
s) staging="false" ;;
l) live="true" ;;
c) colour="${OPTARG}" ;;
*) error "Unexpected option ${flag}" ;;
esac
done
#---------------------------------------
# Run gulp build
#---------------------------------------
if [ ! -z "$build" -a "$build" != "false" ]; then
gulp build
fi
#---------------------------------------
# Add the files to git
#---------------------------------------
git add .
#---------------------------------------
# Commit the files to git
#---------------------------------------
git commit -m "$message"
#-------------------------------------------------------------------------------
# Deploy the changes to gitlab, staging and live depending on flags
#
# Defaults to all
#-------------------------------------------------------------------------------
#---------------------------------------
# GitLab
#---------------------------------------
if [ ! -z "$gitlab" -a "$gitlab" != "false" ]; then
echo -en "${colour}Deploying to origin ${gitlaburl}...${reset}\n"
git push origin HEAD
echo
fi
#---------------------------------------
# Staging
#---------------------------------------
if [ ! -z "$staging" -a "$staging" != "false" ]; then
echo -en "${colour}Deploying to staging ${stagingurl}...${reset}\n"
git push staging HEAD
fi
#---------------------------------------
# Live
#---------------------------------------
if [ ! -z "$live" -a "$live" != "false" ]; then
echo -en "${colour}Deploying to live ${liveurl}...${reset}\n"
git push live HEAD
fi
@zeraphie
Copy link
Author

This is the contents of the _config.sh file

git config remote.origin.url  >/dev/null || git remote add origin  <origingitrepo>
git config remote.staging.url >/dev/null || git remote add staging <staginggitrepo>
git config remote.live.url    >/dev/null || git remote add live    <livegitrepo>

Where <origingitrepo> <staginggitrepo> and <livegitrepo> are the remote urls for the git repo in the corresponding place

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment