144 lines
4.4 KiB
Bash
Executable File
144 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright 2016 Google Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
# Author: cheesy@google.com (Steve Hill)
|
|
#
|
|
# Build a mod_pagespeed release on a gcloud VM.
|
|
#
|
|
# You may want to set CLOUDSDK_COMPUTE_REGION and/or CLOUDSDK_CORE_PROJECT,
|
|
# or set your gcloud defaults befor running this:
|
|
# https://cloud.google.com/sdk/gcloud/reference/config/set
|
|
|
|
set -u
|
|
|
|
branch=master
|
|
delete_existing_machine=false
|
|
image_family=ubuntu-1204-lts
|
|
keep_machine=false
|
|
machine_name=
|
|
use_existing_machine=false
|
|
|
|
options="$(getopt --long build_branch:,centos,delete_existing_machine \
|
|
--long image_family:,machine_name:,use_existing_machine \
|
|
-o '' -- "$@")"
|
|
if [ $? -ne 0 ]; then
|
|
echo "Usage: $(basename "$0") [options] -- [build_release.sh options]" >&2
|
|
echo " --build_branch=<branch> mod_pagespeed branch to build" >&2
|
|
echo " --centos Shortcut for --image_family=centos-6" >&2
|
|
echo " --delete_existing_machine If the VM already exists, delete it" >&2
|
|
echo " --image_family=<family> Image family used to create VM" >&2
|
|
echo " See: gcloud compute images list" >&2
|
|
echo " --machine_name VM name to create" >&2
|
|
echo " --use_existing_machine Re-run build on exiting VM" >&2
|
|
exit 1
|
|
fi
|
|
|
|
set -e
|
|
eval set -- "$options"
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--build_branch) branch="$2"; shift 2 ;;
|
|
--centos) image_family="centos-6"; shift ;;
|
|
--delete_existing_machine) delete_existing_machine=true; shift ;;
|
|
--image_family) image_family="$2"; shift 2 ;;
|
|
--keep_machine) keep_machine=true; shift ;;
|
|
--machine_name) machine_name="$2"; shift 2 ;;
|
|
--use_existing_machine) use_existing_machine=true; shift ;;
|
|
--) shift; break ;;
|
|
*) echo "getopt error" >&2; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
if $use_existing_machine && $delete_existing_machine; then
|
|
echo "Supply only one of --delete_existing_machine and" \
|
|
"--use_existing_machine" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! type gcloud >/dev/null 2>&1; then
|
|
echo "gcloud is not in your PATH. See: https://cloud.google.com/sdk/" >&2
|
|
exit 1
|
|
fi
|
|
|
|
use_rpms=false
|
|
|
|
case "$image_family" in
|
|
centos-*) image_project=centos-cloud ; use_rpms=true ;;
|
|
ubuntu-*) image_project=ubuntu-os-cloud ;;
|
|
*) echo "This script doesn't recognize image family '$image_family'" >&2;
|
|
exit 1 ;;
|
|
esac
|
|
|
|
if [ -z "$machine_name" ]; then
|
|
bit_suffix=
|
|
for flag in "$@"; do
|
|
if [ "$flag" = "--32bit" ]; then
|
|
bit_suffix='-32'
|
|
break
|
|
fi
|
|
done
|
|
|
|
# gcloud is pretty fussy about machine names.
|
|
sanitized_branch="$(tr _ - <<< "$branch" | tr -d .)"
|
|
|
|
machine_name="${USER}-${image_family}${bit_suffix}"
|
|
machine_name+="-${sanitized_branch}-mps-build${bit_suffix}"
|
|
fi
|
|
|
|
instances=$(gcloud compute instances list -q "$machine_name")
|
|
if [ -n "$instances" ]; then
|
|
if $delete_existing_machine; then
|
|
gcloud -q compute instances delete "$machine_name"
|
|
instances=
|
|
elif ! $use_existing_machine; then
|
|
echo "Instance '$machine_name' already exists." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$instances" ] || ! $use_existing_machine; then
|
|
gcloud compute instances create "$machine_name" \
|
|
--image-family="$image_family" --image-project="$image_project"
|
|
fi
|
|
|
|
mkdir -p ~/release
|
|
|
|
# Display an error including the machine name if we die in the script below.
|
|
trap '[ $? -ne 0 ] && echo -e "\nBuild failed on $machine_name"' EXIT
|
|
|
|
gcloud compute ssh "$machine_name" -- bash << EOF
|
|
set -e
|
|
set -x
|
|
if $use_rpms; then
|
|
sudo yum -y install git redhat-lsb
|
|
else
|
|
sudo apt-get -y install git
|
|
fi
|
|
# CentOS 6's git is old enough that git clone -b <tag> doesn't work and
|
|
# silently checks out HEAD. To be safe we use an explicit checkout below.
|
|
git clone https://github.com/pagespeed/mod_pagespeed.git
|
|
cd mod_pagespeed
|
|
git checkout "$branch"
|
|
install/build_release.sh $@
|
|
EOF
|
|
|
|
gcloud compute copy-files "${machine_name}:mod_pagespeed/release/*" ~/release/
|
|
|
|
if ! $keep_machine; then
|
|
gcloud -q compute instances delete "$machine_name"
|
|
fi
|