2015-06-12 00:17:11 -05:00
|
|
|
#!/usr/bin/env bash
|
2016-03-18 17:45:56 -05:00
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
# if no files match glob, assume empty list instead of string literal
|
|
|
|
shopt -s nullglob
|
|
|
|
|
|
|
|
: ${build_package:="github.com/mholt/caddy"}
|
|
|
|
|
|
|
|
: ${dist_dir:="${GOPATH}/src/${build_package}/dist"}
|
|
|
|
: ${build_dir:="${dist_dir}/builds"}
|
|
|
|
: ${target_dir:="${dist_dir}/release"}
|
|
|
|
|
|
|
|
# Bundles a single binary, given as first parameter, into an archive.
|
|
|
|
package() {
|
|
|
|
# Binary inside the zip file is simply the project name
|
|
|
|
binbase="$(basename "${build_package}")"
|
|
|
|
if [[ "${1}" == *.exe ]]; then
|
|
|
|
binbase+=".exe"
|
|
|
|
fi
|
|
|
|
bin="${build_dir}/${binbase}"
|
|
|
|
|
|
|
|
# Name .zip file same as binary, but strip .exe from end
|
|
|
|
zipname="$(basename "${1%.exe}")"
|
|
|
|
case "$(printf "${zipname}" | cut -d '_' -f 2 | sed -e 's:[a-z]*bsd:bsd:')" in
|
|
|
|
linux|bsd) zipname+=".tar.gz" ;;
|
|
|
|
*) zipname+=".zip" ;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# Compress distributable depending on extension
|
|
|
|
case "${zipname##*.}" in
|
|
|
|
zip)
|
|
|
|
zip -j "${target_dir}/${zipname}" \
|
|
|
|
"${1}" \
|
|
|
|
"${dist_dir}"/{CHANGES.txt,LICENSES.txt,README.txt}
|
|
|
|
printf "@ $(basename "${1}")\n@=${binbase}\n" \
|
|
|
|
| zipnote -w "${target_dir}/${zipname}"
|
|
|
|
;;
|
|
|
|
gz)
|
|
|
|
tar -caf "${target_dir}/${zipname}" \
|
|
|
|
--owner=0 --group=0 \
|
|
|
|
--transform="s#$(basename "${1}")#${binbase}#" \
|
|
|
|
-C "$(dirname "${1}")" "$(basename "${1}")" \
|
|
|
|
-C "${dist_dir}" CHANGES.txt LICENSES.txt README.txt
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
prepare_directories() {
|
|
|
|
mkdir -p "${build_dir}"
|
|
|
|
rm -f "${build_dir}"/caddy*
|
|
|
|
|
|
|
|
mkdir -p "${target_dir}"
|
|
|
|
rm -f "${target_dir}"/caddy*
|
|
|
|
}
|
|
|
|
|
|
|
|
compile_binaries() {
|
|
|
|
(cd "${build_dir}"; gox "${build_package}")
|
|
|
|
}
|
|
|
|
|
|
|
|
if [[ "${1:-}" == "" ]]; then
|
|
|
|
prepare_directories
|
|
|
|
compile_binaries
|
|
|
|
|
|
|
|
case "${OSTYPE}" in
|
|
|
|
linux*)
|
|
|
|
find "${build_dir}" -type f -executable -print0 \
|
|
|
|
| xargs --null --max-args=1 --max-procs=$(nproc --ignore=1) -I '{}' \
|
|
|
|
"${0}" package '{}'
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
while read f; do
|
|
|
|
package "${f}"
|
|
|
|
done < <(ls -1 "${build_dir}"/caddy*)
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
else
|
|
|
|
${1} "${2}"
|
|
|
|
fi
|