diff --git a/.gitattributes b/.gitattributes index b8001b6b..f099faa4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,7 +1,7 @@ -*.bash text eol=lf whitespace=blank-at-eol,space-before-tab,tab-in-indent,trailing-space,tabwidth=2 -*.sh text eol=lf whitespace=blank-at-eol,space-before-tab,tab-in-indent,trailing-space,tabwidth=2 +*.bash text eol=lf whitespace=blank-at-eol,space-before-tab,tab-in-indent,trailing-space,tabwidth=4 +*.sh text eol=lf whitespace=blank-at-eol,space-before-tab,tab-in-indent,trailing-space,tabwidth=4 # files for systemd -*.path text eol=lf whitespace=blank-at-eol,space-before-tab,tab-in-indent,trailing-space,tabwidth=2 -*.service text eol=lf whitespace=blank-at-eol,space-before-tab,tab-in-indent,trailing-space,tabwidth=2 -*.timer text eol=lf whitespace=blank-at-eol,space-before-tab,tab-in-indent,trailing-space,tabwidth=2 +*.path text eol=lf whitespace=blank-at-eol,space-before-tab,tab-in-indent,trailing-space,tabwidth=4 +*.service text eol=lf whitespace=blank-at-eol,space-before-tab,tab-in-indent,trailing-space,tabwidth=4 +*.timer text eol=lf whitespace=blank-at-eol,space-before-tab,tab-in-indent,trailing-space,tabwidth=4 diff --git a/build.bash b/build.bash index 0850fcb4..6aa49ad7 100755 --- a/build.bash +++ b/build.bash @@ -19,7 +19,7 @@ ldflags=() # Timestamp of build name="${pkg}.buildDate" -value=$(date --utc +"%F %H:%M:%SZ") +value=$(date -u +"%a %b %d %H:%M:%S %Z %Y") ldflags+=("-X" "\"${name}=${value}\"") # Current tag, if HEAD is on a tag @@ -46,10 +46,7 @@ ldflags+=("-X" "\"${name}=${value}\"") # List of modified files name="${pkg}.gitFilesModified" -value="$(git diff-index --name-only HEAD | tr "\n" "," | sed -e 's:,$::')" +value="$(git diff-index --name-only HEAD)" ldflags+=("-X" "\"${name}=${value}\"") -set -x -go build \ - -ldflags "${ldflags[*]}" \ - -o "${output_filename}" +go build -ldflags "${ldflags[*]}" -o "${output_filename}" diff --git a/dist/automate.sh b/dist/automate.sh index 582882b3..3cc8d41b 100755 --- a/dist/automate.sh +++ b/dist/automate.sh @@ -1,78 +1,56 @@ #!/usr/bin/env bash +set -e +set -o pipefail +shopt -s nullglob # if no files match glob, assume empty list instead of string literal -set -euo pipefail -# if no files match glob, assume empty list instead of string literal -shopt -s nullglob -: ${build_package:="github.com/mholt/caddy"} +## PACKAGE TO 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}" +## PATHS TO USE +DistDir=$GOPATH/src/$Package/dist +BuildDir=$DistDir/builds +ReleaseDir=$DistDir/release - # 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 -} +## BEGIN -prepare_directories() { - mkdir -p "${build_dir}" - rm -f "${build_dir}"/caddy* +# Compile binaries +mkdir -p $BuildDir +cd $BuildDir +rm -f caddy* +gox $Package - mkdir -p "${target_dir}" - rm -f "${target_dir}"/caddy* -} +# Zip them up with release notes and stuff +mkdir -p $ReleaseDir +cd $ReleaseDir +rm -f caddy* +for f in $BuildDir/* +do + # Name .zip file same as binary, but strip .exe from end + zipname=$(basename ${f%".exe"}) + if [[ $f == *"linux"* ]] || [[ $f == *"bsd"* ]]; then + zipname=${zipname}.tar.gz + else + zipname=${zipname}.zip + fi -compile_binaries() { - (cd "${build_dir}"; gox "${build_package}") -} + # Binary inside the zip file is simply the project name + binbase=$(basename $Package) + if [[ $f == *.exe ]]; then + binbase=$binbase.exe + fi + bin=$BuildDir/$binbase + mv $f $bin -if [[ "${1:-}" == "" ]]; then - prepare_directories - compile_binaries + # Compress distributable + if [[ $zipname == *.zip ]]; then + zip -j $zipname $bin $DistDir/CHANGES.txt $DistDir/LICENSES.txt $DistDir/README.txt + else + tar -cvzf $zipname -C $BuildDir $binbase -C $DistDir CHANGES.txt LICENSES.txt README.txt + fi - 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 + # Put binary filename back to original + mv $bin $f +done