From 08c1bfd897eabab227a2d92a4d663d6a71d3ab35 Mon Sep 17 00:00:00 2001 From: Rafael Franzke Date: Mon, 6 Apr 2020 06:49:41 +0200 Subject: [PATCH] Adapt hack scripts --- .ci/check | 89 ----------- .ci/component_descriptor | 21 +-- .ci/set_dependency_version | 108 +------------ .ci/test | 66 -------- .ci/verify | 14 ++ .dockerignore | 15 +- .golangci.yaml | 17 ++ Dockerfile | 8 +- Makefile | 149 ++++++++---------- docs/deployment/aks.md | 2 +- extensions/hack/LICENSE_BOILERPLATE.txt | 15 -- go.mod | 1 + go.sum | 7 + {extensions/hack => hack}/.ci/ci.go | 0 .../hack => hack}/.ci/component_descriptor | 8 +- {extensions/hack => hack}/.ci/prepare_release | 0 .../hack => hack}/.ci/set_dependency_version | 0 hack/api-reference/core.md | 4 - hack/api-reference/extensions.md | 4 - hack/api-reference/settings.md | 4 - hack/api-reference/template/pkg.tpl | 6 - hack/api-reference/template/tools.go | 18 +++ .../hack/check.sh => hack/check-charts.sh | 26 +-- {extensions/hack => hack}/check-generate.sh | 6 +- extensions/hack/common.sh => hack/check.sh | 58 ++++--- {extensions/hack => hack}/clean.sh | 2 +- {extensions/hack => hack}/format.sh | 0 {extensions/hack => hack}/generate.sh | 2 +- ...t-build-ld-flags => get-build-ld-flags.sh} | 6 +- .../hack => hack}/install-requirements.sh | 4 +- {extensions/hack => hack}/install.sh | 2 +- hack/{ => local-development}/common | 0 hack/{ => local-development}/dev-setup | 4 +- .../dev-setup-register-gardener | 0 .../local-garden/README.md | 23 +-- .../local-garden/apply-rbac-garden-ns | 0 .../local-garden/certificates/certs/ca.crt | 0 .../certificates/certs/default-admin.crt | 0 .../certs/default-controller-manager.crt | 0 .../certificates/certs/front-proxy-client.crt | 0 .../certs/kube-apiserver-etcd-client.crt | 0 .../certificates/certs/kube-apiserver.crt | 0 .../certs/kube-etcd-healthcheck-client.crt | 0 .../certificates/certs/kube-etcd-peer.crt | 0 .../certificates/certs/kube-etcd.crt | 0 .../local-garden/certificates/certs/sa.pub | 0 .../local-garden/certificates/keys/ca.key | 0 .../certificates/keys/default-admin.key | 0 .../keys/default-controller-manager.key | 0 .../certificates/keys/front-proxy-client.key | 0 .../keys/kube-apiserver-etcd-client.key | 0 .../certificates/keys/kube-apiserver.key | 0 .../keys/kube-etcd-healthcheck-client.key | 0 .../certificates/keys/kube-etcd-peer.key | 0 .../certificates/keys/kube-etcd.key | 0 .../local-garden/certificates/keys/sa.key | 0 .../local-garden/cleanup | 0 .../garden-certificate-generator.go | 0 .../local-garden/img/2020-01-23-10-03-21.png | Bin .../kubeconfigs/default-admin.conf | 0 .../default-controller-manager.conf | 0 .../local-garden/run-gardener-etcd | 2 +- .../local-garden/run-kube-apiserver | 2 +- .../local-garden/run-kube-controller-manager | 2 +- .../local-garden/run-kube-etcd | 2 +- .../local-imagevector-overwrite | 4 +- hack/{ => local-development}/start-apiserver | 10 +- .../start-controller-manager | 6 +- hack/{ => local-development}/start-gardenlet | 6 +- hack/{ => local-development}/start-scheduler | 6 +- .../start-seed-admission-controller | 8 +- hack/{generate-code => test-cover-clean.sh} | 11 +- hack/test-cover.sh | 32 ++++ ...erate-reference-doc => test-prometheus.sh} | 16 +- {extensions/hack => hack}/test.sh | 0 hack/update-protobuf.sh | 24 +-- hack/{ => usage}/delete | 0 hack/{ => usage}/migrate-etcd | 0 hack/{ => usage}/retry-shoot-operation | 0 hack/{ => usage}/shoot-operation | 0 pkg/apis/core/v1alpha1/doc.go | 1 - pkg/apis/core/v1beta1/doc.go | 1 + pkg/apis/doc.go | 3 + pkg/apis/extensions/v1alpha1/doc.go | 1 + pkg/apis/settings/v1alpha1/doc.go | 1 + 85 files changed, 296 insertions(+), 531 deletions(-) delete mode 100755 .ci/check delete mode 100755 .ci/test create mode 100755 .ci/verify create mode 100644 .golangci.yaml delete mode 100755 extensions/hack/LICENSE_BOILERPLATE.txt rename {extensions/hack => hack}/.ci/ci.go (100%) rename {extensions/hack => hack}/.ci/component_descriptor (86%) rename {extensions/hack => hack}/.ci/prepare_release (100%) rename {extensions/hack => hack}/.ci/set_dependency_version (100%) create mode 100644 hack/api-reference/template/tools.go rename extensions/hack/check.sh => hack/check-charts.sh (65%) rename {extensions/hack => hack}/check-generate.sh (94%) rename extensions/hack/common.sh => hack/check.sh (53%) mode change 100644 => 100755 rename {extensions/hack => hack}/clean.sh (96%) rename {extensions/hack => hack}/format.sh (100%) rename {extensions/hack => hack}/generate.sh (93%) rename hack/{get-build-ld-flags => get-build-ld-flags.sh} (94%) rename {extensions/hack => hack}/install-requirements.sh (93%) rename {extensions/hack => hack}/install.sh (88%) rename hack/{ => local-development}/common (100%) rename hack/{ => local-development}/dev-setup (99%) rename hack/{ => local-development}/dev-setup-register-gardener (100%) rename hack/{ => local-development}/local-garden/README.md (83%) rename hack/{ => local-development}/local-garden/apply-rbac-garden-ns (100%) rename hack/{ => local-development}/local-garden/certificates/certs/ca.crt (100%) rename hack/{ => local-development}/local-garden/certificates/certs/default-admin.crt (100%) rename hack/{ => local-development}/local-garden/certificates/certs/default-controller-manager.crt (100%) rename hack/{ => local-development}/local-garden/certificates/certs/front-proxy-client.crt (100%) rename hack/{ => local-development}/local-garden/certificates/certs/kube-apiserver-etcd-client.crt (100%) rename hack/{ => local-development}/local-garden/certificates/certs/kube-apiserver.crt (100%) rename hack/{ => local-development}/local-garden/certificates/certs/kube-etcd-healthcheck-client.crt (100%) rename hack/{ => local-development}/local-garden/certificates/certs/kube-etcd-peer.crt (100%) rename hack/{ => local-development}/local-garden/certificates/certs/kube-etcd.crt (100%) rename hack/{ => local-development}/local-garden/certificates/certs/sa.pub (100%) rename hack/{ => local-development}/local-garden/certificates/keys/ca.key (100%) rename hack/{ => local-development}/local-garden/certificates/keys/default-admin.key (100%) rename hack/{ => local-development}/local-garden/certificates/keys/default-controller-manager.key (100%) rename hack/{ => local-development}/local-garden/certificates/keys/front-proxy-client.key (100%) rename hack/{ => local-development}/local-garden/certificates/keys/kube-apiserver-etcd-client.key (100%) rename hack/{ => local-development}/local-garden/certificates/keys/kube-apiserver.key (100%) rename hack/{ => local-development}/local-garden/certificates/keys/kube-etcd-healthcheck-client.key (100%) rename hack/{ => local-development}/local-garden/certificates/keys/kube-etcd-peer.key (100%) rename hack/{ => local-development}/local-garden/certificates/keys/kube-etcd.key (100%) rename hack/{ => local-development}/local-garden/certificates/keys/sa.key (100%) rename hack/{ => local-development}/local-garden/cleanup (100%) rename hack/{ => local-development}/local-garden/garden-certificate-generator.go (100%) rename hack/{ => local-development}/local-garden/img/2020-01-23-10-03-21.png (100%) rename hack/{ => local-development}/local-garden/kubeconfigs/default-admin.conf (100%) rename hack/{ => local-development}/local-garden/kubeconfigs/default-controller-manager.conf (100%) rename hack/{ => local-development}/local-garden/run-gardener-etcd (91%) rename hack/{ => local-development}/local-garden/run-kube-apiserver (96%) rename hack/{ => local-development}/local-garden/run-kube-controller-manager (94%) rename hack/{ => local-development}/local-garden/run-kube-etcd (95%) rename hack/{ => local-development}/local-imagevector-overwrite (92%) rename hack/{ => local-development}/start-apiserver (90%) rename hack/{ => local-development}/start-controller-manager (80%) rename hack/{ => local-development}/start-gardenlet (86%) rename hack/{ => local-development}/start-scheduler (81%) rename hack/{ => local-development}/start-seed-admission-controller (75%) rename hack/{generate-code => test-cover-clean.sh} (78%) create mode 100755 hack/test-cover.sh rename hack/{generate-reference-doc => test-prometheus.sh} (63%) rename {extensions/hack => hack}/test.sh (100%) rename hack/{ => usage}/delete (100%) rename hack/{ => usage}/migrate-etcd (100%) rename hack/{ => usage}/retry-shoot-operation (100%) rename hack/{ => usage}/shoot-operation (100%) diff --git a/.ci/check b/.ci/check deleted file mode 100755 index 188318633b2..00000000000 --- a/.ci/check +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env bash - -set -e - -export GO111MODULE=on - -# For the check step concourse will set the following environment variables: -# SOURCE_PATH - path to component repository root directory. - -# not all platforms support readlink -f -# SOURCE_PATH must be set, and treat it as absolute path -rlink="" -set +e -readlink -f /tmp >/dev/null 2>&1 -if [ $? -eq 0 ]; then - # do not support readlink -f, so need alternative - rlink="readlink -f" -fi -set -e - - -if [[ -z "${SOURCE_PATH}" ]]; then - if [ -z "$rlink" ]; then - echo "ERROR: system does not support 'readlink -f' and SOURCE_PATH not set, exiting." >&2 - exit 1 - fi - export SOURCE_PATH="$($rlink "$(dirname ${0})/..")" -else - if [ -z "$rlink" ]; then - echo "warning: system does not support 'readlink -f', treating SOURCE_PATH as absolute path with symlinks resolved." >&2 - else - export SOURCE_PATH="$($rlink ${SOURCE_PATH})" - fi -fi - -cd "${SOURCE_PATH}" - -# Build Golint. -go install -mod=vendor ./vendor/golang.org/x/lint/golint - -# Install Helm (see https://docs.helm.sh/using_helm/#from-script). -if ! which helm 1>/dev/null; then - export DESIRED_VERSION=v2.14.3 - echo -n "Installing helm... " - install_helm_path="./get_helm.sh" - curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > "${install_helm_path}" - chmod 700 "${install_helm_path}" - bash "${install_helm_path}" - rm ./"${install_helm_path}" - echo "done." -fi - -############################################################################### - -PACKAGES="$(go list -mod=vendor -e ./... | grep -vE '/pkg/apis|/pkg/controllermanager/apis|/pkg/scheduler/apis|/pkg/gardenlet/apis|/pkg/openapi')" -PACKAGES_DIRS="$(echo ${PACKAGES} | sed "s|github.com/gardener/gardener|.|g")" - -# Execute static code checks. -echo "Running go vet..." -go vet -mod=vendor ${PACKAGES} - -# go fmt ignores -mod=vendor and performs module lookup (https://github.com/golang/go/issues/27841). -# Also go fmt is just alias for gofmt -l -w and does not support flags that gofmt does. -# That is why gofmt is used. - -# Execute automatic code formatting directive. -echo "Running gofmt..." -gofmt -l -w -s ${PACKAGES_DIRS} - -# Execute lint checks. -echo "Running golint..." -for dir in ${PACKAGES_DIRS}; do - golint -set_exit_status $(find $dir -maxdepth 1 -name "*.go" | grep -vE 'zz_generated|_test.go') -done - -# Check for chart symlink errors -BROKEN_SYMLINKS=$(find -L ${SOURCE_PATH}/charts -type l) -if [[ -n ${BROKEN_SYMLINKS} ]]; then - echo "Found broken symlinks:" - echo ${BROKEN_SYMLINKS} - exit 1 -fi - -# Render chart dirs -ALL_CHART_DIRS=$(find ${SOURCE_PATH}/charts -type f -name "Chart.yaml" -exec dirname {} \; | sort -r) -for dir in ${ALL_CHART_DIRS} -do - helm template ${dir} 1> /dev/null -done diff --git a/.ci/component_descriptor b/.ci/component_descriptor index 2c5c36fff0c..4cc839749ad 100755 --- a/.ci/component_descriptor +++ b/.ci/component_descriptor @@ -1,22 +1,3 @@ #!/usr/bin/env bash -set -e - -images_file="$(dirname "$0")/../charts/images.yaml" -images="$(yaml2json < $images_file)" - -echo "enriching creating component descriptor from ${BASE_DEFINITION_PATH}" - -eval "$(jq -r ".images | - map(select(.sourceRepository != \"github.com/gardener/gardener\") | - if (.name == \"hyperkube\" or .name == \"kube-apiserver\" or .name == \"kube-controller-manager\" or .name == \"kube-scheduler\" or .name == \"kube-proxy\") then - \"--generic-dependencies '{\\\"name\\\": \\\"\" + .name + \"\\\", \\\"version\\\": \\\"\" + .tag + \"\\\"}'\" - elif (.repository | startswith(\"eu.gcr.io/gardener-project/gardener\")) then - \"--component-dependencies '{\\\"name\\\": \\\"\" + .sourceRepository + \"\\\", \\\"version\\\": \\\"\" + .tag + \"\\\"}'\" - else - \"--container-image-dependencies '{\\\"name\\\": \\\"\" + .name + \"\\\", \\\"image_reference\\\": \\\"\" + .repository + \":\" + .tag + \"\\\", \\\"version\\\": \\\"\" + .tag + \"\\\"}'\" - end) | - \"${ADD_DEPENDENCIES_CMD} \\\\\n\" + - join(\" \\\\\n\")" <<< "$images")" - -cp "${BASE_DEFINITION_PATH}" "${COMPONENT_DESCRIPTOR_PATH}" +"$(dirname $0)"/../hack/.ci/component_descriptor "$(dirname $0)"/.. diff --git a/.ci/set_dependency_version b/.ci/set_dependency_version index fcfa5bf5998..d9a7000d764 100755 --- a/.ci/set_dependency_version +++ b/.ci/set_dependency_version @@ -1,107 +1,3 @@ -#!/usr/bin/env python3 +#!/usr/bin/env bash -import pathlib -import yaml - -import util -import product.model - -dependency_type = util.check_env('DEPENDENCY_TYPE') -if not dependency_type == 'component': - util.fail('don\'t know how to upgrade dependency type: ' + str(dependency_type)) - -component_reference = product.model.ComponentReference.create( - name=util.check_env('DEPENDENCY_NAME'), - version=util.check_env('DEPENDENCY_VERSION'), -) - -images_file = pathlib.Path( - util.check_env('REPO_DIR'), - 'charts', - 'images.yaml', -) - -class ImagesParser(object): - ''' - a naive YAML-parser crafted for the special case of processing - gardener's images.yaml file; crafted that way to preserve comments/empty lines - ''' - def __init__( - self, - images_file, - names, - target_version, - ): - self.images_file = images_file - self.lines = images_file.read_text().split('\n') - self.names = names - self.target_version = target_version - self._line_idx = 0 - - def _line(self): - return self.lines[self._line_idx] - - def _next_line(self): - self._line_idx += 1 - return self._line() - - def _skip_to_next_entry(self, names): - while not self._line().startswith('-'): - self._next_line() - name = self._line().strip().split(':')[-1].strip() - - if name not in names: - self._next_line() - return self._skip_to_next_entry(names) - - # found one of the entries: - return name - - def _skip_to_next_tag(self): - self._next_line() - while not self._line().startswith('-'): - if self._line().strip().startswith('tag:'): - return - self._next_line() - raise RuntimeError('did not find tag attribute') - - def set_versions(self): - while self.names: - try: - name = self._skip_to_next_entry(self.names) - except IndexError: - print(str(self.names)) - util.fail('don\'t know how to update ' + str(self.names)) - self.names.remove(name) - self._skip_to_next_tag() - tag_line = self._line() - indent = len(tag_line) - len(tag_line.lstrip()) - patched_line = ' ' * indent + 'tag: "{version}"'.format(version=self.target_version) - self.lines[self._line_idx] = patched_line - - def write_updated_file(self): - self.images_file.write_text( - '\n'.join(self.lines) - ) - - -# handle special cases -name = component_reference.github_repo() -if name == 'autoscaler': - names = ['cluster-autoscaler'] -elif name == 'vpn': - names = ['vpn-seed', 'vpn-shoot'] -elif name == 'logging': - names = ['fluentd-es', 'curator-es'] -else: - names = [name] - - -parser = ImagesParser( - images_file=images_file, - names=names, - target_version=str(component_reference.version()), -) - -parser.set_versions() -parser.write_updated_file() +"$(dirname $0)"/../hack/.ci/set_dependency_version diff --git a/.ci/test b/.ci/test deleted file mode 100755 index b56628560c2..00000000000 --- a/.ci/test +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env bash - -set -e - -# For the test step concourse will set the following environment variables: -# SOURCE_PATH - path to component repository root directory. - -# not all platforms support readlink -f -# SOURCE_PATH must be set, and treat it as absolute path -rlink="" -set +e -readlink -f /tmp >/dev/null 2>&1 -if [ $? -eq 0 ]; then - # do not support readlink -f, so need alternative - rlink="readlink -f" -else - greadlink -f /tmp >/dev/null 2>&1 - if [ $? -eq 0 ]; then - rlink="greadlink -f" - fi -fi -set -e - -if [[ -z "${SOURCE_PATH}" ]]; then - if [ -z "$rlink" ]; then - echo "ERROR: system does not support 'readlink -f' and SOURCE_PATH not set, exiting." >&2 - exit 1 - fi - export SOURCE_PATH="$($rlink "$(dirname ${0})/..")" -else - if [ -z "$rlink" ]; then - echo "warning: system does not support 'readlink -f', treating SOURCE_PATH as absolute path with symlinks resolved." >&2 - else - export SOURCE_PATH="$($rlink ${SOURCE_PATH})" - fi -fi - -cd "${SOURCE_PATH}" - -# Build the Ginkgo (test framework) binary to be able to execute the tests. -GO111MODULE=on go install -mod=vendor ./vendor/github.com/onsi/ginkgo/ginkgo - -# Install Prometheus mock test tool (promtool) -GO111MODULE=off go get -u github.com/prometheus/prometheus/cmd/promtool - -############################################################################### - -COVER_FLAG="" -if [[ ! -z "$COVERAGE" ]]; then - COVER_FLAG="-cover" -fi - -echo "Running ginkgo..." -GO111MODULE=on ginkgo ${COVER_FLAG} -r -mod=vendor cmd pkg plugin - -############################################################################### - -echo "Executing Prometheus alert tests" -pushd "$SOURCE_PATH/charts/seed-monitoring/charts/core/charts/prometheus" > /dev/null - promtool test rules rules-tests/*test.yaml -popd > /dev/null - -echo "Executing aggregate Prometheus alert tests" -pushd "$SOURCE_PATH/charts/seed-bootstrap/aggregate-prometheus-rules-tests" > /dev/null - promtool test rules *test.yaml -popd > /dev/null diff --git a/.ci/verify b/.ci/verify new file mode 100755 index 00000000000..2f99ba3c427 --- /dev/null +++ b/.ci/verify @@ -0,0 +1,14 @@ +#!/bin/bash + +cd "$(dirname $0)/.." + +git config --global user.email "gardener@sap.com" +git config --global user.name "Gardener CI/CD" + +apt-get update && apt-get install -y unzip + +mkdir -p /go/src/github.com/gardener/gardener +cp -r . /go/src/github.com/gardener/gardener +cd /go/src/github.com/gardener/gardener + +make verify-extended diff --git a/.dockerignore b/.dockerignore index 801f0289887..7c8a036e912 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,12 +2,17 @@ ** # Exclude folders relevant for build -!pkg/ +!.git +!charts/ !cmd/ -!vendor/ +!extensions/ +!hack/ +!pkg/ !plugin/ -!charts/ -!VERSION -!.git +!test/ +!vendor/ +!.golangci.yaml !go.mod !go.sum +!Makefile +!VERSION diff --git a/.golangci.yaml b/.golangci.yaml new file mode 100644 index 00000000000..1e05066b17d --- /dev/null +++ b/.golangci.yaml @@ -0,0 +1,17 @@ +run: + concurrency: 4 + deadline: 10m + + skip-dirs: + - pkg/client/core + - pkg/client/extensions + - pkg/client/settings + + skip-files: + - ".*\\.pb\\.go$" + +issues: + exclude-rules: + - linters: + - staticcheck + text: "SA1019:" # Excludes messages where deprecated variables are used diff --git a/Dockerfile b/Dockerfile index 0e60b598fcc..68b820097f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,13 +4,7 @@ FROM golang:1.13.9 AS builder WORKDIR /go/src/github.com/gardener/gardener COPY . . -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go install \ - -mod=vendor \ - -ldflags "-X github.com/gardener/gardener/pkg/version.gitVersion=$(cat VERSION) \ - -X github.com/gardener/gardener/pkg/version.gitTreeState=$([ -z git status --porcelain 2>/dev/null ] && echo clean || echo dirty) \ - -X github.com/gardener/gardener/pkg/version.gitCommit=$(git rev-parse --verify HEAD) \ - -X github.com/gardener/gardener/pkg/version.buildDate=$(date --iso-8601=seconds)" \ - ./... +RUN make install ############# base FROM alpine:3.11.3 AS base diff --git a/Makefile b/Makefile index efbf0a1fde8..9bbbc71e6fe 100644 --- a/Makefile +++ b/Makefile @@ -19,9 +19,9 @@ SCHEDULER_IMAGE_REPOSITORY := $(REGISTRY)/scheduler SEED_ADMISSION_IMAGE_REPOSITORY := $(REGISTRY)/seed-admission-controller GARDENLET_IMAGE_REPOSITORY := $(REGISTRY)/gardenlet IMAGE_TAG := $(shell cat VERSION) +PUSH_LATEST_TAG := true + WORKDIR := $(shell pwd) -PUSH_LATEST := true -LD_FLAGS := $(shell ./hack/get-build-ld-flags) LOCAL_GARDEN_LABEL := local-garden ######################################### @@ -30,25 +30,29 @@ LOCAL_GARDEN_LABEL := local-garden .PHONY: dev-setup dev-setup: - @./hack/dev-setup + @./hack/local-development/dev-setup + +.PHONY: dev-setup-register-gardener +dev-setup-register-gardener: + @./hack/local-development/dev-setup-register-gardener .PHONY: local-garden-up local-garden-up: # Remove old containers and create the docker user network - @-./hack/local-garden/cleanup + @-./hack/local-development/local-garden/cleanup @-docker network create gardener-dev --label $(LOCAL_GARDEN_LABEL) - # Start the nodeless kubernetes environment - @./hack/local-garden/run-kube-etcd $(LOCAL_GARDEN_LABEL) - @./hack/local-garden/run-kube-apiserver $(LOCAL_GARDEN_LABEL) - @./hack/local-garden/run-kube-controller-manager $(LOCAL_GARDEN_LABEL) + # Start the nodeless kubernetes environment + @./hack/local-development/local-garden/run-kube-etcd $(LOCAL_GARDEN_LABEL) + @./hack/local-development/local-garden/run-kube-apiserver $(LOCAL_GARDEN_LABEL) + @./hack/local-development/local-garden/run-kube-controller-manager $(LOCAL_GARDEN_LABEL) # This etcd will be used to storge gardener resources (e.g., seeds, shoots) - @./hack/local-garden/run-gardener-etcd $(LOCAL_GARDEN_LABEL) + @./hack/local-development/local-garden/run-gardener-etcd $(LOCAL_GARDEN_LABEL) # Applying proxy RBAC for the extension controller # After this step, you can start using the cluster at hack/local-garden/kubeconfigs/admin.conf - @./hack/local-garden/apply-rbac-garden-ns + @./hack/local-development/local-garden/apply-rbac-garden-ns # Now you can start using the cluster at with `export KUBECONFIG=hack/local-garden/kubeconfigs/default-admin.conf` # Then you need to run `make dev-setup` to setup config and certificates files for gardener's components and to register the gardener-apiserver. @@ -56,73 +60,35 @@ local-garden-up: .PHONY: local-garden-down local-garden-down: - @-./hack/local-garden/cleanup + @-./hack/local-development/local-garden/cleanup .PHONY: start-apiserver start-apiserver: - @./hack/start-apiserver + @./hack/local-development/start-apiserver .PHONY: start-controller-manager start-controller-manager: - @./hack/start-controller-manager + @./hack/local-development/start-controller-manager .PHONY: start-scheduler start-scheduler: - @./hack/start-scheduler + @./hack/local-development/start-scheduler .PHONY: start-seed-admission-controller start-seed-admission-controller: - @./hack/start-seed-admission-controller + @./hack/local-development/start-seed-admission-controller .PHONY: start-gardenlet start-gardenlet: - @./hack/start-gardenlet + @./hack/local-development/start-gardenlet ################################################################# # Rules related to binary build, Docker image build and release # ################################################################# -.PHONY: revendor -revendor: - @GO111MODULE=on go mod vendor - @GO111MODULE=on go mod tidy - -.PHONY: build -build: - @CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build \ - -mod=vendor \ - -ldflags "$(LD_FLAGS)" \ - -o bin/gardener-apiserver \ - cmd/gardener-apiserver/*.go - @CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build \ - -mod=vendor \ - -ldflags "$(LD_FLAGS)" \ - -o bin/gardener-controller-manager \ - cmd/gardener-controller-manager/*.go - @CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build \ - -mod=vendor \ - -ldflags "$(LD_FLAGS)" \ - -o bin/gardener-scheduler \ - cmd/gardener-scheduler/*.go - @CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build \ - -mod=vendor \ - -ldflags "$(LD_FLAGS)" \ - -o bin/gardener-seed-admission-controller \ - cmd/gardener-seed-admission-controller/*.go - @CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build \ - -mod=vendor \ - -ldflags "$(LD_FLAGS)" \ - -o bin/gardenlet \ - cmd/gardenlet/*.go - -.PHONY: build-local -build-local: - @GOBIN=${WORKDIR}/bin go install \ - -ldflags "$(LD_FLAGS)" \ - ./cmd/... - -.PHONY: release -release: build build-local docker-images docker-login docker-push rename-binaries +.PHONY: install +install: + @./hack/install.sh ./... .PHONY: docker-images docker-images: @@ -144,21 +110,15 @@ docker-push: @if ! docker images $(SEED_ADMISSION_IMAGE_REPOSITORY) | awk '{ print $$2 }' | grep -q -F $(IMAGE_TAG); then echo "$(SEED_ADMISSION_IMAGE_REPOSITORY) version $(IMAGE_TAG) is not yet built. Please run 'make docker-images'"; false; fi @if ! docker images $(GARDENLET_IMAGE_REPOSITORY) | awk '{ print $$2 }' | grep -q -F $(IMAGE_TAG); then echo "$(GARDENLET_IMAGE_REPOSITORY) version $(IMAGE_TAG) is not yet built. Please run 'make docker-images'"; false; fi @gcloud docker -- push $(APISERVER_IMAGE_REPOSITORY):$(IMAGE_TAG) - @if [[ "$(PUSH_LATEST)" == "true" ]]; then gcloud docker -- push $(APISERVER_IMAGE_REPOSITORY):latest; fi + @if [[ "$(PUSH_LATEST_TAG)" == "true" ]]; then gcloud docker -- push $(APISERVER_IMAGE_REPOSITORY):latest; fi @gcloud docker -- push $(CONROLLER_MANAGER_IMAGE_REPOSITORY):$(IMAGE_TAG) - @if [[ "$(PUSH_LATEST)" == "true" ]]; then gcloud docker -- push $(CONROLLER_MANAGER_IMAGE_REPOSITORY):latest; fi + @if [[ "$(PUSH_LATEST_TAG)" == "true" ]]; then gcloud docker -- push $(CONROLLER_MANAGER_IMAGE_REPOSITORY):latest; fi @gcloud docker -- push $(SCHEDULER_IMAGE_REPOSITORY):$(IMAGE_TAG) - @if [[ "$(PUSH_LATEST)" == "true" ]]; then gcloud docker -- push $(SCHEDULER_IMAGE_REPOSITORY):latest; fi + @if [[ "$(PUSH_LATEST_TAG)" == "true" ]]; then gcloud docker -- push $(SCHEDULER_IMAGE_REPOSITORY):latest; fi @gcloud docker -- push $(SEED_ADMISSION_IMAGE_REPOSITORY):$(IMAGE_TAG) - @if [[ "$(PUSH_LATEST)" == "true" ]]; then gcloud docker -- push $(SEED_ADMISSION_IMAGE_REPOSITORY):latest; fi + @if [[ "$(PUSH_LATEST_TAG)" == "true" ]]; then gcloud docker -- push $(SEED_ADMISSION_IMAGE_REPOSITORY):latest; fi @gcloud docker -- push $(GARDENLET_IMAGE_REPOSITORY):$(IMAGE_TAG) - @if [[ "$(PUSH_LATEST)" == "true" ]]; then gcloud docker -- push $(GARDENLET_IMAGE_REPOSITORY):latest; fi - -.PHONY: clean -clean: - @rm -rf bin/ - @rm -f *linux-amd64 - @rm -f *darwin-amd64 + @if [[ "$(PUSH_LATEST_TAG)" == "true" ]]; then gcloud docker -- push $(GARDENLET_IMAGE_REPOSITORY):latest; fi ##################################################################### # Rules for verification, formatting, linting, testing and cleaning # @@ -166,35 +126,54 @@ clean: .PHONY: install-requirements install-requirements: - @go install -mod=vendor ./vendor/github.com/gobuffalo/packr/v2/packr2 - @go install -mod=vendor ./vendor/github.com/golang/mock/mockgen - @go install -mod=vendor ./vendor/github.com/onsi/ginkgo/ginkgo + @go install -mod=vendor github.com/gobuffalo/packr/v2/packr2 + @go install -mod=vendor github.com/onsi/ginkgo/ginkgo + @go install -mod=vendor github.com/ahmetb/gen-crd-api-reference-docs + @go get github.com/golang/mock/mockgen + @GO111MODULE=off go get github.com/prometheus/prometheus/cmd/promtool @./hack/install-requirements.sh -.PHONY: verify -verify: check test +.PHONY: revendor +revendor: + @GO111MODULE=on go mod vendor + @GO111MODULE=on go mod tidy + +.PHONY: clean +clean: + @hack/clean.sh ./cmd/... ./extensions/... ./pkg/... ./plugin/... ./test/... + +.PHONY: check-generate +check-generate: + @hack/check-generate.sh ./cmd/... ./extensions/... ./pkg/... ./plugin/... ./test/... .PHONY: check check: - @.ci/check + @hack/check.sh --golangci-lint-config=./.golangci.yaml ./cmd/... ./extensions/... ./pkg/... ./plugin/... ./test/... + @hack/check-charts.sh ./charts + +.PHONY: generate +generate: + @hack/generate.sh ./cmd/... ./extensions/... ./pkg/... ./plugin/... ./test/... + +.PHONY: format +format: + @./hack/format.sh ./cmd ./extensions ./pkg ./plugin ./test .PHONY: test test: - @.ci/test + @./hack/test.sh -r ./cmd/... ./extensions/... ./pkg/... ./plugin/... + @./hack/test-prometheus.sh .PHONY: test-cov test-cov: - @env COVERAGE=1 .ci/test - @echo "mode: set" > gardener.coverprofile && find . -name "*.coverprofile" -type f | xargs cat | grep -v mode: | sort -r | awk '{if($$1 != last) {print $$0;last=$$1}}' >> gardener.coverprofile - @go tool cover -html=gardener.coverprofile -o=gardener.coverage.html - @rm gardener.coverprofile + @./hack/test-cover.sh -r ./cmd/... ./extensions/... ./pkg/... ./plugin/... .PHONY: test-clean test-clean: - @find . -name "*.coverprofile" -type f -delete - @rm -f gardener.coverage.html + @./hack/test-cover-clean.sh -.PHONY: generate -generate: - @./hack/generate-code - @./hack/generate-reference-doc +.PHONY: verify +verify: check format test + +.PHONY: verify-extended +verify-extended: install-requirements check-generate check format test-cov test-clean diff --git a/docs/deployment/aks.md b/docs/deployment/aks.md index 4de5594bf89..8d6a3b811e3 100644 --- a/docs/deployment/aks.md +++ b/docs/deployment/aks.md @@ -769,7 +769,7 @@ export KUBECONFIG=/tmp/johndoe-azure-kubeconfig.yaml Deleting a Shoot cluster is not straight forward, and this is to protect users from undesired/accidental cluster deletion. One has to place some special annotations to get a Shoot cluster removed. We use -the [hack/delete](../../hack/delete) script for this purpose. +the [hack/usage/delete](../../hack/usage/delete) script for this purpose. Please refer to [Creating / Deleting a Shoot cluster](../usage/shoots.md) document for more details. diff --git a/extensions/hack/LICENSE_BOILERPLATE.txt b/extensions/hack/LICENSE_BOILERPLATE.txt deleted file mode 100755 index e12758c65a2..00000000000 --- a/extensions/hack/LICENSE_BOILERPLATE.txt +++ /dev/null @@ -1,15 +0,0 @@ -/* -Copyright (c) YEAR SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file - -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. -*/ diff --git a/go.mod b/go.mod index f79d1070314..e6c2e02b7af 100644 --- a/go.mod +++ b/go.mod @@ -38,6 +38,7 @@ require ( go.uber.org/zap v1.13.0 golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f + golang.org/x/tools v0.0.0-20200403190813-44a64ad78b9b // indirect gomodules.xyz/jsonpatch/v2 v2.0.1 google.golang.org/grpc v1.26.0 gopkg.in/yaml.v2 v2.2.8 diff --git a/go.sum b/go.sum index d4239317924..821dff4a1aa 100644 --- a/go.sum +++ b/go.sum @@ -545,6 +545,7 @@ github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= @@ -611,6 +612,8 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180112015858-5ccada7d0a7b/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -635,6 +638,7 @@ golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -719,12 +723,15 @@ golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191203134012-c197fd4bf371/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191230220329-2aa90c603ae3 h1:2+KluhQfJ1YhW+TB1KrISS2SfiG1pLEoseB0D4VF/bo= golang.org/x/tools v0.0.0-20191230220329-2aa90c603ae3/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200403190813-44a64ad78b9b h1:AFZdJUT7jJYXQEC29hYH/WZkoV7+KhwxQGmdZ19yYoY= +golang.org/x/tools v0.0.0-20200403190813-44a64ad78b9b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= diff --git a/extensions/hack/.ci/ci.go b/hack/.ci/ci.go similarity index 100% rename from extensions/hack/.ci/ci.go rename to hack/.ci/ci.go diff --git a/extensions/hack/.ci/component_descriptor b/hack/.ci/component_descriptor similarity index 86% rename from extensions/hack/.ci/component_descriptor rename to hack/.ci/component_descriptor index c4c7eddb30f..6db6b564946 100755 --- a/extensions/hack/.ci/component_descriptor +++ b/hack/.ci/component_descriptor @@ -3,6 +3,7 @@ set -e repo_root_dir="$1" +repo_name="${2:-github.com/gardener/gardener}" descriptor_out_file="${COMPONENT_DESCRIPTOR_PATH}" echo "enriching creating component descriptor from ${BASE_DEFINITION_PATH}" @@ -10,9 +11,10 @@ echo "enriching creating component descriptor from ${BASE_DEFINITION_PATH}" if [[ -f "$repo_root_dir/charts/images.yaml" ]]; then images="$(yaml2json < "$repo_root_dir/charts/images.yaml")" eval "$(jq -r ".images | - map(if (.name == \"hyperkube\" or .repository == \"k8s.gcr.io/hyperkube\") then + map(select(.sourceRepository != \"$repo_name\") | + if (.name == \"hyperkube\" or .name == \"kube-apiserver\" or .name == \"kube-controller-manager\" or .name == \"kube-scheduler\" or .name == \"kube-proxy\") then \"--generic-dependencies '{\\\"name\\\": \\\"\" + .name + \"\\\", \\\"version\\\": \\\"\" + .tag + \"\\\"}'\" - elif (.repository | startswith(\"eu.gcr.io/gardener-project\")) then + elif (.repository | startswith(\"eu.gcr.io/gardener-project/gardener\")) then \"--component-dependencies '{\\\"name\\\": \\\"\" + .sourceRepository + \"\\\", \\\"version\\\": \\\"\" + .tag + \"\\\"}'\" else \"--container-image-dependencies '{\\\"name\\\": \\\"\" + .name + \"\\\", \\\"image_reference\\\": \\\"\" + .repository + \":\" + .tag + \"\\\", \\\"version\\\": \\\"\" + .tag + \"\\\"}'\" @@ -42,7 +44,7 @@ if [[ -d "$repo_root_dir/charts/" ]]; then gardener="eu.gcr.io/gardener-project/gardener" if [[ "$NAME" == "hyperkube" ]]; then ${ADD_DEPENDENCIES_CMD} --generic-dependencies "{\"name\": \"$NAME\", \"version\": \"$TAG\"}" - elif [[ $REPOSITORY =~ "eu.gcr.io/gardener-project/gardener*" ]]; then + elif [[ $REPOSITORY =~ "eu.gcr.io/gardener-project/gardener"* ]]; then ${ADD_DEPENDENCIES_CMD} --generic-dependencies "{\"name\": \"$NAME\", \"version\": \"$TAG\"}" else ${ADD_DEPENDENCIES_CMD} --container-image-dependencies "{\"name\": \"${NAME}\", \"image_reference\": \"${REPOSITORY}:${TAG}\", \"version\": \"$TAG\"}" diff --git a/extensions/hack/.ci/prepare_release b/hack/.ci/prepare_release similarity index 100% rename from extensions/hack/.ci/prepare_release rename to hack/.ci/prepare_release diff --git a/extensions/hack/.ci/set_dependency_version b/hack/.ci/set_dependency_version similarity index 100% rename from extensions/hack/.ci/set_dependency_version rename to hack/.ci/set_dependency_version diff --git a/hack/api-reference/core.md b/hack/api-reference/core.md index bdd89160a88..bf6e812f92f 100644 --- a/hack/api-reference/core.md +++ b/hack/api-reference/core.md @@ -7435,7 +7435,3 @@ KubeletConfig
-

