github.com/operator-framework/operator-lifecycle-manager@v0.30.0/scripts/update_codegen.sh (about) 1 #!/usr/bin/env bash 2 3 # Copyright 2017 The Kubernetes Authors. 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 17 # This script is based off: https://github.com/kubernetes/code-generator/blob/v0.30.0/examples/hack/update-codegen.sh 18 # It is used to update the generated code for the OLM API and package-server API. 19 20 set -o errexit 21 set -o nounset 22 set -o pipefail 23 24 # Setting the SCRIPT_ROOT and attempting to locate the vendored code generator directory. 25 SCRIPT_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) 26 CODEGEN_PKG=$(cd "${SCRIPT_ROOT}" && ls -d ./vendor/k8s.io/code-generator 2>/dev/null) 27 28 # Check if the CODEGEN_PKG has been set and points to a directory, else throw an error. 29 if [[ -z "$CODEGEN_PKG" || ! -d "$CODEGEN_PKG" ]]; then 30 echo "Error: Required vendored code generator directory does not exist." >&2 31 exit 1 32 fi 33 34 # Set verbosity of code-generators 35 export KUBE_VERBOSE=2 36 37 # Set module and boilerplate paths 38 API_MODULE="github.com/operator-framework/api" 39 OLM_MODULE="github.com/operator-framework/operator-lifecycle-manager" 40 BOILERPLATE="$SCRIPT_ROOT/boilerplate.go.txt" 41 42 # Use vendored code generators 43 CLIENT_GEN="go run ${CODEGEN_PKG}/cmd/client-gen" 44 LISTER_GEN="go run ${CODEGEN_PKG}/cmd/lister-gen" 45 INFORMER_GEN="go run ${CODEGEN_PKG}/cmd/informer-gen" 46 47 # Source the kube_codegen.sh script to generate the OLM API client, listers and informers 48 source "${CODEGEN_PKG}/kube_codegen.sh" 49 50 ################################################## 51 # Generate OLM API client, listers and informers # 52 ################################################## 53 kube::codegen::gen_client \ 54 --with-watch \ 55 --output-dir "${SCRIPT_ROOT}/pkg/api/client" \ 56 --output-pkg "${OLM_MODULE}/pkg/api/client" \ 57 --boilerplate "${BOILERPLATE}" \ 58 "${SCRIPT_ROOT}/vendor/${API_MODULE}/pkg" 59 60 ############################################################## 61 # Generate Package Manager API client, listers and informers # 62 ############################################################## 63 64 # NOTE: The kube_codegen.sh script does not seem to support generating clients for the package-server internal API. 65 # Therefore, we will generate the clients for the package-server API manually. 66 67 # When generating the openapi, we can optionally update the known api violation report 68 # New violations will break the codegen process 69 REPORT_FILENAME="${SCRIPT_ROOT}/scripts/codegen_violation_exceptions.list" 70 if [[ "${UPDATE_API_KNOWN_VIOLATIONS:-}" == "true" ]]; then 71 UPDATE_REPORT="--update-report" 72 fi 73 74 # generate openapi 75 kube::codegen::gen_openapi \ 76 --output-dir "${SCRIPT_ROOT}/pkg/package-server/client/openapi" \ 77 --output-pkg "${OLM_MODULE}/pkg/package-server/client/openapi" \ 78 --extra-pkgs "${API_MODULE}/pkg/operators/v1alpha1" \ 79 --extra-pkgs "${API_MODULE}/pkg/lib/version" \ 80 --boilerplate "${BOILERPLATE}" \ 81 --report-filename "${REPORT_FILENAME}" \ 82 ${UPDATE_REPORT:+"${UPDATE_REPORT}"} \ 83 "${SCRIPT_ROOT}/pkg/package-server/apis" # input 84 85 # generate clients 86 # generate pacakge-server operators/v1 client 87 ${CLIENT_GEN} \ 88 -v "${KUBE_VERBOSE}" \ 89 --go-header-file "${BOILERPLATE}" \ 90 --output-dir "${SCRIPT_ROOT}/pkg/package-server/client/clientset" \ 91 --output-pkg "${OLM_MODULE}/pkg/package-server/client/clientset" \ 92 --clientset-name versioned \ 93 --input-base "${SCRIPT_ROOT}/pkg/package-server/apis" \ 94 --input operators/v1 95 96 # generate pacakge-server operators internal client 97 ${CLIENT_GEN} \ 98 -v "${KUBE_VERBOSE}" \ 99 --go-header-file "${BOILERPLATE}" \ 100 --output-dir "${SCRIPT_ROOT}/pkg/package-server/client/clientset" \ 101 --output-pkg "${OLM_MODULE}/pkg/package-server/client/clientset" \ 102 --clientset-name internalversion \ 103 --input-base "${SCRIPT_ROOT}/pkg/package-server/apis" \ 104 --input operators 105 106 # generate listers for both api clients 107 ${LISTER_GEN} \ 108 -v "${KUBE_VERBOSE}" \ 109 --go-header-file "${BOILERPLATE}" \ 110 --output-dir "${SCRIPT_ROOT}/pkg/package-server/client/listers" \ 111 --output-pkg "${OLM_MODULE}/pkg/package-server/client/listers" \ 112 "${OLM_MODULE}/pkg/package-server/apis/operators" \ 113 "${OLM_MODULE}/pkg/package-server/apis/operators/v1" 114 115 # generate informers for both api clients 116 ${INFORMER_GEN} \ 117 -v "${KUBE_VERBOSE}" \ 118 --go-header-file "${BOILERPLATE}" \ 119 --output-dir "${SCRIPT_ROOT}/pkg/package-server/client/informers" \ 120 --output-pkg "${OLM_MODULE}/pkg/package-server/client/informers" \ 121 --versioned-clientset-package "${OLM_MODULE}/pkg/package-server/client/clientset/versioned" \ 122 --internal-clientset-package "${OLM_MODULE}/pkg/package-server/client/clientset/internalversion" \ 123 --listers-package "${OLM_MODULE}/pkg/package-server/client/listers" \ 124 "${OLM_MODULE}/pkg/package-server/apis/operators" \ 125 "${OLM_MODULE}/pkg/package-server/apis/operators/v1"