#!/bin/bash baseDir="$( cd "$(dirname "$0")" && pwd )" cd "$baseDir" COL_OFF="\033[00m" COL_BOLD="\033[01;01m" COL_RED="\033[31m" destDirPart1="dist" destDirPart2="jess" function prep { # output output="cmd/jess" # get version version=$(grep "info.Set" cmd/main.go | cut -d'"' -f4) # build versioned file name filename="jess_v${version//./-}" # platform platform="${GOOS}_${GOARCH}" if [[ $GOOS == "windows" ]]; then filename="${filename}.exe" output="${output}.exe" fi # build destination path destPath=${destDirPart1}/${platform}/${destDirPart2}/$filename } function check { prep # check if file exists if [[ -f $destPath ]]; then echo "[jess] $platform $version already built" else echo -e "[jess] ${COL_BOLD}$platform $version${COL_OFF}" fi } function build { prep # check if file exists if [[ -f $destPath ]]; then echo "[jess] $platform already built in version $version, skipping..." return fi # build ./cmd/build if [[ $? -ne 0 ]]; then echo -e "\n${COL_BOLD}[jess] $platform: ${COL_RED}BUILD FAILED.${COL_OFF}" exit 1 fi mkdir -p $(dirname $destPath) cp $output $destPath echo -e "\n${COL_BOLD}[jess] $platform: successfully built.${COL_OFF}" } function check_all { GOOS=linux GOARCH=amd64 check GOOS=windows GOARCH=amd64 check GOOS=darwin GOARCH=amd64 check GOOS=linux GOARCH=arm64 check GOOS=windows GOARCH=arm64 check GOOS=darwin GOARCH=arm64 check } function build_all { GOOS=linux GOARCH=amd64 build GOOS=windows GOARCH=amd64 build GOOS=darwin GOARCH=amd64 build GOOS=linux GOARCH=arm64 build GOOS=windows GOARCH=arm64 build GOOS=darwin GOARCH=arm64 build } function build_os { # build only for current OS # set for script GOOS=$(go env GOOS) # architectures GOARCH=amd64 build } case $1 in "check" ) check_all ;; "build" ) build_all ;; "build-os" ) build_os ;; * ) echo "" echo "build list:" echo "" check_all echo "" read -p "press [Enter] to start building" x echo "" build_all echo "" echo "finished building." echo "" ;; esac