mirror of
https://github.com/vmware-tanzu/pinniped.git
synced 2025-12-23 06:15:47 +00:00
Change codegen scripts to work with Kube 1.29
- Also add support for having comments in kube-versions.txt. - Update boilerplate copyright dates for generated code files.
This commit is contained in:
@@ -1,2 +1,2 @@
|
|||||||
// Copyright 2020-2023 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2020-2024 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright 2020-2023 the Pinniped contributors. All Rights Reserved.
|
# Copyright 2020-2024 the Pinniped contributors. All Rights Reserved.
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
@@ -58,6 +58,14 @@ export KUBE_VERSION
|
|||||||
KUBE_MINOR_VERSION="$(echo "${KUBE_VERSION}" | cut -d"." -f1-2)"
|
KUBE_MINOR_VERSION="$(echo "${KUBE_VERSION}" | cut -d"." -f1-2)"
|
||||||
export KUBE_MINOR_VERSION
|
export KUBE_MINOR_VERSION
|
||||||
|
|
||||||
|
# Check if it is a recent version of Kube.
|
||||||
|
KUBE_MAJOR_NUMBER="$(echo "${KUBE_VERSION}" | cut -d"." -f1)" # (e.g. '1')
|
||||||
|
KUBE_MINOR_NUMBER="$(echo "${KUBE_VERSION}" | cut -d"." -f2)" # (e.g. '28')
|
||||||
|
KUBE_1_29_OR_NEWER="no"
|
||||||
|
if [[ "$KUBE_MAJOR_NUMBER" -gt "1" || ( "$KUBE_MAJOR_NUMBER" == "1" && "$KUBE_MINOR_NUMBER" -ge "29" ) ]]; then
|
||||||
|
KUBE_1_29_OR_NEWER="yes"
|
||||||
|
fi
|
||||||
|
|
||||||
# KUBE_MODULE_VERSION is just version of client libraries (e.g., 'v0.28.9-rc-0').
|
# KUBE_MODULE_VERSION is just version of client libraries (e.g., 'v0.28.9-rc-0').
|
||||||
KUBE_MODULE_VERSION="v0.$(echo "${KUBE_VERSION}" | cut -d '.' -f 2-)"
|
KUBE_MODULE_VERSION="v0.$(echo "${KUBE_VERSION}" | cut -d '.' -f 2-)"
|
||||||
export KUBE_MODULE_VERSION
|
export KUBE_MODULE_VERSION
|
||||||
@@ -77,13 +85,19 @@ find "${OUTPUT_DIR}" -type f -exec sed -i "s|GENERATED_PKG|generated/${KUBE_MINO
|
|||||||
find "${OUTPUT_DIR}" -type f -not -name '*.tmpl' -exec rm {} \;
|
find "${OUTPUT_DIR}" -type f -not -name '*.tmpl' -exec rm {} \;
|
||||||
find "${OUTPUT_DIR}" -type f -name '*.tmpl' -exec bash -c 'mv "$0" "${0%.tmpl}"' {} \;
|
find "${OUTPUT_DIR}" -type f -name '*.tmpl' -exec bash -c 'mv "$0" "${0%.tmpl}"' {} \;
|
||||||
|
|
||||||
|
# Starting in Kube 1.29, we need to use language level 1.21.
|
||||||
|
GO_LANG_LEVEL="1.13"
|
||||||
|
if [[ "$KUBE_1_29_OR_NEWER" == "yes" ]]; then
|
||||||
|
GO_LANG_LEVEL="1.21"
|
||||||
|
fi
|
||||||
|
|
||||||
# Make the generated API code its own Go module.
|
# Make the generated API code its own Go module.
|
||||||
echo "generating ${OUTPUT_DIR}/apis/go.mod..."
|
echo "generating ${OUTPUT_DIR}/apis/go.mod..."
|
||||||
cat << EOF > "${OUTPUT_DIR}/apis/go.mod"
|
cat << EOF > "${OUTPUT_DIR}/apis/go.mod"
|
||||||
// This go.mod file is generated by ./hack/codegen.sh.
|
// This go.mod file is generated by ./hack/update.sh.
|
||||||
module ${BASE_PKG}/generated/${KUBE_MINOR_VERSION}/apis
|
module ${BASE_PKG}/generated/${KUBE_MINOR_VERSION}/apis
|
||||||
|
|
||||||
go 1.13
|
go $GO_LANG_LEVEL
|
||||||
|
|
||||||
require (
|
require (
|
||||||
k8s.io/apimachinery ${KUBE_MODULE_VERSION}
|
k8s.io/apimachinery ${KUBE_MODULE_VERSION}
|
||||||
@@ -91,20 +105,57 @@ require (
|
|||||||
)
|
)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# Create a Go file that declares the package or else we can't use "go mod tidy" in the client subdirectory.
|
||||||
|
# Without this, go mod tidy complains that this directory "but does not contain package".
|
||||||
|
# We will delete this at the end of the script.
|
||||||
|
cat << EOF > "${OUTPUT_DIR}/apis/placeholder.go"
|
||||||
|
package apis
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "Showing initial apis/go.mod..."
|
||||||
|
cat "${OUTPUT_DIR}/apis/go.mod" | sed "s|^|cat-go-mod > |"
|
||||||
|
|
||||||
# Generate a go.sum without changing the go.mod by running go mod download.
|
# Generate a go.sum without changing the go.mod by running go mod download.
|
||||||
echo "running go mod download in ${OUTPUT_DIR}/apis/go.mod to generate a go.sum file..."
|
echo "running go mod download in ${OUTPUT_DIR}/apis/go.mod to generate a go.sum file..."
|
||||||
(cd "${OUTPUT_DIR}/apis" && go mod download all 2>&1 | sed "s|^|go-mod-download > |")
|
(cd "${OUTPUT_DIR}/apis" && go mod download all 2>&1 | sed "s|^|go-mod-download > |")
|
||||||
|
|
||||||
|
# Starting in Kube 1.29, the code generator complains that we need to run go mod tidy first.
|
||||||
|
if [[ "$KUBE_1_29_OR_NEWER" == "yes" ]]; then
|
||||||
|
echo "running go mod tidy in ${OUTPUT_DIR}/apis..."
|
||||||
|
(cd "${OUTPUT_DIR}/apis" && go mod tidy 2>&1 | sed "s|^|go-mod-tidy > |")
|
||||||
|
echo "Showing updated apis/go.mod..."
|
||||||
|
cat "${OUTPUT_DIR}/apis/go.mod" | sed "s|^|cat-updated-go-mod > |"
|
||||||
|
fi
|
||||||
|
|
||||||
# Make the generated client code its own Go module.
|
# Make the generated client code its own Go module.
|
||||||
echo "generating ${OUTPUT_DIR}/client/go.mod..."
|
echo "generating ${OUTPUT_DIR}/client/go.mod..."
|
||||||
mkdir client
|
mkdir client
|
||||||
mkdir client/concierge
|
mkdir client/concierge
|
||||||
mkdir client/supervisor
|
mkdir client/supervisor
|
||||||
cat << EOF > "./client/go.mod"
|
|
||||||
// This go.mod file is generated by ./hack/codegen.sh.
|
# Create a tools.go just to prevent "go mod tidy" from deleting these packages from the go.mod as unused deps.
|
||||||
|
# We will delete this at the end of the script.
|
||||||
|
cat << EOF > "${OUTPUT_DIR}/client/tools.go"
|
||||||
|
//go:build tools
|
||||||
|
|
||||||
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "k8s.io/api"
|
||||||
|
_ "k8s.io/apimachinery"
|
||||||
|
_ "k8s.io/client-go"
|
||||||
|
_ "${BASE_PKG}/generated/${KUBE_MINOR_VERSION}/apis"
|
||||||
|
)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create client/go.mod.
|
||||||
|
cat << EOF > "${OUTPUT_DIR}/client/go.mod"
|
||||||
|
// This go.mod file is generated by ./hack/update.sh.
|
||||||
module ${BASE_PKG}/generated/${KUBE_MINOR_VERSION}/client
|
module ${BASE_PKG}/generated/${KUBE_MINOR_VERSION}/client
|
||||||
|
|
||||||
go 1.13
|
go $GO_LANG_LEVEL
|
||||||
|
|
||||||
|
replace ${BASE_PKG}/generated/${KUBE_MINOR_VERSION}/apis => ../apis
|
||||||
|
|
||||||
require (
|
require (
|
||||||
k8s.io/api ${KUBE_MODULE_VERSION}
|
k8s.io/api ${KUBE_MODULE_VERSION}
|
||||||
@@ -112,14 +163,28 @@ require (
|
|||||||
k8s.io/client-go ${KUBE_MODULE_VERSION}
|
k8s.io/client-go ${KUBE_MODULE_VERSION}
|
||||||
${BASE_PKG}/generated/${KUBE_MINOR_VERSION}/apis v0.0.0
|
${BASE_PKG}/generated/${KUBE_MINOR_VERSION}/apis v0.0.0
|
||||||
)
|
)
|
||||||
|
|
||||||
replace ${BASE_PKG}/generated/${KUBE_MINOR_VERSION}/apis => ../apis
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
echo "Showing initial client/go.mod..."
|
||||||
|
cat "${OUTPUT_DIR}/client/go.mod" | sed "s|^|cat-go-mod > |"
|
||||||
|
|
||||||
# Generate a go.sum without changing the go.mod by running go mod download.
|
# Generate a go.sum without changing the go.mod by running go mod download.
|
||||||
echo "running go mod download in ${OUTPUT_DIR}/client/go.mod to generate a go.sum file..."
|
echo "running go mod download in ${OUTPUT_DIR}/client/go.mod to generate a go.sum file..."
|
||||||
(cd "${OUTPUT_DIR}/client" && go mod download all 2>&1 | sed "s|^|go-mod-download > |")
|
(cd "${OUTPUT_DIR}/client" && go mod download all 2>&1 | sed "s|^|go-mod-download > |")
|
||||||
|
|
||||||
|
# Starting in Kube 1.29, the code generator complains that we need to run go mod tidy first.
|
||||||
|
if [[ "$KUBE_1_29_OR_NEWER" == "yes" ]]; then
|
||||||
|
echo "running go mod tidy in ${OUTPUT_DIR}/client..."
|
||||||
|
(cd "${OUTPUT_DIR}/client" && go mod tidy 2>&1 | sed "s|^|go-mod-tidy > |")
|
||||||
|
echo "Showing updated client/go.mod..."
|
||||||
|
cat "${OUTPUT_DIR}/client/go.mod" | sed "s|^|cat-updated-go-mod > |"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# These files were only created above to satisfy the above usages of "go mod tidy" in this script.
|
||||||
|
# We don't need to commit them. Delete them before the final "go mod tidy" so that unused
|
||||||
|
# imports can be deleted by the usages of "go mod tidy" below.
|
||||||
|
rm -f apis/placeholder.go client/tools.go
|
||||||
|
|
||||||
# Generate API-related code for our public API groups
|
# Generate API-related code for our public API groups
|
||||||
echo "generating API-related code for our public API groups..."
|
echo "generating API-related code for our public API groups..."
|
||||||
chmod -R +x "${GOPATH}/src/k8s.io/code-generator/"
|
chmod -R +x "${GOPATH}/src/k8s.io/code-generator/"
|
||||||
@@ -158,7 +223,7 @@ echo "generating API-related code for our internal API groups..."
|
|||||||
--go-header-file "${ROOT}/hack/boilerplate.go.txt" -v "$debug_level" 2>&1 | sed "s|^|gen-supervisor-int-api > |"
|
--go-header-file "${ROOT}/hack/boilerplate.go.txt" -v "$debug_level" 2>&1 | sed "s|^|gen-supervisor-int-api > |"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Tidy up the .../apis module
|
# Tidy the apis module after codegen.
|
||||||
echo "tidying ${OUTPUT_DIR}/apis/go.mod..."
|
echo "tidying ${OUTPUT_DIR}/apis/go.mod..."
|
||||||
(cd apis && go mod tidy 2>&1 | sed "s|^|go-mod-tidy > |")
|
(cd apis && go mod tidy 2>&1 | sed "s|^|go-mod-tidy > |")
|
||||||
|
|
||||||
@@ -181,7 +246,7 @@ echo "generating client code for our public API groups..."
|
|||||||
--go-header-file "${ROOT}/hack/boilerplate.go.txt" -v "$debug_level" 2>&1 | sed "s|^|gen-supervisor-client > |"
|
--go-header-file "${ROOT}/hack/boilerplate.go.txt" -v "$debug_level" 2>&1 | sed "s|^|gen-supervisor-client > |"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Tidy up the .../client module
|
# Tidy the client module after codegen.
|
||||||
echo "tidying ${OUTPUT_DIR}/client/go.mod..."
|
echo "tidying ${OUTPUT_DIR}/client/go.mod..."
|
||||||
(cd client && go mod tidy 2>&1 | sed "s|^|go-mod-tidy > |")
|
(cd client && go mod tidy 2>&1 | sed "s|^|go-mod-tidy > |")
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +1,28 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright 2020-2022 the Pinniped contributors. All Rights Reserved.
|
# Copyright 2020-2024 the Pinniped contributors. All Rights Reserved.
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
|
ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
|
||||||
|
|
||||||
# Generate code.
|
# Generate code, running each Kube version as a separate process, with up to 8 parallel processes at a time.
|
||||||
xargs -n 1 -P 8 "$ROOT/hack/lib/update-codegen.sh" < "${ROOT}/hack/lib/kube-versions.txt"
|
cat "${ROOT}/hack/lib/kube-versions.txt" | grep -v '^#' | xargs -n 1 -P 8 "$ROOT/hack/lib/update-codegen.sh"
|
||||||
|
|
||||||
# Copy the latest version into a ./generated/latest directory so we can depend on it without nested modules.
|
# Copy the latest version into a ./generated/latest directory so we can depend on it without nested modules.
|
||||||
LATEST_MINOR_VERSION="$(head -1 < "${ROOT}/hack/lib/kube-versions.txt" | cut -d"." -f1-2)"
|
LATEST_MINOR_VERSION="$(cat "${ROOT}/hack/lib/kube-versions.txt" | grep -v '^#' | cut -d"." -f1-2 | head -1)"
|
||||||
LATEST_ROOT="$ROOT/generated/latest"
|
LATEST_ROOT="$ROOT/generated/latest"
|
||||||
rm -rf "$LATEST_ROOT"
|
rm -rf "$LATEST_ROOT"
|
||||||
cp -r "$ROOT/generated/$LATEST_MINOR_VERSION/" "$LATEST_ROOT"
|
cp -r "$ROOT/generated/$LATEST_MINOR_VERSION/" "$LATEST_ROOT"
|
||||||
find "$LATEST_ROOT" \( -name "go.mod" -or -name "go.sum" -or -name "README.adoc" \) -delete
|
|
||||||
|
# Delete the go.mod and go.sum because we do not want latest to be a nested module.
|
||||||
|
# Don't delete the README.adoc file so we can share GitHub URLs to it, like a permalink.
|
||||||
|
find "$LATEST_ROOT" \( -name "go.mod" -or -name "go.sum" \) -delete
|
||||||
|
# Delete the CRDs because latest is a go package, so it only needs the go files.
|
||||||
rm -r "$LATEST_ROOT/crds"
|
rm -r "$LATEST_ROOT/crds"
|
||||||
|
|
||||||
|
# Update the import statements in the latest package to make them refer to itself.
|
||||||
if [[ "$(uname -s)" == "Linux" ]]; then
|
if [[ "$(uname -s)" == "Linux" ]]; then
|
||||||
# docker on linux preserves the root ownership of the output files of update-codegen.sh,
|
# docker on linux preserves the root ownership of the output files of update-codegen.sh,
|
||||||
# so chown the files before editing them.
|
# so chown the files before editing them.
|
||||||
@@ -29,7 +35,7 @@ else
|
|||||||
find "$LATEST_ROOT" -type f -print0 | xargs -0 sed -i '' -e "s|go.pinniped.dev/generated/$LATEST_MINOR_VERSION|go.pinniped.dev/generated/latest|g"
|
find "$LATEST_ROOT" -type f -print0 | xargs -0 sed -i '' -e "s|go.pinniped.dev/generated/$LATEST_MINOR_VERSION|go.pinniped.dev/generated/latest|g"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Copy each CRD yaml to the app which should cause it to be installed.
|
# Copy each generated CRD yaml to the app which should cause it to be installed.
|
||||||
cp "$ROOT"/generated/"$LATEST_MINOR_VERSION"/crds/*.supervisor.*.yaml "$ROOT/deploy/supervisor"
|
cp "$ROOT"/generated/"$LATEST_MINOR_VERSION"/crds/*.supervisor.*.yaml "$ROOT/deploy/supervisor"
|
||||||
cp "$ROOT"/generated/"$LATEST_MINOR_VERSION"/crds/*.concierge.*.yaml "$ROOT/deploy/concierge"
|
cp "$ROOT"/generated/"$LATEST_MINOR_VERSION"/crds/*.concierge.*.yaml "$ROOT/deploy/concierge"
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright 2020 the Pinniped contributors. All Rights Reserved.
|
# Copyright 2020-2024 the Pinniped contributors. All Rights Reserved.
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
|
ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
|
||||||
|
|
||||||
xargs "$ROOT/hack/lib/verify-codegen.sh" < "${ROOT}/hack/lib/kube-versions.txt"
|
cat "${ROOT}/hack/lib/kube-versions.txt" | grep -v '^#' | xargs "$ROOT/hack/lib/verify-codegen.sh"
|
||||||
|
|
||||||
"$ROOT/hack/module.sh" lint
|
"$ROOT/hack/module.sh" lint
|
||||||
|
|||||||
Reference in New Issue
Block a user