cli-utils/hack/run-in-gopath.sh

44 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright 2021 The Kubernetes Authors.
# SPDX-License-Identifier: Apache-2.0
set -o errexit -o nounset -o pipefail -o posix
PKG_PATH="github.com/fluxcd/cli-utils"
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
# Make a new temporary GOPATH directory
export GOPATH=$(mktemp -d -t cli-utils-gopath.XXXXXXXXXX)
# Clean up on exit (modcache has read-only files, so clean that first)
trap "go clean -modcache && rm '${GOPATH}/src/${PKG_PATH}' && rm -rf '${GOPATH}'" EXIT
# Make sure we can read, write, and delete
chmod a+rw "${GOPATH}"
# Use a temporary cache
export GOCACHE="${GOPATH}/cache"
# Create a symlink for the local repo in the GOPATH
mkdir -p "${GOPATH}/src/${PKG_PATH}"
rm -r "${GOPATH}/src/${PKG_PATH}"
ln -s "${REPO_ROOT}" "${GOPATH}/src/${PKG_PATH}"
# Make sure our own Go binaries are in PATH.
export PATH="${GOPATH}/bin:${PATH}"
# Set GOROOT so binaries that parse code can work properly.
export GOROOT=$(go env GOROOT)
# Unset GOBIN in case it already exists in the current session.
unset GOBIN
# enter the GOPATH before executing the command
cd "${GOPATH}/src/${PKG_PATH}"
# Run the user-provided command.
"${@}"
# exit the GOPATH before deleting it
cd "${REPO_ROOT}"