Skip to content

Commit

Permalink
chore: add verify scripts and verify-codegen CI (#513)
Browse files Browse the repository at this point in the history
  • Loading branch information
lingsamuel authored May 31, 2021
1 parent 2f2e6f8 commit 495c631
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 23 deletions.
40 changes: 40 additions & 0 deletions .github/workflows/verify-codegen.yml
Original file line number Diff line number Diff line change
@@ -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
22 changes: 21 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 14 additions & 15 deletions pkg/types/apisix/v1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 11 additions & 7 deletions utils/update-codegen.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
72 changes: 72 additions & 0 deletions utils/verify-codegen.sh
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 495c631

Please sign in to comment.