hack/codegen.sh: fix stashing, symlinking, failure, and usage
Signed-off-by: Andrew Keesler <akeesler@vmware.com>
This commit is contained in:
parent
7fa8f7797a
commit
cedd47b92e
@ -13,8 +13,12 @@ CODEGEN_IMAGE=${CODEGEN_IMAGE:-"gcr.io/tanzu-user-authentication/k8s-code-genera
|
|||||||
BASE_PKG="github.com/suzerain-io/placeholder-name"
|
BASE_PKG="github.com/suzerain-io/placeholder-name"
|
||||||
|
|
||||||
function codegen::ensure_module_in_gopath() {
|
function codegen::ensure_module_in_gopath() {
|
||||||
local pkg_name="${MOD_DIR/#${ROOT}\//}"
|
# This should be something like "kubernetes/1.19/api".
|
||||||
local pkg_gosrc_path="${GOPATH}/src/${BASE_PKG}/${pkg_name}"
|
local pkg_name="$(realpath "--relative-to=$ROOT" "$MOD_DIR")"
|
||||||
|
|
||||||
|
# Use --canonicalize-missing to since pkg_name could end up as "." - this would
|
||||||
|
# lead to a pkg_gosrc_path like "foo/bar/bat/." which ln(1) (below) does not like.
|
||||||
|
local pkg_gosrc_path="$(realpath --canonicalize-missing "${GOPATH}/src/${BASE_PKG}/${pkg_name}")"
|
||||||
|
|
||||||
if [[ ! -e "${pkg_gosrc_path}" ]]; then
|
if [[ ! -e "${pkg_gosrc_path}" ]]; then
|
||||||
mkdir -p "$(dirname "${pkg_gosrc_path}")"
|
mkdir -p "$(dirname "${pkg_gosrc_path}")"
|
||||||
@ -78,11 +82,17 @@ function codegen::generate() {
|
|||||||
function codegen::verify() {
|
function codegen::verify() {
|
||||||
local have_stash=''
|
local have_stash=''
|
||||||
if [[ "$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ')" -ne "0" ]]; then
|
if [[ "$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ')" -ne "0" ]]; then
|
||||||
|
# git stash requires the user.email and user.name to be set. We set these at
|
||||||
|
# a global scope so they don't overwrite the .git/config in the mounted repo
|
||||||
|
# from the host.
|
||||||
|
git config --global user.email "codegen_verify@whatever.com"
|
||||||
|
git config --global user.name "Codegen Verify"
|
||||||
git stash --all >/dev/null 2>&1 && have_stash=1
|
git stash --all >/dev/null 2>&1 && have_stash=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
codegen::generate
|
codegen::generate
|
||||||
|
|
||||||
|
failure=0
|
||||||
if [[ "$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ')" -eq "0" ]]; then
|
if [[ "$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ')" -eq "0" ]]; then
|
||||||
echo "Generated code in ${MOD_DIR} up to date."
|
echo "Generated code in ${MOD_DIR} up to date."
|
||||||
else
|
else
|
||||||
@ -90,16 +100,21 @@ function codegen::verify() {
|
|||||||
echo "Please run hack/module.sh codegen"
|
echo "Please run hack/module.sh codegen"
|
||||||
git diff "${ROOT}"
|
git diff "${ROOT}"
|
||||||
git checkout "${ROOT}"
|
git checkout "${ROOT}"
|
||||||
|
failure=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "${have_stash}" ]]; then
|
if [[ -n "${have_stash}" ]]; then
|
||||||
git stash pop >/dev/null 2>&1
|
git stash pop >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "$failure" -eq 1 ]]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function codegen::usage() {
|
function codegen::usage() {
|
||||||
echo "Error: <codegen command> must be specified"
|
echo "Error: <codegen command> must be specified"
|
||||||
echo " ${BASH_SOURCE[0]} <codegen command> [codegen::generate]"
|
echo " ${BASH_SOURCE[0]} <codegen command> [codegen::generate, codegen::verify]"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +125,7 @@ function codegen::main() {
|
|||||||
"${codegen_command}"
|
"${codegen_command}"
|
||||||
else
|
else
|
||||||
DOCKER_ROOT_DIR="/tmp/${RANDOM}/${BASE_PKG}"
|
DOCKER_ROOT_DIR="/tmp/${RANDOM}/${BASE_PKG}"
|
||||||
DOCKER_MOD_DIR="${DOCKER_ROOT_DIR}/${MOD_DIR/#${ROOT}\//}"
|
DOCKER_MOD_DIR="${DOCKER_ROOT_DIR}/$(realpath "--relative-to=$ROOT" "$MOD_DIR")"
|
||||||
|
|
||||||
docker run --rm \
|
docker run --rm \
|
||||||
--env CONTAINED=1 \
|
--env CONTAINED=1 \
|
||||||
|
Loading…
Reference in New Issue
Block a user