diff --git a/.github/workflows/verify-codegen.yml b/.github/workflows/verify-codegen.yml new file mode 100644 index 0000000000..2e9892807f --- /dev/null +++ b/.github/workflows/verify-codegen.yml @@ -0,0 +1,40 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +name: verify-codegen + +on: + push: + branches: + - master + pull_request: + branches: + - master +jobs: + run-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: setup go + uses: actions/setup-go@v1 + with: + go-version: '1.13' + - name: make verify-codegen + working-directory: ./ + run: | + make verify-codegen diff --git a/Makefile b/Makefile index 77f398fa9f..70d15820df 100644 --- a/Makefile +++ b/Makefile @@ -149,8 +149,28 @@ release-src: .PHONY: gen-tools gen-tools: go mod download - go install k8s.io/code-generator/cmd/{client-gen,lister-gen,informer-gen,deepcopy-gen} + @bash -c 'go install k8s.io/code-generator/cmd/{client-gen,lister-gen,informer-gen,deepcopy-gen}' +### codegen: Generate codes for clientset, informer, deepcopy, etc. .PHONY: codegen codegen: gen-tools ./utils/update-codegen.sh + +### verify-codegen: Verify whether the generated codes (clientset, informer, deepcopy, etc) are up to date. +.PHONY: verify-codegen +verify-codegen: gen-tools + ./utils/verify-codegen.sh + +### verify-license: Verify license headers. +.PHONY: verify-license +verify-license: + docker run -it --rm -v $(PWD):/github/workspace apache/skywalking-eyes header check -v info + +### verify-mdlint: Verify markdown files lint rules. +.PHONY: verify-mdlint +verify-mdlint: + docker run -it --rm -v $(PWD):/work tmknom/markdownlint '**/*.md' --ignore node_modules + +### verify-all: Verify all verify- rules. +.PHONY: verify-all +verify-all: verify-codegen verify-license verify-mdlint diff --git a/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go b/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go index 09308e5660..cdc867cb5c 100644 --- a/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go +++ b/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go @@ -28,6 +28,7 @@ import ( // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ApisixClusterAdminConfig) DeepCopyInto(out *ApisixClusterAdminConfig) { *out = *in + out.ClientTimeout = in.ClientTimeout return } diff --git a/pkg/types/apisix/v1/zz_generated.deepcopy.go b/pkg/types/apisix/v1/zz_generated.deepcopy.go index c7989222ba..911eb86aed 100644 --- a/pkg/types/apisix/v1/zz_generated.deepcopy.go +++ b/pkg/types/apisix/v1/zz_generated.deepcopy.go @@ -1,20 +1,19 @@ // +build !ignore_autogenerated -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Code generated by deepcopy-gen. DO NOT EDIT. diff --git a/utils/update-codegen.sh b/utils/update-codegen.sh index 8367c2cfab..851ba7c759 100755 --- a/utils/update-codegen.sh +++ b/utils/update-codegen.sh @@ -24,20 +24,24 @@ SCRIPT_ROOT=$(dirname "${BASH_SOURCE[0]}") PROJECT_ROOT="$SCRIPT_ROOT/.." GENERATED_ROOT="$PROJECT_ROOT/.generated" +PKG_NAME="github.com/apache/apisix-ingress-controller" + # Make sure no pollution rm -rf "$GENERATED_ROOT" bash "${SCRIPT_ROOT}"/generate-groups.sh "deepcopy,client,informer,lister" \ - github.com/apache/apisix-ingress-controller/pkg/kube/apisix/client github.com/apache/apisix-ingress-controller/pkg/kube/apisix/apis \ - config:v1,v2alpha1 github.com/apache/apisix-ingress-controller \ + ${PKG_NAME}/pkg/kube/apisix/client ${PKG_NAME}/pkg/kube/apisix/apis \ + config:v1,v2alpha1 ${PKG_NAME} \ --output-base "$GENERATED_ROOT" \ - --go-header-file "${SCRIPT_ROOT}"/boilerplate.go.txt + --go-header-file "${SCRIPT_ROOT}"/boilerplate.go.txt \ + "$@" bash "${SCRIPT_ROOT}"/generate-groups.sh "deepcopy" \ - github.com/apache/apisix-ingress-controller/pkg/types github.com/apache/apisix-ingress-controller/pkg/types \ - apisix:v1 github.com/apache/apisix-ingress-controller \ + ${PKG_NAME}/pkg/types ${PKG_NAME}/pkg/types \ + apisix:v1 ${PKG_NAME} \ --output-base "$GENERATED_ROOT" \ - --go-header-file "${SCRIPT_ROOT}"/boilerplate.go.txt + --go-header-file "${SCRIPT_ROOT}"/boilerplate.go.txt \ + "$@" -cp -r "$GENERATED_ROOT/github.com/apache/apisix-ingress-controller/"** "$PROJECT_ROOT" +cp -r "$GENERATED_ROOT/${PKG_NAME}/"** "$PROJECT_ROOT" rm -rf "$GENERATED_ROOT" diff --git a/utils/verify-codegen.sh b/utils/verify-codegen.sh new file mode 100755 index 0000000000..8463ccbd4a --- /dev/null +++ b/utils/verify-codegen.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +set -o errexit +set -o nounset +set -o pipefail + +SCRIPT_ROOT=$(dirname "${BASH_SOURCE[0]}") +PROJECT_ROOT="$SCRIPT_ROOT/.." +GENERATED_ROOT="$PROJECT_ROOT/.generated" + +PKG_NAME="github.com/apache/apisix-ingress-controller" + +# Make sure no pollution +rm -rf "$GENERATED_ROOT" +trap 'rm -rf "$GENERATED_ROOT"' EXIT + +# Prepare existed codes +mkdir -p "${GENERATED_ROOT}/${PKG_NAME}/pkg/kube/apisix" +cp -r "${PROJECT_ROOT}/pkg/kube/apisix/client" "${GENERATED_ROOT}/${PKG_NAME}/pkg/kube/apisix" + +cp_deepcopy() { + local SRC_PATH="$1" + local CP_SCRIPT='FILE_PATH=$1; TARGET_PATH=$2; DIR="$(dirname $FILE_PATH)"; mkdir -p $TARGET_PATH/$DIR && cp $FILE_PATH $TARGET_PATH/$DIR' + find "${PROJECT_ROOT}/$SRC_PATH" -type f -name 'zz_generated.deepcopy.go' \ + -exec sh -c "$CP_SCRIPT" _ {} "${GENERATED_ROOT}/${PKG_NAME}" ';' +} + +cp_deepcopy "pkg/kube/apisix/" +cp_deepcopy "pkg/types/apisix/" + +# Verify +ret=0 + +bash "${SCRIPT_ROOT}"/generate-groups.sh "deepcopy,client,informer,lister" \ + ${PKG_NAME}/pkg/kube/apisix/client ${PKG_NAME}/pkg/kube/apisix/apis \ + config:v1,v2alpha1 ${PKG_NAME} \ + --output-base "$GENERATED_ROOT" \ + --go-header-file "${SCRIPT_ROOT}"/boilerplate.go.txt \ + --verify-only || ret=$? + + +if [[ $ret -eq 0 ]]; then +bash "${SCRIPT_ROOT}"/generate-groups.sh "deepcopy" \ + ${PKG_NAME}/pkg/types ${PKG_NAME}/pkg/types \ + apisix:v1 ${PKG_NAME} \ + --output-base "$GENERATED_ROOT" \ + --go-header-file "${SCRIPT_ROOT}"/boilerplate.go.txt \ + --verify-only|| ret=$? +fi + +if [[ $ret -eq 0 ]]; then + echo "Generated codes up to date." +else + echo "Generated codes out of date. Please run \`make codegen\`" + exit 1 +fi