-Generated with gen-crd-api-reference-docs -on git commit 5743c5d16. -

diff --git a/hack/api-reference/extensions.md b/hack/api-reference/extensions.md index 7d65063abff..7a514acd644 100644 --- a/hack/api-reference/extensions.md +++ b/hack/api-reference/extensions.md @@ -3354,7 +3354,3 @@ the cluster-autoscaler properly.


-

-Generated with gen-crd-api-reference-docs -on git commit 5743c5d16. -

diff --git a/hack/api-reference/settings.md b/hack/api-reference/settings.md index 5c0f97b3d85..67ef2ffb2d3 100644 --- a/hack/api-reference/settings.md +++ b/hack/api-reference/settings.md @@ -553,7 +553,3 @@ Required.


-

-Generated with gen-crd-api-reference-docs -on git commit 5743c5d16. -

diff --git a/hack/api-reference/template/pkg.tpl b/hack/api-reference/template/pkg.tpl index 2f03a803b61..1312e1259b5 100644 --- a/hack/api-reference/template/pkg.tpl +++ b/hack/api-reference/template/pkg.tpl @@ -40,10 +40,4 @@ {{ end }}
{{ end }} - -

- Generated with gen-crd-api-reference-docs - {{ with .gitCommit }} on git commit {{ . }}{{end}}. -

