diff --git a/scripts/build.sh b/scripts/build.sh deleted file mode 100755 index 113cb45a1..000000000 --- a/scripts/build.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/bash -# -# This script only builds the application from source. -set -e - -NO_COLOR="\x1b[0m" -OK_COLOR="\x1b[32;01m" -ERROR_COLOR="\x1b[31;01m" -WARN_COLOR="\x1b[33;01m" - -# Get the parent directory of where this script is. -SOURCE="${BASH_SOURCE[0]}" -while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done -DIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" - -# Change into that directory -cd $DIR - -# Get the git commit -GIT_COMMIT=$(git rev-parse HEAD) -GIT_DIRTY=$(test -n "`git status --porcelain`" && echo "+CHANGES" || true) - -# If we're building on Windows, specify an extension -EXTENSION="" -if [ "$(go env GOOS)" = "windows" ]; then - EXTENSION=".exe" -fi - -# Make sure that if we're killed, we kill all our subprocseses -trap "kill 0" SIGINT SIGTERM EXIT - -# If we're building a race-enabled build, then set that up. -if [ ! -z $PACKER_RACE ]; then - echo -e "${OK_COLOR}--> Building with race detection enabled${NO_COLOR}" - PACKER_RACE="-race" -fi - -echo -e "${OK_COLOR}--> Installing dependencies to speed up builds...${NO_COLOR}" -go get ./... - -# This function waits for all background tasks to complete -waitAll() { - RESULT=0 - for job in `jobs -p`; do - wait $job - if [ $? -ne 0 ]; then - RESULT=1 - fi - done - - if [ $RESULT -ne 0 ]; then - exit $RESULT - fi -} - -waitSingle() { - if [ ! -z $PACKER_NO_BUILD_PARALLEL ]; then - waitAll - fi -} - -if [ -z $PACKER_NO_BUILD_PARALLEL ]; then - echo -e "${OK_COLOR}--> NOTE: Compilation of components " \ - "will be done in parallel.${NO_COLOR}" -fi - -# Compile the main Packer app -echo -e "${OK_COLOR}--> Compiling Packer${NO_COLOR}" -( -go build \ - ${PACKER_RACE} \ - -ldflags "-X github.com/mitchellh/packer/packer.GitCommit ${GIT_COMMIT}${GIT_DIRTY}" \ - -v \ - -o bin/packer${EXTENSION} . - - cp bin/packer${EXTENSION} ${GOPATH}/bin -) & - -waitSingle - -# Go over each plugin and build it -for PLUGIN in $(find ./plugin -mindepth 1 -maxdepth 1 -type d); do - PLUGIN_NAME=$(basename ${PLUGIN}) - echo -e "${OK_COLOR}--> Compiling Plugin: ${PLUGIN_NAME}${NO_COLOR}" - ( - go build \ - ${PACKER_RACE} \ - -ldflags "-X github.com/mitchellh/packer/packer.GitCommit ${GIT_COMMIT}${GIT_DIRTY}" \ - -v \ - -o bin/packer-${PLUGIN_NAME}${EXTENSION} ${PLUGIN} - - cp bin/packer-${PLUGIN_NAME}${EXTENSION} ${GOPATH}/bin - ) & - - waitSingle -done - -waitAll - -# Reset signal trapping to avoid "Terminated: 15" at the end -trap - SIGINT SIGTERM EXIT diff --git a/scripts/compile.sh b/scripts/compile.sh new file mode 100755 index 000000000..d2af8cdd1 --- /dev/null +++ b/scripts/compile.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# +# This script compiles Packer for various platforms (specified by the +# PACKER_OS and PACKER_ARCH environmental variables). +set -e + +NO_COLOR="\x1b[0m" +OK_COLOR="\x1b[32;01m" +ERROR_COLOR="\x1b[31;01m" +WARN_COLOR="\x1b[33;01m" + +# Get the parent directory of where this script is. +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done +DIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" + +# Change into that directory +cd $DIR + +# Get the git commit +GIT_COMMIT=$(git rev-parse HEAD) +GIT_DIRTY=$(test -n "`git status --porcelain`" && echo "+CHANGES" || true) + +# Determine the arch/os combos we're building for +XC_ARCH=${XC_ARCH:-"386 amd64 arm"} +XC_OS=${XC_OS:-linux darwin windows freebsd openbsd} + +# Make sure that if we're killed, we kill all our subprocseses +trap "kill 0" SIGINT SIGTERM EXIT + +echo -e "${OK_COLOR}==> Installing dependencies to speed up builds...${NO_COLOR}" +go get ./... + +echo -e "${OK_COLOR}==> Beginning compile...${NO_COLOR}" +rm -rf pkg/ +gox \ + -os="${XC_OS}" \ + -arch="${XC_ARCH}" \ + -ldflags "-X github.com/mitchellh/packer/packer.GitCommit ${GIT_COMMIT}${GIT_DIRTY}" \ + -output "pkg/{{.OS}}_{{.Arch}}/packer-{{.Dir}}" \ + ./... + +# Make sure "packer-packer" is renamed properly +for PLATFORM in $(find ./pkg -mindepth 1 -maxdepth 1 -type d); do + set +e + mv ${PLATFORM}/packer-packer ${PLATFORM}/packer 2>/dev/null + mv ${PLATFORM}/packer-packer.exe ${PLATFORM}/packer.exe 2>/dev/null + set -e +done + +# Reset signal trapping to avoid "Terminated: 15" at the end +trap - SIGINT SIGTERM EXIT diff --git a/scripts/devcompile.sh b/scripts/devcompile.sh new file mode 100755 index 000000000..0813ceb32 --- /dev/null +++ b/scripts/devcompile.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# +# This script only builds the application from source. +set -e + +NO_COLOR="\x1b[0m" +OK_COLOR="\x1b[32;01m" +ERROR_COLOR="\x1b[31;01m" +WARN_COLOR="\x1b[33;01m" + +# Get the parent directory of where this script is. +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done +DIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" + +# Change into that directory +cd $DIR + +# Compile the thing +export XC_ARCH=$(go env GOARCH) +export XC_OS=$(go env GOOS) +./scripts/compile.sh + +# Move all the compiled things to the PATH +cp pkg/${XC_OS}_${XC_ARCH}/* ${GOPATH}/bin diff --git a/scripts/dist.sh b/scripts/dist.sh index 342fc9042..0768ff0ae 100755 --- a/scripts/dist.sh +++ b/scripts/dist.sh @@ -19,28 +19,6 @@ if [ ! -z $PREVERSION ]; then VERSIONDIR="${VERSIONDIR}-${PREVERSION}" fi -echo "Version: ${VERSION} ${PREVERSION}" - -# Determine the arch/os combos we're building for -XC_ARCH=${XC_ARCH:-"386 amd64 arm"} -XC_OS=${XC_OS:-linux darwin windows freebsd openbsd} - -echo "Arch: ${XC_ARCH}" -echo "OS: ${XC_OS}" - -# This function builds whatever directory we're in... -xc() { - goxc \ - -arch="$XC_ARCH" \ - -os="$XC_OS" \ - -d="${DIR}/pkg" \ - -pv="${VERSION}" \ - -pr="${PREVERSION}" \ - $XC_OPTS \ - go-install \ - xc -} - # This function waits for all background tasks to complete waitAll() { RESULT=0 @@ -56,28 +34,15 @@ waitAll() { fi } +# Compile the main project +./scripts/compile.sh + # Make sure that if we're killed, we kill all our subprocseses trap "kill 0" SIGINT SIGTERM EXIT -# Build our root project -xc - -# Build all the plugins -for PLUGIN in $(find ./plugin -mindepth 1 -maxdepth 1 -type d); do - PLUGIN_NAME=$(basename ${PLUGIN}) - find ./pkg \ - -type f \ - -name ${PLUGIN_NAME} \ - -execdir mv ${PLUGIN_NAME} packer-${PLUGIN_NAME} ';' - find ./pkg \ - -type f \ - -name ${PLUGIN_NAME}.exe \ - -execdir mv ${PLUGIN_NAME}.exe packer-${PLUGIN_NAME}.exe ';' -done - # Zip all the packages -mkdir -p ./pkg/${VERSIONDIR}/dist -for PLATFORM in $(find ./pkg/${VERSIONDIR} -mindepth 1 -maxdepth 1 -type d); do +mkdir -p ./pkg/dist +for PLATFORM in $(find ./pkg -mindepth 1 -maxdepth 1 -type d); do PLATFORM_NAME=$(basename ${PLATFORM}) ARCHIVE_NAME="${VERSIONDIR}_${PLATFORM_NAME}" @@ -87,7 +52,7 @@ for PLATFORM in $(find ./pkg/${VERSIONDIR} -mindepth 1 -maxdepth 1 -type d); do ( pushd ${PLATFORM} - zip ${DIR}/pkg/${VERSIONDIR}/dist/${ARCHIVE_NAME}.zip ./* + zip ${DIR}/pkg/dist/${ARCHIVE_NAME}.zip ./* popd ) & done @@ -95,7 +60,7 @@ done waitAll # Make the checksums -pushd ./pkg/${VERSIONDIR}/dist +pushd ./pkg/dist shasum -a256 * > ./${VERSIONDIR}_SHA256SUMS popd