#!/bin/sh set -e SCRIPT_ROOT=$(dirname $(readlink -f $0)) PROJECT_ROOT=$(dirname ${SCRIPT_ROOT}) CORSO_BUILD_CONTAINER=/go/src/github.com/alcionai/corso CORSO_BUILD_CONTAINER_SRC=${CORSO_BUILD_CONTAINER}/src CORSO_BUILD_PKG_MOD=/go/pkg/mod CORSO_BUILD_TMP=/tmp/.corsobuild CORSO_BUILD_TMP_CACHE=${CORSO_BUILD_TMP}/cache CORSO_BUILD_TMP_MOD=${CORSO_BUILD_TMP}/mod CORSO_CACHE=${CORSO_BUILD_TMP_CACHE} CORSO_MOD_CACHE=${CORSO_BUILD_PKG_MOD}/cache CORSO_BUILD_ARGS='' GOVER=1.18 GOOS=linux GOARCH=amd64 while [ "$#" -gt 0 ] do case "$1" in --arch) GOARCH=$2 shift ;; esac shift done # temporary directory for caching go build mkdir -p ${CORSO_BUILD_TMP_CACHE} # temporary directory for caching go modules (needed for fast cross-platform build) mkdir -p ${CORSO_BUILD_TMP_MOD} echo "-----" echo "building corso binary for ${GOOS}-${GOARCH}" echo "-----" set -x docker run --rm \ --mount type=bind,src=${PROJECT_ROOT},dst=${CORSO_BUILD_CONTAINER} \ --mount type=bind,src=${CORSO_BUILD_TMP_CACHE},dst=${CORSO_BUILD_TMP_CACHE} \ --mount type=bind,src=${CORSO_BUILD_TMP_MOD},dst=${CORSO_BUILD_PKG_MOD} \ --workdir ${CORSO_BUILD_CONTAINER_SRC} \ --env GOMODCACHE=${CORSO_MOD_CACHE} \ --env GOCACHE=${CORSO_CACHE} \ --env GOOS=${GOOS} \ --env GOARCH=${GOARCH} \ --entrypoint /usr/local/go/bin/go \ golang:${GOVER} \ build ${CORSO_BUILD_ARGS} set +x mkdir -p ${PROJECT_ROOT}/bin mv ${PROJECT_ROOT}/src/corso ${PROJECT_ROOT}/bin/corso echo "-----" echo "created binary image in ${PROJECT_ROOT}/bin/corso"