- {{ end }} diff --git a/hack/api-reference/template/tools.go b/hack/api-reference/template/tools.go new file mode 100644 index 00000000000..87d0d26f8b2 --- /dev/null +++ b/hack/api-reference/template/tools.go @@ -0,0 +1,18 @@ +// +build tools + +// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// 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. + +// This package imports things required by build scripts, to force `go mod` to see them as dependencies +package template diff --git a/extensions/hack/check.sh b/hack/check-charts.sh similarity index 65% rename from extensions/hack/check.sh rename to hack/check-charts.sh index 27433eaa161..5fdadacab67 100755 --- a/extensions/hack/check.sh +++ b/hack/check-charts.sh @@ -16,29 +16,11 @@ set -e -echo "> Check" +echo "> Check Helm charts" -echo "Executing check-generate" -$(dirname $0)/check-generate.sh $@ - -echo "Executing golangci-lint" -golangci-lint run --timeout 5m $@ - -echo "Checking for format issues with gofmt" -folders="pkg" -if [[ -d "$(dirname $0)/cmd" ]]; then - folders="cmd pkg" -fi -unformatted_files="$(gofmt -l "$folders")" -if [[ "$unformatted_files" ]]; then - echo "Unformatted files detected:" - echo "$unformatted_files" - exit 1 -fi - -if [[ -d "$(dirname $0)/charts" ]]; then +if [[ -d "$1" ]]; then echo "Checking for chart symlink errors" - BROKEN_SYMLINKS=$(find -L charts -type l) + BROKEN_SYMLINKS=$(find -L $1 -type l) if [[ "$BROKEN_SYMLINKS" ]]; then echo "Found broken symlinks:" echo "$BROKEN_SYMLINKS" @@ -46,7 +28,7 @@ if [[ -d "$(dirname $0)/charts" ]]; then fi echo "Checking whether all charts can be rendered" - for chart_file in charts/*/Chart.yaml; do + for chart_file in $1/*/Chart.yaml; do helm template "$(dirname "$chart_file")" 1> /dev/null done fi diff --git a/extensions/hack/check-generate.sh b/hack/check-generate.sh similarity index 94% rename from extensions/hack/check-generate.sh rename to hack/check-generate.sh index 9cc388b1f38..691ba56fa15 100755 --- a/extensions/hack/check-generate.sh +++ b/hack/check-generate.sh @@ -16,6 +16,8 @@ set -e +echo "> Generate Check" + check_branch="__generate_check" initialized_git=false stashed=false @@ -28,7 +30,7 @@ function delete-check-branch { function cleanup { if [[ "$generated" == true ]]; then - if ! clean_err="$("$(dirname $0)/clean.sh" && git reset --hard -q && git clean -qdf)"; then + if ! clean_err="$("$(dirname $0)/clean.sh" $@ && git reset --hard -q && git clean -qdf)"; then echo "Could not clean: $clean_err" fi fi @@ -84,7 +86,7 @@ if which git &>/dev/null; then git commit -q --allow-empty -m 'check-generate checkpoint' old_status="$(git status -s)" - if ! out=$("$(dirname $0)/clean.sh" 2>&1); then + if ! out=$("$(dirname $0)/clean.sh" $@ 2>&1); then echo "Error during calling $(dirname $0)/clean.sh: $out" exit 1 fi diff --git a/extensions/hack/common.sh b/hack/check.sh old mode 100644 new mode 100755 similarity index 53% rename from extensions/hack/common.sh rename to hack/check.sh index e82bd0848fb..91f6646c9d1 --- a/extensions/hack/common.sh +++ b/hack/check.sh @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!/bin/bash # # Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file # @@ -14,31 +14,37 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Enable tracing in this script off by setting the TRACE variable in your -# environment to any value: -# -# $ TRACE=1 test.sh -TRACE=${TRACE:-""} -if [[ -n "$TRACE" ]]; then - set -x -fi +set -e -# Turn colors in this script off by setting the NO_COLOR variable in your -# environment to any value: -# -# $ NO_COLOR=1 test.sh -NO_COLOR=${NO_COLOR:-""} -if [[ -z "$NO_COLOR" ]]; then - header=$'\e[1;33m' - reset=$'\e[0m' -else - header='' - reset='' -fi +GOLANGCI_LINT_CONFIG_FILE="" + +for arg in "$@"; do + case $arg in + --golangci-lint-config=*) + GOLANGCI_LINT_CONFIG_FILE="-c ${arg#*=}" + shift + ;; + esac +done -function header_text { - echo "$header$*$reset" -} +echo "> Check" + +echo "Executing golangci-lint" +golangci-lint run $GOLANGCI_LINT_CONFIG_FILE --timeout 10m $@ + +echo "Executing go vet" +go vet -mod=vendor $@ + +echo "Executing gofmt" +folders=() +for f in $@; do + folders+=( "$(echo $f | sed 's/\.\/\(.*\)\/\.\.\./\1/')" ) +done +unformatted_files="$(gofmt -l ${folders[*]})" +if [[ "$unformatted_files" ]]; then + echo "Unformatted files detected:" + echo "$unformatted_files" + exit 1 +fi -SOURCE_TREES=(./cmd/... ./pkg/...) -CMD_TREES=(./cmd/...) +echo "All checks successful" diff --git a/extensions/hack/clean.sh b/hack/clean.sh similarity index 96% rename from extensions/hack/clean.sh rename to hack/clean.sh index e1d510f1085..9b67b12c201 100755 --- a/extensions/hack/clean.sh +++ b/hack/clean.sh @@ -18,7 +18,7 @@ set -e echo "> Clean" -for source_tree in ${SOURCE_TREES[@]}; do +for source_tree in $@; do find "$(dirname "$source_tree")" -type f -name "controller-registration.yaml" -exec rm '{}' \; find "$(dirname "$source_tree")" -type f -name "zz_*.go" -exec rm '{}' \; grep -lr --include="*.go" "//go:generate packr2" . | xargs -I {} packr2 clean "{}/.." diff --git a/extensions/hack/format.sh b/hack/format.sh similarity index 100% rename from extensions/hack/format.sh rename to hack/format.sh diff --git a/extensions/hack/generate.sh b/hack/generate.sh similarity index 93% rename from extensions/hack/generate.sh rename to hack/generate.sh index cb8f8fce51f..0b3338a1c5b 100755 --- a/extensions/hack/generate.sh +++ b/hack/generate.sh @@ -18,4 +18,4 @@ set -e echo "> Generate" -GO111MODULE=on GOFLAGS="-mod=vendor" go generate $@ +GO111MODULE=on go generate -mod=vendor $@ diff --git a/hack/get-build-ld-flags b/hack/get-build-ld-flags.sh similarity index 94% rename from hack/get-build-ld-flags rename to hack/get-build-ld-flags.sh index c607cb94bad..b45f91803df 100755 --- a/hack/get-build-ld-flags +++ b/hack/get-build-ld-flags.sh @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -echo "-X github.com/gardener/gardener/pkg/version.gitVersion=$(cat VERSION) - -X github.com/gardener/gardener/pkg/version.gitTreeState=$([ -z git status --porcelain 2>/dev/null ] && echo clean || echo dirty) - -X github.com/gardener/gardener/pkg/version.gitCommit=$(git rev-parse --verify HEAD) +echo "-X github.com/gardener/gardener/pkg/version.gitVersion=$(cat "$(dirname $0)/../VERSION") \ + -X github.com/gardener/gardener/pkg/version.gitTreeState=$([ -z git status --porcelain 2>/dev/null ] && echo clean || echo dirty) \ + -X github.com/gardener/gardener/pkg/version.gitCommit=$(git rev-parse --verify HEAD) \ -X github.com/gardener/gardener/pkg/version.buildDate=$(date '+%Y-%m-%dT%H:%M:%S%z' | sed 's/\([0-9][0-9]\)$/:\1/g')" diff --git a/extensions/hack/install-requirements.sh b/hack/install-requirements.sh similarity index 93% rename from extensions/hack/install-requirements.sh rename to hack/install-requirements.sh index 7e58c653045..64e413327a6 100755 --- a/extensions/hack/install-requirements.sh +++ b/hack/install-requirements.sh @@ -19,8 +19,9 @@ set -e echo "> Installing requirements" export GO111MODULE=on -curl -sfL "https://install.goreleaser.com/github.com/golangci/golangci-lint.sh" | sh -s -- -b $(go env GOPATH)/bin v1.20.1 +curl -sfL "https://install.goreleaser.com/github.com/golangci/golangci-lint.sh" | sh -s -- -b $(go env GOPATH)/bin v1.24.0 curl -s "https://raw.githubusercontent.com/helm/helm/v2.13.1/scripts/get" | bash -s -- --version 'v2.13.1' +go get golang.org/x/tools/cmd/goimports if [[ "$(uname -s)" == *"Darwin"* ]]; then cat < Install" -LD_FLAGS="${LD_FLAGS:-"-w -X github.com/gardener/gardener/extensions/pkg/version.Version=$(cat ../VERSION)"}" +LD_FLAGS="${LD_FLAGS:-$($(dirname $0)/get-build-ld-flags.sh)}" CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on \ go install -mod=vendor -ldflags "$LD_FLAGS" \ diff --git a/hack/common b/hack/local-development/common similarity index 100% rename from hack/common rename to hack/local-development/common diff --git a/hack/dev-setup b/hack/local-development/dev-setup similarity index 99% rename from hack/dev-setup rename to hack/local-development/dev-setup index 12e387f331e..6020040bdc5 100755 --- a/hack/dev-setup +++ b/hack/local-development/dev-setup @@ -16,8 +16,8 @@ set -e -DEV_DIR=$(dirname "${0}")/../dev -EXAMPLE_DIR=$(dirname "${0}")/../example +DEV_DIR=$(dirname "${0}")/../../dev +EXAMPLE_DIR=$(dirname "${0}")/../../example source $(dirname "${0}")/common kubernetes_env="$(k8s_env)" diff --git a/hack/dev-setup-register-gardener b/hack/local-development/dev-setup-register-gardener similarity index 100% rename from hack/dev-setup-register-gardener rename to hack/local-development/dev-setup-register-gardener diff --git a/hack/local-garden/README.md b/hack/local-development/local-garden/README.md similarity index 83% rename from hack/local-garden/README.md rename to hack/local-development/local-garden/README.md index 7feae4d86e4..f52f5742118 100644 --- a/hack/local-garden/README.md +++ b/hack/local-development/local-garden/README.md @@ -1,34 +1,35 @@ # Local-Garden -This is a small guide on how the local-garden directory is structured. -To learn how you can use the nodeless setup in this directory, please see [this document](../../docs/development/local_setup.md). +This is a small guide on how the local-garden directory is structured. +To learn how you can use the nodeless setup in this directory, please see [this document](../../../docs/development/local_setup.md). + +## Components -## Components Local-Garden consists of the following main directories: - *Certificates:* This directory contains all the certificates/keys/configs required for this setup. - *Kubeconfigs:* Contains the necessary configuration required for creating the admin and the controller-manager kubeconfigs. The rest of the directory consists of scripts to run the nodeless cluster components `kube-api-server`, `kube-controller-manager`, -`etcd`. As well as scripts required for the Gardener aggregated API-server `gardener-etcd` and `apply-proxy-rbac`. +`etcd`. As well as scripts required for the Gardener aggregated API-server `gardener-etcd` and `apply-proxy-rbac`. -The below figure describes how these components interact with one another. +The below figure describes how these components interact with one another. ![](img/2020-01-23-10-03-21.png) -The only requirement to run this setup is to have `docker` installed. In addition there are a few other steps required -to get this setup to work: +The only requirement to run this setup is to have `docker` installed. In addition there are a few other steps required +to get this setup to work: - A user-defined docker network called `gardener-dev` is created. This is to enable DNS between the containers (e.g., curl http://kube-apiserver) - A DNS mapping in the hosts `/etc/hosts` file. This is to enable connectivity from `kube-apiserver` to the `gardener-apiserver` which is applied to the container's DNS. hosts file. - -These steps are automated and can be executed simply by running `make dev-setup-local-garden`. + +These steps are automated and can be executed simply by running `make dev-setup-local-garden`. ## Certificate Generation Certificate Generation for all the components are automated, and can be re-generated by simply -executing the `./garden-certificate-generator.go` optionally with one or more of the following -flags: +executing the `./garden-certificate-generator.go` optionally with one or more of the following +flags: ```bash -certs-path string diff --git a/hack/local-garden/apply-rbac-garden-ns b/hack/local-development/local-garden/apply-rbac-garden-ns similarity index 100% rename from hack/local-garden/apply-rbac-garden-ns rename to hack/local-development/local-garden/apply-rbac-garden-ns diff --git a/hack/local-garden/certificates/certs/ca.crt b/hack/local-development/local-garden/certificates/certs/ca.crt similarity index 100% rename from hack/local-garden/certificates/certs/ca.crt rename to hack/local-development/local-garden/certificates/certs/ca.crt diff --git a/hack/local-garden/certificates/certs/default-admin.crt b/hack/local-development/local-garden/certificates/certs/default-admin.crt similarity index 100% rename from hack/local-garden/certificates/certs/default-admin.crt rename to hack/local-development/local-garden/certificates/certs/default-admin.crt diff --git a/hack/local-garden/certificates/certs/default-controller-manager.crt b/hack/local-development/local-garden/certificates/certs/default-controller-manager.crt similarity index 100% rename from hack/local-garden/certificates/certs/default-controller-manager.crt rename to hack/local-development/local-garden/certificates/certs/default-controller-manager.crt diff --git a/hack/local-garden/certificates/certs/front-proxy-client.crt b/hack/local-development/local-garden/certificates/certs/front-proxy-client.crt similarity index 100% rename from hack/local-garden/certificates/certs/front-proxy-client.crt rename to hack/local-development/local-garden/certificates/certs/front-proxy-client.crt diff --git a/hack/local-garden/certificates/certs/kube-apiserver-etcd-client.crt b/hack/local-development/local-garden/certificates/certs/kube-apiserver-etcd-client.crt similarity index 100% rename from hack/local-garden/certificates/certs/kube-apiserver-etcd-client.crt rename to hack/local-development/local-garden/certificates/certs/kube-apiserver-etcd-client.crt diff --git a/hack/local-garden/certificates/certs/kube-apiserver.crt b/hack/local-development/local-garden/certificates/certs/kube-apiserver.crt similarity index 100% rename from hack/local-garden/certificates/certs/kube-apiserver.crt rename to hack/local-development/local-garden/certificates/certs/kube-apiserver.crt diff --git a/hack/local-garden/certificates/certs/kube-etcd-healthcheck-client.crt b/hack/local-development/local-garden/certificates/certs/kube-etcd-healthcheck-client.crt similarity index 100% rename from hack/local-garden/certificates/certs/kube-etcd-healthcheck-client.crt rename to hack/local-development/local-garden/certificates/certs/kube-etcd-healthcheck-client.crt diff --git a/hack/local-garden/certificates/certs/kube-etcd-peer.crt b/hack/local-development/local-garden/certificates/certs/kube-etcd-peer.crt similarity index 100% rename from hack/local-garden/certificates/certs/kube-etcd-peer.crt rename to hack/local-development/local-garden/certificates/certs/kube-etcd-peer.crt diff --git a/hack/local-garden/certificates/certs/kube-etcd.crt b/hack/local-development/local-garden/certificates/certs/kube-etcd.crt similarity index 100% rename from hack/local-garden/certificates/certs/kube-etcd.crt rename to hack/local-development/local-garden/certificates/certs/kube-etcd.crt diff --git a/hack/local-garden/certificates/certs/sa.pub b/hack/local-development/local-garden/certificates/certs/sa.pub similarity index 100% rename from hack/local-garden/certificates/certs/sa.pub rename to hack/local-development/local-garden/certificates/certs/sa.pub diff --git a/hack/local-garden/certificates/keys/ca.key b/hack/local-development/local-garden/certificates/keys/ca.key similarity index 100% rename from hack/local-garden/certificates/keys/ca.key rename to hack/local-development/local-garden/certificates/keys/ca.key diff --git a/hack/local-garden/certificates/keys/default-admin.key b/hack/local-development/local-garden/certificates/keys/default-admin.key similarity index 100% rename from hack/local-garden/certificates/keys/default-admin.key rename to hack/local-development/local-garden/certificates/keys/default-admin.key diff --git a/hack/local-garden/certificates/keys/default-controller-manager.key b/hack/local-development/local-garden/certificates/keys/default-controller-manager.key similarity index 100% rename from hack/local-garden/certificates/keys/default-controller-manager.key rename to hack/local-development/local-garden/certificates/keys/default-controller-manager.key diff --git a/hack/local-garden/certificates/keys/front-proxy-client.key b/hack/local-development/local-garden/certificates/keys/front-proxy-client.key similarity index 100% rename from hack/local-garden/certificates/keys/front-proxy-client.key rename to hack/local-development/local-garden/certificates/keys/front-proxy-client.key diff --git a/hack/local-garden/certificates/keys/kube-apiserver-etcd-client.key b/hack/local-development/local-garden/certificates/keys/kube-apiserver-etcd-client.key similarity index 100% rename from hack/local-garden/certificates/keys/kube-apiserver-etcd-client.key rename to hack/local-development/local-garden/certificates/keys/kube-apiserver-etcd-client.key diff --git a/hack/local-garden/certificates/keys/kube-apiserver.key b/hack/local-development/local-garden/certificates/keys/kube-apiserver.key similarity index 100% rename from hack/local-garden/certificates/keys/kube-apiserver.key rename to hack/local-development/local-garden/certificates/keys/kube-apiserver.key diff --git a/hack/local-garden/certificates/keys/kube-etcd-healthcheck-client.key b/hack/local-development/local-garden/certificates/keys/kube-etcd-healthcheck-client.key similarity index 100% rename from hack/local-garden/certificates/keys/kube-etcd-healthcheck-client.key rename to hack/local-development/local-garden/certificates/keys/kube-etcd-healthcheck-client.key diff --git a/hack/local-garden/certificates/keys/kube-etcd-peer.key b/hack/local-development/local-garden/certificates/keys/kube-etcd-peer.key similarity index 100% rename from hack/local-garden/certificates/keys/kube-etcd-peer.key rename to hack/local-development/local-garden/certificates/keys/kube-etcd-peer.key diff --git a/hack/local-garden/certificates/keys/kube-etcd.key b/hack/local-development/local-garden/certificates/keys/kube-etcd.key similarity index 100% rename from hack/local-garden/certificates/keys/kube-etcd.key rename to hack/local-development/local-garden/certificates/keys/kube-etcd.key diff --git a/hack/local-garden/certificates/keys/sa.key b/hack/local-development/local-garden/certificates/keys/sa.key similarity index 100% rename from hack/local-garden/certificates/keys/sa.key rename to hack/local-development/local-garden/certificates/keys/sa.key diff --git a/hack/local-garden/cleanup b/hack/local-development/local-garden/cleanup similarity index 100% rename from hack/local-garden/cleanup rename to hack/local-development/local-garden/cleanup diff --git a/hack/local-garden/garden-certificate-generator.go b/hack/local-development/local-garden/garden-certificate-generator.go similarity index 100% rename from hack/local-garden/garden-certificate-generator.go rename to hack/local-development/local-garden/garden-certificate-generator.go diff --git a/hack/local-garden/img/2020-01-23-10-03-21.png b/hack/local-development/local-garden/img/2020-01-23-10-03-21.png similarity index 100% rename from hack/local-garden/img/2020-01-23-10-03-21.png rename to hack/local-development/local-garden/img/2020-01-23-10-03-21.png diff --git a/hack/local-garden/kubeconfigs/default-admin.conf b/hack/local-development/local-garden/kubeconfigs/default-admin.conf similarity index 100% rename from hack/local-garden/kubeconfigs/default-admin.conf rename to hack/local-development/local-garden/kubeconfigs/default-admin.conf diff --git a/hack/local-garden/kubeconfigs/default-controller-manager.conf b/hack/local-development/local-garden/kubeconfigs/default-controller-manager.conf similarity index 100% rename from hack/local-garden/kubeconfigs/default-controller-manager.conf rename to hack/local-development/local-garden/kubeconfigs/default-controller-manager.conf diff --git a/hack/local-garden/run-gardener-etcd b/hack/local-development/local-garden/run-gardener-etcd similarity index 91% rename from hack/local-garden/run-gardener-etcd rename to hack/local-development/local-garden/run-gardener-etcd index 9c48e21233b..1babae9abac 100755 --- a/hack/local-garden/run-gardener-etcd +++ b/hack/local-development/local-garden/run-gardener-etcd @@ -15,7 +15,7 @@ PORTS="-p $PORT:$PORT -p $ETCDPORT:$ETCDPORT" MOUNTS="-v $ETCD_DATA_DIR:/etcd-data" -echo "Starting gardener-dev gardener-etcd cluster..!" +echo "Starting gardener-dev gardener-etcd cluster!" docker run -d --name g-etcd -l $LABEL --network gardener-dev --rm $PORTS $MOUNTS $IMAGE etcd --name $CLUSTERNAME \ --listen-client-urls "http://0.0.0.0:${ETCDPORT}" \ --advertise-client-urls "http://0.0.0.0:${ETCDPORT}" \ diff --git a/hack/local-garden/run-kube-apiserver b/hack/local-development/local-garden/run-kube-apiserver similarity index 96% rename from hack/local-garden/run-kube-apiserver rename to hack/local-development/local-garden/run-kube-apiserver index 6200c92d23d..11b55599ebf 100755 --- a/hack/local-garden/run-kube-apiserver +++ b/hack/local-development/local-garden/run-kube-apiserver @@ -16,7 +16,7 @@ MOUNTS="-v $SCRIPTPATH/certificates/certs:/certs -v $SCRIPTPATH/certificates/key ETCD_PORT=12379 LISTEN_PORT="2443" -echo "Starting gardener-dev kube-apiserver..!" +echo "Starting gardener-dev kube-apiserver!" docker run -d --name kube-apiserver -l $LABEL --add-host $HOSTS_LINE --network gardener-dev --rm -p $LISTEN_PORT:$LISTEN_PORT $MOUNTS $IMAGE /usr/local/bin/kube-apiserver \ --etcd-servers="https://etcd:$ETCD_PORT" \ --storage-media-type='application/json' \ diff --git a/hack/local-garden/run-kube-controller-manager b/hack/local-development/local-garden/run-kube-controller-manager similarity index 94% rename from hack/local-garden/run-kube-controller-manager rename to hack/local-development/local-garden/run-kube-controller-manager index b4755417b84..f4309723663 100755 --- a/hack/local-garden/run-kube-controller-manager +++ b/hack/local-development/local-garden/run-kube-controller-manager @@ -8,7 +8,7 @@ IMAGE=k8s.gcr.io/kube-controller-manager:v1.17.3 MOUNTS="-v $SCRIPTPATH/certificates/certs:/certs -v $SCRIPTPATH/certificates/keys:/keys -v $SCRIPTPATH/kubeconfigs/default-controller-manager.conf:/kubeconfig" -echo "Starting gardener-dev kube-controller-manager..!" +echo "Starting gardener-dev kube-controller-manager!" docker run -d --name kube-controller-manager -l $LABEL --network gardener-dev --rm $MOUNTS $IMAGE /usr/local/bin/kube-controller-manager \ --authentication-kubeconfig="/kubeconfig" \ --authorization-kubeconfig="/kubeconfig" \ diff --git a/hack/local-garden/run-kube-etcd b/hack/local-development/local-garden/run-kube-etcd similarity index 95% rename from hack/local-garden/run-kube-etcd rename to hack/local-development/local-garden/run-kube-etcd index fd5874e5293..2cef4aa7a23 100755 --- a/hack/local-garden/run-kube-etcd +++ b/hack/local-development/local-garden/run-kube-etcd @@ -21,7 +21,7 @@ PORTS="-p $PORT:$PORT -p $ETCDPORT:$ETCDPORT" MOUNTS="-v $SCRIPTPATH/certificates/certs:/certs -v $SCRIPTPATH/certificates/keys:/keys -v $ETCD_DATA_DIR:/etcd-data" -echo "Starting gardener-dev kube-etcd cluster..!" +echo "Starting gardener-dev kube-etcd cluster!" docker run -d --name etcd -l $LABEL --network gardener-dev --rm $MOUNTS $IMAGE etcd --name $CLUSTERNAME \ --listen-client-urls "https://0.0.0.0:${HTTPS_ETCD_PORT},http://0.0.0.0:${HTTP_ETCD_PORT}" \ --advertise-client-urls "https://0.0.0.0:${HTTPS_ETCD_PORT},http://0.0.0.0:3${HTTP_ETCD_PORT}" \ diff --git a/hack/local-imagevector-overwrite b/hack/local-development/local-imagevector-overwrite similarity index 92% rename from hack/local-imagevector-overwrite rename to hack/local-development/local-imagevector-overwrite index c07e471dc6a..96661441fc8 100755 --- a/hack/local-imagevector-overwrite +++ b/hack/local-development/local-imagevector-overwrite @@ -36,13 +36,13 @@ cleanup_imagevector_overwrite() { compute_imagevector_overwrite() { imagevector_overwrite="images: []" - VERSION="$(cat $(dirname $0)/../VERSION)" + VERSION="$(cat $(dirname $0)/../../VERSION)" if [[ "$VERSION" != *"-dev"* ]]; then echo "$imagevector_overwrite" return fi - gardener_images_without_tag="$(yaml2json < "$(dirname $0)/../charts/images.yaml" | jq -r '.images | map(select(.sourceRepository == "github.com/gardener/gardener" and .tag == null))')" + gardener_images_without_tag="$(yaml2json < "$(dirname $0)/../../charts/images.yaml" | jq -r '.images | map(select(.sourceRepository == "github.com/gardener/gardener" and .tag == null))')" if [[ "$(echo $gardener_images_without_tag | jq -r 'length')" == "0" ]]; then echo "$imagevector_overwrite" return diff --git a/hack/start-apiserver b/hack/local-development/start-apiserver similarity index 90% rename from hack/start-apiserver rename to hack/local-development/start-apiserver index 644ed7f6462..406b5743e26 100755 --- a/hack/start-apiserver +++ b/hack/local-development/start-apiserver @@ -27,7 +27,7 @@ apiserver_flags=" --secure-port=8443 \ --v 2" -ld_flags="$(./hack/get-build-ld-flags)" +ldflags="$("$(dirname $0)"/../get-build-ld-flags.sh)" case $(k8s_env) in $KIND) echo "Found kind ..." @@ -36,7 +36,7 @@ case $(k8s_env) in GO111MODULE=on go run \ -mod=vendor \ -ldflags "$ld_flags" \ - cmd/gardener-apiserver/main.go \ + "$(dirname $0)"/../../cmd/gardener-apiserver/main.go \ --etcd-servers http://localhost:32379 \ --tls-cert-file <(kind get kubeconfig | sed -n -e 's/^.*client-certificate-data: //p' | base64 -d) \ --tls-private-key-file <(kind get kubeconfig | sed -n -e 's/^.*client-key-data: //p' | base64 -d) \ @@ -47,7 +47,7 @@ case $(k8s_env) in GO111MODULE=on go run \ -mod=vendor \ -ldflags "$ld_flags" \ - cmd/gardener-apiserver/main.go \ + "$(dirname $0)"/../../cmd/gardener-apiserver/main.go \ --etcd-servers http://localhost:32379 \ --tls-cert-file <(kubectl config view -o go-template="{{range .users}}{{if eq .name \""$(k8s_username)"\"}}{{index .user \"client-certificate-data\"}}{{end}}{{end}}" --raw | base64 -d) \ --tls-private-key-file <(kubectl config view -o go-template="{{range .users}}{{if eq .name \""$(k8s_username)"\"}}{{index .user \"client-key-data\"}}{{end}}{{end}}" --raw | base64 -d) \ @@ -58,7 +58,7 @@ case $(k8s_env) in GO111MODULE=on go run \ -mod=vendor \ -ldflags "$ld_flags" \ - cmd/gardener-apiserver/main.go \ + "$(dirname $0)"/../../cmd/gardener-apiserver/main.go \ --etcd-servers http://$(minikube ip):32379 \ --tls-cert-file ~/.minikube/apiserver.crt \ --tls-private-key-file ~/.minikube/apiserver.key \ @@ -69,7 +69,7 @@ case $(k8s_env) in GO111MODULE=on go run \ -mod=vendor \ -ldflags "$ld_flags" \ - cmd/gardener-apiserver/main.go \ + "$(dirname $0)"/../../cmd/gardener-apiserver/main.go \ --etcd-servers http://localhost:22379 \ --tls-cert-file <(kubectl config view --minify --flatten -ojsonpath='{.users[0].user.client-certificate-data}' --raw | base64 -d) \ --tls-private-key-file <(kubectl config view --minify --flatten -ojsonpath='{.users[0].user.client-key-data}' --raw | base64 -d) \ diff --git a/hack/start-controller-manager b/hack/local-development/start-controller-manager similarity index 80% rename from hack/start-controller-manager rename to hack/local-development/start-controller-manager index 63a2f34353e..80b49be13a3 100755 --- a/hack/start-controller-manager +++ b/hack/local-development/start-controller-manager @@ -22,6 +22,6 @@ trap cleanup_kubeconfig EXIT KUBECONFIG="${KUBECONFIG:-$kubeconfig}" GO111MODULE=on \ go run \ -mod=vendor \ - -ldflags "$(./hack/get-build-ld-flags)" \ - cmd/gardener-controller-manager/main.go \ - --config=dev/20-componentconfig-gardener-controller-manager.yaml + -ldflags "$("$(dirname $0)"/../get-build-ld-flags.sh)" \ + "$(dirname $0)"/../../cmd/gardener-controller-manager/main.go \ + --config="$(dirname $0)"/../../dev/20-componentconfig-gardener-controller-manager.yaml diff --git a/hack/start-gardenlet b/hack/local-development/start-gardenlet similarity index 86% rename from hack/start-gardenlet rename to hack/local-development/start-gardenlet index af5024d4cbc..eb39d1dd939 100755 --- a/hack/start-gardenlet +++ b/hack/local-development/start-gardenlet @@ -29,6 +29,6 @@ IMAGEVECTOR_OVERWRITE="$imagevector_overwrite" \ GO111MODULE=on \ go run \ -mod=vendor \ - -ldflags "$(./hack/get-build-ld-flags)" \ - cmd/gardenlet/main.go \ - --config=dev/20-componentconfig-gardenlet.yaml + -ldflags "$("$(dirname $0)"/../get-build-ld-flags.sh)" \ + "$(dirname $0)"/../../cmd/gardenlet/main.go \ + --config="$(dirname $0)"/../../dev/20-componentconfig-gardenlet.yaml diff --git a/hack/start-scheduler b/hack/local-development/start-scheduler similarity index 81% rename from hack/start-scheduler rename to hack/local-development/start-scheduler index 3a1eb5f3176..7cf343b6d54 100755 --- a/hack/start-scheduler +++ b/hack/local-development/start-scheduler @@ -22,6 +22,6 @@ trap cleanup_kubeconfig EXIT KUBECONFIG="${KUBECONFIG:-$kubeconfig}" GO111MODULE=on \ go run \ -mod=vendor \ - -ldflags "$(./hack/get-build-ld-flags)" \ - cmd/gardener-scheduler/main.go \ - --config=dev/20-componentconfig-gardener-scheduler.yaml + -ldflags "$("$(dirname $0)"/../get-build-ld-flags.sh)" \ + "$(dirname $0)"/../../cmd/gardener-scheduler/main.go \ + --config="$(dirname $0)"/../../dev/20-componentconfig-gardener-scheduler.yaml diff --git a/hack/start-seed-admission-controller b/hack/local-development/start-seed-admission-controller similarity index 75% rename from hack/start-seed-admission-controller rename to hack/local-development/start-seed-admission-controller index 52920eeeb89..fe6a6ef810c 100755 --- a/hack/start-seed-admission-controller +++ b/hack/local-development/start-seed-admission-controller @@ -22,8 +22,8 @@ trap cleanup_kubeconfig EXIT GO111MODULE=on \ go run \ -mod=vendor \ - -ldflags "$(./hack/get-build-ld-flags)" \ - cmd/gardener-seed-admission-controller/main.go \ + -ldflags "$(./hack/get-build-ld-flags.sh)" \ + "$(dirname $0)"/../../cmd/gardener-seed-admission-controller/main.go \ --kubeconfig="${KUBECONFIG:-$kubeconfig}" \ - --tls-cert-path="example/seed-admission-controller/tls.crt" \ - --tls-private-key-path="example/seed-admission-controller/tls.key" + --tls-cert-path="$(dirname $0)/../../example/seed-admission-controller/tls.crt" \ + --tls-private-key-path="$(dirname $0)/../../example/seed-admission-controller/tls.key" diff --git a/hack/generate-code b/hack/test-cover-clean.sh similarity index 78% rename from hack/generate-code rename to hack/test-cover-clean.sh index 76ff753196b..7521f197e3e 100755 --- a/hack/generate-code +++ b/hack/test-cover-clean.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +# Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,10 +13,9 @@ # 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 -e -set -o errexit -set -o nounset -set -o pipefail +echo "> Test Cover Clean" -$(dirname $0)/update-codegen.sh -$(dirname $0)/update-protobuf.sh +find . -name "*.coverprofile" -type f -delete +rm -f test.coverage.html test.coverprofile diff --git a/hack/test-cover.sh b/hack/test-cover.sh new file mode 100755 index 00000000000..16b9a84b4d1 --- /dev/null +++ b/hack/test-cover.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# +# Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +# +# 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. +set -e + +echo "> Test Cover" + +"$(dirname $0)"/test.sh -cover $@ + +COVERPROFILE="$(dirname $0)/../test.coverprofile" +COVERPROFILE_TMP="$(dirname $0)/../test.coverprofile.tmp" +COVERPROFILE_HTML="$(dirname $0)/../test.coverage.html" + +echo "mode: set" > "$COVERPROFILE_TMP" +find . -name "*.coverprofile" -type f | xargs cat | grep -v mode: | sort -r | awk '{if($$1 != last) {print $$0;last=$$1}}' >> "$COVERPROFILE_TMP" +cat "$COVERPROFILE_TMP" | grep -vE "\.pb\.go|\/test\/|zz_generated" > "$COVERPROFILE" +rm -rf "$COVERPROFILE_TMP" +go tool cover -html="$COVERPROFILE" -o="$COVERPROFILE_HTML" + +go tool cover -func="$COVERPROFILE" diff --git a/hack/generate-reference-doc b/hack/test-prometheus.sh similarity index 63% rename from hack/generate-reference-doc rename to hack/test-prometheus.sh index dc0b77e2dbc..50d65adcd26 100755 --- a/hack/generate-reference-doc +++ b/hack/test-prometheus.sh @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!/bin/bash # # Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file # @@ -13,10 +13,16 @@ # 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 -e -CURRENT_DIR=$(dirname $0) -PROJECT_ROOT="${CURRENT_DIR}"/.. +echo "> Test Prometheus" -GO111MODULE=on go install github.com/ahmetb/gen-crd-api-reference-docs +echo "Executing Prometheus alert tests" +pushd "$(dirname $0)/../charts/seed-monitoring/charts/core/charts/prometheus" > /dev/null +promtool test rules rules-tests/*test.yaml +popd > /dev/null -GO111MODULE=on go generate ${PROJECT_ROOT}/pkg/apis/... +echo "Executing aggregate Prometheus alert tests" +pushd "$(dirname $0)/../charts/seed-bootstrap/aggregate-prometheus-rules-tests" > /dev/null +promtool test rules *test.yaml +popd > /dev/null diff --git a/extensions/hack/test.sh b/hack/test.sh similarity index 100% rename from extensions/hack/test.sh rename to hack/test.sh diff --git a/hack/update-protobuf.sh b/hack/update-protobuf.sh index 487a2b6a527..9a1a3ab2e11 100755 --- a/hack/update-protobuf.sh +++ b/hack/update-protobuf.sh @@ -18,29 +18,35 @@ set -o errexit set -o nounset set -o pipefail -CURRENT_DIR=$(dirname $0) +CURRENT_DIR="$(dirname $0)" PROJECT_ROOT="${CURRENT_DIR}"/.. +pushd "$PROJECT_ROOT" > /dev/null APIROOTS=${APIROOTS:-$(git grep --files-with-matches -e '// +k8s:protobuf-gen=package' cmd pkg | \ xargs -n 1 dirname | \ sed 's,^,github.com/gardener/gardener/,;' | \ sort | uniq )} +popd > /dev/null rm -f ${GOPATH}/bin/go-to-protobuf rm -f ${GOPATH}/bin/protoc-gen-gogo -GOFLAGS="" go build -o ${GOPATH}/bin ./vendor/k8s.io/code-generator/cmd/go-to-protobuf -GOFLAGS="" go build -o ${GOPATH}/bin ./vendor/k8s.io/code-generator/cmd/go-to-protobuf/protoc-gen-gogo +GOFLAGS="" go build -o ${GOPATH}/bin "$PROJECT_ROOT/vendor/k8s.io/code-generator/cmd/go-to-protobuf" +GOFLAGS="" go build -o ${GOPATH}/bin "$PROJECT_ROOT/vendor/k8s.io/code-generator/cmd/go-to-protobuf/protoc-gen-gogo" if [[ -z "$(which protoc)" || "$(protoc --version)" != "libprotoc 3."* ]]; then - echo "Generating protobuf requires protoc 3.0.0-beta1 or newer. Please download and" - echo "install the platform appropriate Protobuf package for your OS: " - echo - echo " https://github.com/google/protobuf/releases" - echo + if [[ "$(uname -s)" == *"Darwin"* ]]; then + brew install protobuf + else + PROTOC_ZIP=protoc-3.7.1-linux-x86_64.zip + curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/$PROTOC_ZIP + unzip -o $PROTOC_ZIP -d /usr/local bin/protoc + unzip -o $PROTOC_ZIP -d /usr/local 'include/*' + rm -f $PROTOC_ZIP + fi + echo "WARNING: Protobuf changes are not being validated" - exit 1 fi read -ra PACKAGES <<< $(echo ${APIROOTS}) diff --git a/hack/delete b/hack/usage/delete similarity index 100% rename from hack/delete rename to hack/usage/delete diff --git a/hack/migrate-etcd b/hack/usage/migrate-etcd similarity index 100% rename from hack/migrate-etcd rename to hack/usage/migrate-etcd diff --git a/hack/retry-shoot-operation b/hack/usage/retry-shoot-operation similarity index 100% rename from hack/retry-shoot-operation rename to hack/usage/retry-shoot-operation diff --git a/hack/shoot-operation b/hack/usage/shoot-operation similarity index 100% rename from hack/shoot-operation rename to hack/usage/shoot-operation diff --git a/pkg/apis/core/v1alpha1/doc.go b/pkg/apis/core/v1alpha1/doc.go index a5e4119c385..ac2cfd19b5b 100644 --- a/pkg/apis/core/v1alpha1/doc.go +++ b/pkg/apis/core/v1alpha1/doc.go @@ -18,7 +18,6 @@ // +k8s:openapi-gen=true // +k8s:defaulter-gen=TypeMeta // +k8s:protobuf-gen=package -//go:generate gen-crd-api-reference-docs -api-dir . -config ../../../../hack/api-reference/core-config.json -template-dir ../../../../hack/api-reference/template -out-file ../../../../hack/api-reference/core.md // Package v1alpha1 is a version of the API. // +groupName=core.gardener.cloud diff --git a/pkg/apis/core/v1beta1/doc.go b/pkg/apis/core/v1beta1/doc.go index ac47680be7b..7b83248db92 100644 --- a/pkg/apis/core/v1beta1/doc.go +++ b/pkg/apis/core/v1beta1/doc.go @@ -18,6 +18,7 @@ // +k8s:openapi-gen=true // +k8s:defaulter-gen=TypeMeta // +k8s:protobuf-gen=package + //go:generate gen-crd-api-reference-docs -api-dir . -config ../../../../hack/api-reference/core-config.json -template-dir ../../../../hack/api-reference/template -out-file ../../../../hack/api-reference/core.md // Package v1beta1 is a version of the API. diff --git a/pkg/apis/doc.go b/pkg/apis/doc.go index 4fbca327208..6781ad08b6e 100644 --- a/pkg/apis/doc.go +++ b/pkg/apis/doc.go @@ -12,4 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:generate ../../hack/update-protobuf.sh +//go:generate ../../hack/update-codegen.sh + package apis diff --git a/pkg/apis/extensions/v1alpha1/doc.go b/pkg/apis/extensions/v1alpha1/doc.go index 61cc19c84c5..eceb2a6d06a 100644 --- a/pkg/apis/extensions/v1alpha1/doc.go +++ b/pkg/apis/extensions/v1alpha1/doc.go @@ -13,6 +13,7 @@ // limitations under the License. // +k8s:deepcopy-gen=package + //go:generate gen-crd-api-reference-docs -api-dir . -config ../../../../hack/api-reference/extensions-config.json -template-dir ../../../../hack/api-reference/template -out-file ../../../../hack/api-reference/extensions.md // Package v1alpha1 is the v1alpha1 version of the API. diff --git a/pkg/apis/settings/v1alpha1/doc.go b/pkg/apis/settings/v1alpha1/doc.go index 7179811664c..7ce0b2eeff8 100644 --- a/pkg/apis/settings/v1alpha1/doc.go +++ b/pkg/apis/settings/v1alpha1/doc.go @@ -18,6 +18,7 @@ // +k8s:openapi-gen=true // +k8s:defaulter-gen=TypeMeta // +k8s:protobuf-gen=package + //go:generate gen-crd-api-reference-docs -api-dir . -config ../../../../hack/api-reference/settings-config.json -template-dir ../../../../hack/api-reference/template -out-file ../../../../hack/api-reference/settings.md // Package v1alpha1 is a version of the API.