Skip to content

Instantly share code, notes, and snippets.

@seanr
Created May 16, 2017 13:57
Show Gist options
  • Save seanr/779895e2f946d712007ada720491f103 to your computer and use it in GitHub Desktop.
Save seanr/779895e2f946d712007ada720491f103 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
# Checkout a local branch and build a Pantheon multi-dev environment from it.
set -e
# Load variables.
source "$(dirname "$0")/_vars"
# Clean up the build.
cleanup() {
if [[ -d ${RELEASE_DIRECTORY} && ${RELEASE_DIRECTORY} == *"pantheon"* && -d ${CURRENT_DIRECTORY} && ! -z ${GIT_CURRENT_BRANCH} ]]; then
rm -rf "${RELEASE_DIRECTORY}"
cd "${CURRENT_DIRECTORY}"
git checkout --quiet "${GIT_CURRENT_BRANCH}"
fi
}
# Script Usage
usage() {
echo "Build a Pantheon multi-dev environment from a local repo BRANCH_NAME"
echo " "
echo "./scripts/docker/multidev-create BRANCH_NAME"
echo " "
}
BRANCH_NAME="$1"
if [[ -z $BRANCH_NAME ]]; then
usage
exit 1
else
HASH=$(git rev-parse --verify "$BRANCH_NAME" 2> /dev/null || true)
if [ ! -n "$HASH" ]; then
echo -e "${COLOR_ERROR}The local branch $BRANCH_NAME could not be found${COLOR_RESET}"
exit 1
else
# @TODO: Add option for cloned environment.
PANTHEON_SITE=attn
CLONED_ENVIRONMENT="$PANTHEON_SITE.live"
MULTIDEV_LIMIT=10
MULTIDEV_SITE_COUNT=$("${SCRIPTS_DIRECTORY}/terminus" multidev:list --format=string "$PANTHEON_SITE" | wc -l | xargs)
if [ "$MULTIDEV_SITE_COUNT" -ge "$MULTIDEV_LIMIT" ]; then
echo -e "${COLOR_ERROR}The limit ($MULTIDEV_LIMIT) of multidev sites has been hit. ${COLOR_RESET}"
"${SCRIPTS_DIRECTORY}/terminus" multidev:list "$PANTHEON_SITE"
exit 1
fi
echo -e "${COLOR_HILIGHT}Creating Pantheon repo branch for multi-dev deployment...${COLOR_RESET}"
if [[ ! ${#BRANCH_NAME} -lt 12 || ${BRANCH_NAME} =~ [^a-zA-Z0-9-] ]]; then
PANTHEON_BRANCH=${BRANCH_NAME:0:11}
PANTHEON_BRANCH=${PANTHEON_BRANCH//[^a-zA-Z0-9-]/-}
echo -e "${COLOR_WARNING}NOTE: The envionment will be named ${PANTHEON_BRANCH} to fit Pantheon's multi-dev requirements ${COLOR_RESET}"
else
PANTHEON_BRANCH=${BRANCH_NAME}
fi
# Build the new envionment locally
echo -e "${COLOR_HILIGHT}Checking out ${BRANCH_NAME} for build...${COLOR_RESET}"
GIT_CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
CURRENT_DIRECTORY=$(pwd)
git checkout --quiet "${BRANCH_NAME}"
RELEASE_DIRECTORY=${BUILD_DIRECTORY_NAME}-pantheon-${PANTHEON_BRANCH}
if [ -d "${RELEASE_DIRECTORY}" ]; then
rm -rf "${RELEASE_DIRECTORY}"
fi
mkdir -p "${RELEASE_DIRECTORY}"
"${SCRIPTS_DIRECTORY}/build" -c -s "${REPOSITORY_DIRECTORY}" -o "${REPOSITORY_DIRECTORY}/${RELEASE_DIRECTORY}"
cd "${RELEASE_DIRECTORY}" || exit
git init
git remote add deploy "${DEPLOY_REPOSITORY_URL}"
git checkout --quiet -b "${PANTHEON_BRANCH}"
git add --force .
git commit --message "Push [${BRANCH_NAME}] multi-dev build branch" &> /dev/null
git push deploy "${PANTHEON_BRANCH}" --set-upstream --force
cd "${CURRENT_DIRECTORY}" || exit
# Build the new multi-dev envionment and clean up the build.
echo -e "${COLOR_HILIGHT}Building Pantheon multi-dev environment from $CLONED_ENVIRONMENT...${COLOR_RESET}"
"${SCRIPTS_DIRECTORY}/terminus" -e multidev:create ${CLONED_ENVIRONMENT} "${PANTHEON_BRANCH}" || true
echo -e "${COLOR_SUCCESS}Pantheon multi-dev environment ${PANTHEON_BRANCH}-${PANTHEON_SITE}.pantheonsite.io created.${COLOR_RESET}"
cleanup
exit 0
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment