github.com/rohankumardubey/nomad@v0.11.8/scripts/release/mac-remote-build (about) 1 #!/usr/bin/env bash 2 3 # A script for building macOS binary on a remote macOS host 4 # 5 # The helper is expected to be invoked with nomad repo as a first argument, e.g. 6 # `mac-remote-build ~/go/src/github.com/hashicorp/nomad`. 7 # 8 # The repository is required to have a HEAD with all generated files and udpated version committed. 9 # 10 # The script runs a host on `sharedmac-bot` host (assumes a corresponding entry in ~/.ssh/config). 11 # `REMOTE_MACOS_HOST` envvar can be set to point to another macOS host 12 # 13 # The script operates by creating a temporary workspace in the remote host to 14 # contain a clean go installation and gopath with the repository content. 15 # It should install all dependencies worth pinning, and *not* use system binaries 16 # that may influence the integrity of the release. 17 # 18 19 set -o errexit 20 21 REPO="$1" 22 RELEASE_TARGET="${2:-release}" 23 24 if [[ -z "${REPO}" ]] 25 then 26 echo "repo path is required" 27 echo "Usage: $0 <repo_path>" 28 exit 1 29 fi 30 31 TMP_WORKSPACE="/tmp/nomad-workspace/$(date +%Y-%m-%d-%s)" 32 REPO_REMOTE_PATH="${TMP_WORKSPACE}/gopath/src/github.com/hashicorp/nomad" 33 34 readonly remote_macos_host=${REMOTE_MACOS_HOST:-sharedmac-bot} 35 36 echo "Using temp workspace: ${TMP_WORKSPACE}" 37 echo 38 39 echo '=======>>>> Transfering repository' 40 ssh ${remote_macos_host} mkdir -p "${REPO_REMOTE_PATH}" 41 rsync -az \ 42 "${REPO}/.git" \ 43 "${remote_macos_host}:${REPO_REMOTE_PATH}" 44 45 echo '=======>>>> Compiling Mac Binaries' 46 cat <<'EOF' | ssh ${remote_macos_host} /bin/bash -s "${TMP_WORKSPACE}" "${RELEASE_TARGET}" 47 48 set -o errexit 49 set -o xtrace 50 51 TMP_WORKSPACE="$1" 52 RELEASE_TARGET="$2" 53 REPO_PATH="${TMP_WORKSPACE}/gopath/src/github.com/hashicorp/nomad" 54 55 56 mkdir -p "${TMP_WORKSPACE}/tmp" 57 58 install_go() { 59 local go_version="1.14.6" 60 local download= 61 62 download="https://storage.googleapis.com/golang/go${go_version}.darwin-amd64.tar.gz" 63 curl -sSL --fail -o "${TMP_WORKSPACE}/tmp/go.tar.gz" ${download} 64 65 tar -C "${TMP_WORKSPACE}" -xf "${TMP_WORKSPACE}/tmp/go.tar.gz" 66 } 67 68 install_release_deps() { 69 go get -u github.com/a8m/tree/cmd/tree 70 } 71 72 compile() { 73 cd "${REPO_PATH}" 74 git checkout . 75 git status 76 git log -1 77 make ${RELEASE_TARGET} 78 } 79 80 install_go 81 82 export GOPATH="${TMP_WORKSPACE}/gopath" 83 export PATH="${TMP_WORKSPACE}/go/bin:${GOPATH}/bin:$PATH" 84 85 install_release_deps 86 compile 87 88 EOF 89 90 echo '=======>>>> Retrieving mac compiled binaries' 91 rsync -avz --ignore-existing ${remote_macos_host}:"${REPO_REMOTE_PATH}/pkg/" "${REPO}/pkg" 92 93 ssh ${remote_macos_host} rm -rf "${TMP_WORKSPACE}"