diff --git a/.commonfiles.sha b/.commonfiles.sha deleted file mode 100644 index 0be8be417..000000000 --- a/.commonfiles.sha +++ /dev/null @@ -1 +0,0 @@ -a76704447c3f006d06fc5c5a76cfbb464d87331d diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..4ccc0f5d8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +*.descriptor linguist-generated=true +*.descriptor -diff -merge +*.descriptor_set linguist-generated=true +*.descriptor_set -diff -merge +*.pb.html linguist-generated=true +*.pb.go linguist-generated=true +*.gen.go linguist-generated=true +*.gen.yaml linguist-generated=true +*_pb2.py linguist-generated=true diff --git a/Makefile b/Makefile index 16cd3ed26..1878dccf5 100644 --- a/Makefile +++ b/Makefile @@ -1,102 +1,102 @@ -## Copyright 2017 Istio 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. +# WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY +# +# The original version of this file is located in the https://github.com/istio/common-files repo. +# If you're looking at this file in a different repo and want to make a change, please go to the +# common-files repo, make the change there and check it in. Then come back to this repo and run +# "make update-common". -TOP := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) +# Copyright Istio 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. -SHELL := /bin/bash -BAZEL_STARTUP_ARGS ?= -BAZEL_BUILD_ARGS ?= -BAZEL_TARGETS ?= //... -# Some tests run so slowly under the santizers that they always timeout. -SANITIZER_EXCLUSIONS ?= -test/integration:mixer_fault_test -HUB ?= -TAG ?= +# allow optional per-repo overrides +-include Makefile.overrides.mk -ifeq "$(origin CC)" "default" -CC := clang -endif -ifeq "$(origin CXX)" "default" -CXX := clang++ -endif -PATH := /usr/lib/llvm-9/bin:$(PATH) +# Set the environment variable BUILD_WITH_CONTAINER to use a container +# to build the repo. The only dependencies in this mode are to have make and +# docker. If you'd rather build with a local tool chain instead, you'll need to +# figure out all the tools you need in your environment to make that work. +export BUILD_WITH_CONTAINER ?= 0 -VERBOSE ?= -ifeq "$(VERBOSE)" "1" -BAZEL_STARTUP_ARGS := --client_debug $(BAZEL_STARTUP_ARGS) -BAZEL_BUILD_ARGS := -s --sandbox_debug --verbose_failures $(BAZEL_BUILD_ARGS) +LOCAL_ARCH := $(shell uname -m) +ifeq ($(LOCAL_ARCH),x86_64) + TARGET_ARCH ?= amd64 +else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 5),armv8) + TARGET_ARCH ?= arm64 +else ifeq ($(shell echo $(LOCAL_ARCH) | head -c 4),armv) + TARGET_ARCH ?= arm +else + $(error This system's architecture $(LOCAL_ARCH) isn't supported) endif -UNAME := $(shell uname) -ifeq ($(UNAME),Linux) -BAZEL_CONFIG_DEV = --config=libc++ -BAZEL_CONFIG_REL = --config=libc++ --config=release -BAZEL_CONFIG_ASAN = --config=libc++ --config=clang-asan -BAZEL_CONFIG_TSAN = --config=libc++ --config=clang-tsan -endif -ifeq ($(UNAME),Darwin) -BAZEL_CONFIG_DEV = # macOS always links against libc++ -BAZEL_CONFIG_REL = --config=release -BAZEL_CONFIG_ASAN = --config=macos-asan -BAZEL_CONFIG_TSAN = # no working config +LOCAL_OS := $(shell uname) +ifeq ($(LOCAL_OS),Linux) + TARGET_OS ?= linux + READLINK_FLAGS="-f" +else ifeq ($(LOCAL_OS),Darwin) + TARGET_OS ?= darwin + READLINK_FLAGS="" +else + $(error This system's OS $(LOCAL_OS) isn't supported) endif -build: - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_DEV) $(BAZEL_TARGETS) +export TARGET_OUT ?= $(shell pwd)/out/$(TARGET_ARCH)_$(TARGET_OS) -build_envoy: - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_REL) //src/envoy:envoy +ifeq ($(BUILD_WITH_CONTAINER),1) +export TARGET_OUT = /work/out/$(TARGET_ARCH)_$(TARGET_OS) +CONTAINER_CLI ?= docker +DOCKER_SOCKET_MOUNT ?= -v /var/run/docker.sock:/var/run/docker.sock +IMG ?= gcr.io/istio-testing/build-tools:2019-10-11T13-37-52 +UID = $(shell id -u) +PWD = $(shell pwd) -clean: - @bazel clean +$(info Building with the build container: $(IMG).) -test: - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_DEV) //src/envoy:envoy - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) test $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_DEV) $(BAZEL_TARGETS) - GO111MODULE=on go test ./... +# Determine the timezone across various platforms to pass into the +# docker run operation. This operation assumes zoneinfo is within +# the path of the file. +TIMEZONE=`readlink $(READLINK_FLAGS) /etc/localtime | sed -e 's/^.*zoneinfo\///'` -test_asan: - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_ASAN) //src/envoy:envoy - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) test $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_ASAN) -- $(BAZEL_TARGETS) $(SANITIZER_EXCLUSIONS) - GO111MODULE=on go test ./... +RUN = $(CONTAINER_CLI) run -t -i --sig-proxy=true -u $(UID):docker --rm \ + -e IN_BUILD_CONTAINER="$(BUILD_WITH_CONTAINER)" \ + -e TZ="$(TIMEZONE)" \ + -e TARGET_ARCH="$(TARGET_ARCH)" \ + -e TARGET_OS="$(TARGET_OS)" \ + -e TARGET_OUT="$(TARGET_OUT)" \ + -e HUB="$(HUB)" \ + -e TAG="$(TAG)" \ + -v /etc/passwd:/etc/passwd:ro \ + $(DOCKER_SOCKET_MOUNT) \ + $(CONTAINER_OPTIONS) \ + --mount type=bind,source="$(PWD)",destination="/work" \ + --mount type=volume,source=go,destination="/go" \ + --mount type=volume,source=gocache,destination="/gocache" \ + -w /work $(IMG) -test_tsan: - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_TSAN) //src/envoy:envoy - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) test $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_TSAN) --test_env=TSAN_OPTIONS=suppressions=$(TOP)/tsan.suppressions -- $(BAZEL_TARGETS) $(SANITIZER_EXCLUSIONS) - GO111MODULE=on go test ./... +MAKE = $(RUN) make --no-print-directory -e -f Makefile.core.mk -check: - @echo >&2 "Please use \"make lint\" instead." - @false +%: + @$(MAKE) $@ -lint: - @scripts/check_license.sh - @scripts/check-repository.sh - @scripts/check-style.sh +default: + @$(MAKE) -deb: - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_REL) //tools/deb:istio-proxy +.PHONY: default -artifacts: - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) BAZEL_BUILD_ARGS="$(BAZEL_BUILD_ARGS)" && ./scripts/push-debian.sh -p "$(ARTIFACTS_GCS_PATH)" -o "$(ARTIFACTS_DIR)" +else -test_release: - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) BAZEL_BUILD_ARGS="$(BAZEL_BUILD_ARGS)" && ./scripts/release-binary.sh -i +$(info Building with your local toolchain.) +GOBIN ?= $(GOPATH)/bin +include Makefile.core.mk -push_release: - export PATH=$(PATH) CC=$(CC) CXX=$(CXX) BAZEL_BUILD_ARGS="$(BAZEL_BUILD_ARGS)" && ./scripts/release-binary.sh -d "$(RELEASE_GCS_PATH)" - - -.PHONY: build clean test check artifacts - -include Makefile.common.mk +endif diff --git a/Makefile.core.mk b/Makefile.core.mk new file mode 100644 index 000000000..bda84dd28 --- /dev/null +++ b/Makefile.core.mk @@ -0,0 +1,100 @@ +## Copyright 2017 Istio 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. + +TOP := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) + +SHELL := /bin/bash +BAZEL_STARTUP_ARGS ?= +BAZEL_BUILD_ARGS ?= +BAZEL_TARGETS ?= //... +# Some tests run so slowly under the santizers that they always timeout. +SANITIZER_EXCLUSIONS ?= -test/integration:mixer_fault_test +HUB ?= +TAG ?= + +ifeq "$(origin CC)" "default" +CC := clang +endif +ifeq "$(origin CXX)" "default" +CXX := clang++ +endif +PATH := /usr/lib/llvm-9/bin:$(PATH) + +VERBOSE ?= +ifeq "$(VERBOSE)" "1" +BAZEL_STARTUP_ARGS := --client_debug $(BAZEL_STARTUP_ARGS) +BAZEL_BUILD_ARGS := -s --sandbox_debug --verbose_failures $(BAZEL_BUILD_ARGS) +endif + +UNAME := $(shell uname) +ifeq ($(UNAME),Linux) +BAZEL_CONFIG_DEV = --config=libc++ +BAZEL_CONFIG_REL = --config=libc++ --config=release +BAZEL_CONFIG_ASAN = --config=libc++ --config=clang-asan +BAZEL_CONFIG_TSAN = --config=libc++ --config=clang-tsan +endif +ifeq ($(UNAME),Darwin) +BAZEL_CONFIG_DEV = # macOS always links against libc++ +BAZEL_CONFIG_REL = --config=release +BAZEL_CONFIG_ASAN = --config=macos-asan +BAZEL_CONFIG_TSAN = # no working config +endif + +build: + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_DEV) $(BAZEL_TARGETS) + +build_envoy: + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_REL) //src/envoy:envoy + +clean: + @bazel clean + +test: + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_DEV) //src/envoy:envoy + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) test $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_DEV) $(BAZEL_TARGETS) + GO111MODULE=on go test ./... + +test_asan: + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_ASAN) //src/envoy:envoy + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) test $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_ASAN) -- $(BAZEL_TARGETS) $(SANITIZER_EXCLUSIONS) + GO111MODULE=on go test ./... + +test_tsan: + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_TSAN) //src/envoy:envoy + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) test $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_TSAN) --test_env=TSAN_OPTIONS=suppressions=$(TOP)/tsan.suppressions -- $(BAZEL_TARGETS) $(SANITIZER_EXCLUSIONS) + GO111MODULE=on go test ./... + +check: + @echo >&2 "Please use \"make lint\" instead." + @false + +lint: lint-copyright-banner + @scripts/check-repository.sh + @scripts/check-style.sh + +deb: + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) && bazel $(BAZEL_STARTUP_ARGS) build $(BAZEL_BUILD_ARGS) $(BAZEL_CONFIG_REL) //tools/deb:istio-proxy + +artifacts: + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) BAZEL_BUILD_ARGS="$(BAZEL_BUILD_ARGS)" && ./scripts/push-debian.sh -p "$(ARTIFACTS_GCS_PATH)" -o "$(ARTIFACTS_DIR)" + +test_release: + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) BAZEL_BUILD_ARGS="$(BAZEL_BUILD_ARGS)" && ./scripts/release-binary.sh -i + +push_release: + export PATH=$(PATH) CC=$(CC) CXX=$(CXX) BAZEL_BUILD_ARGS="$(BAZEL_BUILD_ARGS)" && ./scripts/release-binary.sh -d "$(RELEASE_GCS_PATH)" + +.PHONY: build clean test check artifacts + +include common/Makefile.common.mk diff --git a/Makefile.overrides.mk b/Makefile.overrides.mk new file mode 100644 index 000000000..a29486e0a --- /dev/null +++ b/Makefile.overrides.mk @@ -0,0 +1,16 @@ +# Copyright 2019 Istio 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. + +# this repo is not on the container plan by default +BUILD_WITH_CONTAINER ?= 0 diff --git a/SUPPORT.md b/SUPPORT.md index b487fc5a6..505913929 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -2,6 +2,6 @@ Here are some resources to help you understand and use Istio: -- For in-depth information about how to use Istio, visit [istio.io](https://istio.io) +- For in-depth information about how to use Istio, visit [istio.io](https://istio.io) - To ask questions and get assistance from our community, visit [discuss.istio.io](https://discuss.istio.io) - To learn how to participate in our overall community, visit [our community page](https://istio.io/about/community) diff --git a/common/.commonfiles.sha b/common/.commonfiles.sha new file mode 100644 index 000000000..8bfcb26a5 --- /dev/null +++ b/common/.commonfiles.sha @@ -0,0 +1 @@ +6c1a9ea348417a19b3d970ba46a6fcb52601dc97 diff --git a/common/Makefile.common.mk b/common/Makefile.common.mk new file mode 100644 index 000000000..ece83dab3 --- /dev/null +++ b/common/Makefile.common.mk @@ -0,0 +1,100 @@ +# WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY +# +# The original version of this file is located in the https://github.com/istio/common-files repo. +# If you're looking at this file in a different repo and want to make a change, please go to the +# common-files repo, make the change there and check it in. Then come back to this repo and run +# "make update-common". + +# Copyright Istio 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. + +FINDFILES=find . \( -path ./common-protos -o -path ./.git -o -path ./.github \) -prune -o -type f +XARGS = xargs -0 -r + +lint-dockerfiles: + @${FINDFILES} -name 'Dockerfile*' -print0 | ${XARGS} hadolint -c ./common/config/.hadolint.yml + +lint-scripts: + @${FINDFILES} -name '*.sh' -print0 | ${XARGS} shellcheck + +lint-yaml: + @${FINDFILES} \( -name '*.yml' -o -name '*.yaml' \) -print0 | ${XARGS} grep -L -e "{{" | xargs -r yamllint -c ./common/config/.yamllint.yml + +lint-helm: + @${FINDFILES} -name 'Chart.yaml' -print0 | ${XARGS} -L 1 dirname | xargs -r helm lint --strict + +lint-copyright-banner: + @${FINDFILES} \( -name '*.go' -o -name '*.cc' -o -name '*.h' -o -name '*.proto' -o -name '*.py' -o -name '*.sh' \) \( ! \( -name '*.gen.go' -o -name '*.pb.go' -o -name '*_pb2.py' \) \) -print0 |\ + ${XARGS} common/scripts/lint_copyright_banner.sh + +lint-go: + @${FINDFILES} -name '*.go' \( ! \( -name '*.gen.go' -o -name '*.pb.go' \) \) -print0 | ${XARGS} common/scripts/lint_go.sh + +lint-python: + @${FINDFILES} -name '*.py' \( ! \( -name '*_pb2.py' \) \) -print0 | ${XARGS} autopep8 --max-line-length 160 --exit-code -d + +lint-markdown: + @${FINDFILES} -name '*.md' -print0 | ${XARGS} mdl --ignore-front-matter --style common/config/mdl.rb + @${FINDFILES} -name '*.md' -print0 | ${XARGS} awesome_bot --skip-save-results --allow_ssl --allow-timeout --allow-dupe --allow-redirect --white-list ${MARKDOWN_LINT_WHITELIST} + +lint-sass: + @${FINDFILES} -name '*.scss' -print0 | ${XARGS} sass-lint -c common/config/sass-lint.yml --verbose + +lint-typescript: + @${FINDFILES} -name '*.ts' -print0 | ${XARGS} tslint -c common/config/tslint.json + +lint-protos: + @if test -d common-protos; then $(FINDFILES) -name '*.proto' -print0 | $(XARGS) -L 1 prototool lint --protoc-bin-path=/usr/bin/protoc --protoc-wkt-path=common-protos; fi + +lint-licenses: + @-go mod download + @license-lint --config common/config/license-lint.yml + +lint-all: lint-dockerfiles lint-scripts lint-yaml lint-helm lint-copyright-banner lint-go lint-python lint-markdown lint-sass lint-typescript lint-protos lint-licenses + +format-go: + @${FINDFILES} -name '*.go' \( ! \( -name '*.gen.go' -o -name '*.pb.go' \) \) -print0 | ${XARGS} goimports -w -local "istio.io" + +format-python: + @${FINDFILES} -name '*.py' -print0 | ${XARGS} autopep8 --max-line-length 160 --aggressive --aggressive -i + +format-protos: + @$(FINDFILES) -name '*.proto' -print0 | $(XARGS) -L 1 prototool format -w + +dump-licenses: + @go mod download + @license-lint --config common/config/license-lint.yml --report + +dump-licenses-csv: + @go mod download + @license-lint --config common/config/license-lint.yml --csv + +update-common: + @git clone -q --depth 1 --single-branch --branch master https://github.com/istio/common-files + @cd common-files ; git rev-parse HEAD >files/common/.commonfiles.sha + @rm -fr common + @cp -rT common-files/files . + @rm -fr common-files + +update-common-protos: + @git clone -q --depth 1 --single-branch --branch master https://github.com/istio/common-files + @cd common-files ; git rev-parse HEAD > common-protos/.commonfiles.sha + @rm -fr common-protos + @cp -ar common-files/common-protos common-protos + @rm -fr common-files + +check-clean-repo: + @common/scripts/check_clean_repo.sh + +.PHONY: lint-dockerfiles lint-scripts lint-yaml lint-copyright-banner lint-go lint-python lint-helm lint-markdown lint-sass lint-typescript lint-protos lint-all format-go format-python format-protos update-common update-common-protos lint-licenses dump-licenses dump-licenses-csv check-clean-repo diff --git a/.golangci.yml b/common/config/.golangci.yml similarity index 95% rename from .golangci.yml rename to common/config/.golangci.yml index 80fcfd7e3..2b4bc6c08 100644 --- a/.golangci.yml +++ b/common/config/.golangci.yml @@ -3,11 +3,11 @@ # The original version of this file is located in the https://github.com/istio/common-files repo. # If you're looking at this file in a different repo and want to make a change, please go to the # common-files repo, make the change there and check it in. Then come back to this repo and run -# "make updatecommon". +# "make update-common". service: - # When updating this, also update bin/linters.sh accordingly - golangci-lint-version: 1.16.x # use the fixed version to not introduce new linters unexpectedly + # When updating this, also update the version stored in docker/build-tools/Dockerfile in the istio/tools repo. + golangci-lint-version: 1.18.x # use the fixed version to not introduce new linters unexpectedly run: # timeout for analysis, e.g. 30s, 5m, default is 1m deadline: 20m @@ -42,6 +42,8 @@ linters: - nakedret - prealloc - scopelint + - funlen + - bodyclose fast: false linters-settings: @@ -74,6 +76,8 @@ linters-settings: # Default is to use a neutral variety of English. # Setting locale to US will correct the British spelling of 'colour' to 'color'. locale: US + ignore-words: + - cancelled lll: # max line length, lines longer will be reported. Default is 120. # '\t' is counted as 1 character by default, and can be changed with the tab-width option @@ -142,9 +146,9 @@ linters-settings: - unslice - valSwap - weakCond - - yodaStyleExpr # Unused + # - yodaStyleExpr # - appendAssign # - commentFormatting # - emptyStringTest diff --git a/common/config/.hadolint.yml b/common/config/.hadolint.yml new file mode 100644 index 000000000..be21ee21c --- /dev/null +++ b/common/config/.hadolint.yml @@ -0,0 +1,12 @@ +# WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY +# +# The original version of this file is located in the https://github.com/istio/common-files repo. +# If you're looking at this file in a different repo and want to make a change, please go to the +# common-files repo, make the change there and check it in. Then come back to this repo and run +# "make update-common". + +ignored: + +trustedRegistries: + - gcr.io + - docker.io diff --git a/common/config/.yamllint.yml b/common/config/.yamllint.yml new file mode 100644 index 000000000..87fc4e6a6 --- /dev/null +++ b/common/config/.yamllint.yml @@ -0,0 +1,29 @@ +# WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY +# +# The original version of this file is located in the https://github.com/istio/common-files repo. +# If you're looking at this file in a different repo and want to make a change, please go to the +# common-files repo, make the change there and check it in. Then come back to this repo and run +# "make update-common". + +rules: + braces: disable + brackets: disable + colons: enable + commas: disable + comments: disable + comments-indentation: disable + document-end: disable + document-start: disable + empty-lines: disable + empty-values: enable + hyphens: enable + indentation: disable + key-duplicates: enable + key-ordering: disable + line-length: disable + new-line-at-end-of-file: disable + new-lines: enable + octal-values: enable + quoted-strings: disable + trailing-spaces: disable + truthy: disable diff --git a/common/config/license-lint.yml b/common/config/license-lint.yml new file mode 100644 index 000000000..fbdf25962 --- /dev/null +++ b/common/config/license-lint.yml @@ -0,0 +1,141 @@ +unrestricted_licenses: + - Apache-2.0 + - ISC + - AFL-2.1 + - AFL-3.0 + - Artistic-1.0 + - Artistic-2.0 + - Apache-1.1 + - BSD-1-Clause + - BSD-2-Clause + - BSD-3-Clause + - FTL + - LPL-1.02 + - MS-PL + - MIT + - NCSA + - OpenSSL + - PHP-3.0 + - TCP-wrappers + - W3C + - Xnet + - Zlib + +reciprocal_licenses: + - CC0-1.0 + - APSL-2.0 + - CDDL-1.0 + - CDDL-1.1 + - CPL-1.0 + - EPL-1.0 + - IPL-1.0 + - MPL-1.0 + - MPL-1.1 + - MPL-2.0 + - Ruby + +restricted_licenses: + - GPL-1.0-only + - GPL-1.0-or-later + - GPL-2.0-only + - GPL-2.0-or-later + - GPL-3.0-only + - GPL-3.0-or-later + - LGPL-2.0-only + - LGPL-2.0-or-later + - LGPL-2.1-only + - LGPL-2.1-or-later + - LGPL-3.0-only + - LGPL-3.0-or-later + - NPL-1.0 + - NPL-1.1 + - OSL-1.0 + - OSL-1.1 + - OSL-2.0 + - OSL-2.1 + - OSL-3.0 + - QPL-1.0 + - Sleepycat + +whitelisted_modules: + - bitbucket.org/ww/goautoneg + - git.apache.org/thrift.git + - github.com/alicebob/gopher-json + - github.com/antlr/antlr4 + - github.com/apache/thrift + - github.com/bazelbuild/buildtools + - github.com/bgentry/speakeasy + - github.com/bmizerany/assert + - github.com/BurntSushi/xgb + - github.com/DATA-DOG/go-sqlmock + - github.com/daviddengcn/go-colortext + - github.com/dchest/siphash + - github.com/dnaeon/go-vcr + - github.com/docker/docker + - github.com/duosecurity/duo_api_golang + - github.com/dustin/go-humanize + - github.com/facebookgo/stack + - github.com/facebookgo/stackerr + - github.com/ghodss/yaml + - github.com/globalsign/mgo + - github.com/gogo/protobuf + - github.com/google/cadvisor + - github.com/google/pprof + - github.com/gophercloud/gophercloud + - github.com/gotestyourself/gotestyourself + - github.com/hashicorp/consul + - github.com/hashicorp/serf + - github.com/hashicorp/vault + - github.com/heketi/heketi + - github.com/heketi/utils + - github.com/inconshreveable/mousetrap + - github.com/JeffAshton/win_pdh + - github.com/jmespath/go-jmespath + - github.com/jteeuwen/go-bindata + - github.com/juju/errors + - github.com/juju/loggo + - github.com/juju/testing + - github.com/julienschmidt/httprouter + - github.com/koneu/natend + - github.com/kr/logfmt + - github.com/libopenstorage/openstorage + - github.com/logrusorgru/aurora + - github.com/magiconair/properties + - github.com/Masterminds/semver + - github.com/Masterminds/sprig + - github.com/mesos/mesos-go + - github.com/miekg/dns + - github.com/munnerz/goautoneg + - github.com/Nvveen/Gotty + - github.com/NYTimes/gziphandler + - github.com/opencontainers/runc + - github.com/openshift/origin + - github.com/pascaldekloe/goe + - github.com/pmezard/go-difflib + - github.com/projectcalico/go-yaml + - github.com/projectcalico/go-yaml-wrapper + - github.com/rcrowley/go-metrics + - github.com/russross/blackfriday + - github.com/russross/blackfriday/v2 + - github.com/sean-/seed + - github.com/signalfx/com_signalfx_metrics_protobuf + - github.com/smartystreets/assertions + - github.com/smartystreets/goconvey + - github.com/storageos/go-api + - github.com/technosophos/moniker + - github.com/ulikunitz/xz + - github.com/xeipuuv/gojsonpointer + - github.com/xeipuuv/gojsonreference + - github.com/xi2/xz + - github.com/ziutek/mymysql + - gopkg.in/check.v1 + - gopkg.in/mgo.v2 + - gopkg.in/tomb.v1 + - gopkg.in/yaml.v1 + - gopkg.in/yaml.v3 + - gotest.tools + - istio.io/tools + - k8s.io/helm + - k8s.io/kubernetes + - modernc.org/cc + - sigs.k8s.io/yaml diff --git a/common/config/mdl.rb b/common/config/mdl.rb new file mode 100644 index 000000000..8764f94d7 --- /dev/null +++ b/common/config/mdl.rb @@ -0,0 +1,12 @@ +all +rule 'MD002', :level => 1 +rule 'MD007', :indent => 4 +rule 'MD013', :line_length => 160, :code_blocks => false, :tables => false +rule 'MD026', :punctuation => ".,;:!" +exclude_rule 'MD013' +exclude_rule 'MD014' +exclude_rule 'MD030' +exclude_rule 'MD032' +exclude_rule 'MD033' +exclude_rule 'MD041' +exclude_rule 'MD046' diff --git a/common/config/sass-lint.yml b/common/config/sass-lint.yml new file mode 100644 index 000000000..da43ee79c --- /dev/null +++ b/common/config/sass-lint.yml @@ -0,0 +1,98 @@ +######################### +## Config for sass-lint +######################### +# Linter Options +options: + # Don't merge default rules + merge-default-rules: false + # Raise an error if more than 50 warnings are generated + max-warnings: 500 +# Rule Configuration +rules: + attribute-quotes: + - 2 + - + include: false + bem-depth: 2 + border-zero: 2 + brace-style: 2 + class-name-format: 2 + clean-import-paths: 2 + declarations-before-nesting: 2 + empty-args: 2 + empty-line-between-blocks: 2 + extends-before-declarations: 2 + extends-before-mixins: 2 + final-newline: 2 + force-attribute-nesting: 0 + force-element-nesting: 0 + force-pseudo-nesting: 0 + function-name-format: 2 + hex-length: 0 + hex-notation: 2 + id-name-format: 2 + indentation: + - 2 + - + size: 4 + leading-zero: + - 2 + - + include: false + max-file-line-count: 0 + max-file-length: 0 + mixins-before-declarations: 2 + no-attribute-selectors: 0 + no-color-hex: 0 + no-color-keywords: 0 + no-color-literals: 0 + no-combinators: 0 + no-css-comments: 2 + no-debug: 2 + no-disallowed-properties: 2 + no-duplicate-properties: 2 + no-empty-rulesets: 2 + no-extends: 2 + no-ids: 0 + no-invalid-hex: 2 + no-important: 0 + no-mergeable-selectors: 2 + no-misspelled-properties: 2 + no-qualifying-elements: 0 + no-trailing-whitespace: 2 + no-trailing-zero: 2 + no-transition-all: 0 + no-url-domains: 2 + no-url-protocols: 2 + no-warn: 2 + one-declaration-per-line: 2 + placeholder-in-extend: 2 + placeholder-name-format: 2 + property-sort-order: 0 + property-units: 2 + pseudo-element: 2 + quotes: + - 2 + - + style: double + shorthand-values: 2 + single-line-per-selector: 0 + space-after-bang: 2 + space-after-colon: 2 + space-after-comma: 2 + space-around-operator: 2 + space-before-bang: 2 + space-before-brace: 2 + space-before-colon: 2 + space-between-parens: 2 + trailing-semicolon: 2 + url-quotes: 2 + variable-for-property: + - 0 + - + properties: + - color + - background-color + - fill + variable-name-format: 0 + zero-unit: 2 diff --git a/common/config/tslint.json b/common/config/tslint.json new file mode 100644 index 000000000..6db4bb19d --- /dev/null +++ b/common/config/tslint.json @@ -0,0 +1,25 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "rules": { + "max-line-length": { + "options": [160] + }, + "arrow-parens": false, + "new-parens": true, + "no-arg": true, + "no-bitwise": true, + "no-conditional-assignment": true, + "no-consecutive-blank-lines": true, + "no-console": { + "severity": "warning", + "options": ["debug", "info", "log", "time", "timeEnd", "trace"] + }, + "no-shadowed-variable": false, + "eofline": false + }, + "jsRules": {}, + "rulesDirectory": [] +} \ No newline at end of file diff --git a/common/scripts/check_clean_repo.sh b/common/scripts/check_clean_repo.sh new file mode 100755 index 000000000..9631b195a --- /dev/null +++ b/common/scripts/check_clean_repo.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Copyright 2019 Istio 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. + +if [[ -n $(git status --porcelain) ]]; then + git status + echo "ERROR: Some files need to be updated, please run make and include any changed files in your PR" + exit 1 +fi diff --git a/common/scripts/gobuild.sh b/common/scripts/gobuild.sh new file mode 100755 index 000000000..17b66bd7d --- /dev/null +++ b/common/scripts/gobuild.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +# WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY +# +# The original version of this file is located in the https://github.com/istio/common-files repo. +# If you're looking at this file in a different repo and want to make a change, please go to the +# common-files repo, make the change there and check it in. Then come back to this repo and run +# "make update-common". + +# Copyright Istio Authors. All Rights Reserved. +# +# 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 script builds and version stamps the output + +VERBOSE=${VERBOSE:-"0"} +V="" +if [[ "${VERBOSE}" == "1" ]];then + V="-x" + set -x +fi + +SCRIPTPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +OUT=${1:?"output path"} +shift + +set -e + +BUILD_GOOS=${GOOS:-linux} +BUILD_GOARCH=${GOARCH:-amd64} +GOBINARY=${GOBINARY:-go} +GOPKG="$GOPATH/pkg" +BUILDINFO=${BUILDINFO:-""} +STATIC=${STATIC:-1} +LDFLAGS=${LDFLAGS:--extldflags -static} +GOBUILDFLAGS=${GOBUILDFLAGS:-""} +# Split GOBUILDFLAGS by spaces into an array called GOBUILDFLAGS_ARRAY. +IFS=' ' read -r -a GOBUILDFLAGS_ARRAY <<< "$GOBUILDFLAGS" + +GCFLAGS=${GCFLAGS:-} +export CGO_ENABLED=0 + +if [[ "${STATIC}" != "1" ]];then + LDFLAGS="" +fi + +# gather buildinfo if not already provided +# For a release build BUILDINFO should be produced +# at the beginning of the build and used throughout +if [[ -z ${BUILDINFO} ]];then + BUILDINFO=$(mktemp) + "${SCRIPTPATH}/report_build_info.sh" > "${BUILDINFO}" +fi + +# BUILD LD_EXTRAFLAGS +LD_EXTRAFLAGS="" + +while read -r line; do + LD_EXTRAFLAGS="${LD_EXTRAFLAGS} -X ${line}" +done < "${BUILDINFO}" + +# verify go version before build +# NB. this was copied verbatim from Kubernetes hack +minimum_go_version=go1.13 # supported patterns: go1.x, go1.x.x (x should be a number) +IFS=" " read -ra go_version <<< "$(${GOBINARY} version)" +if [[ "${minimum_go_version}" != $(echo -e "${minimum_go_version}\n${go_version[2]}" | sort -s -t. -k 1,1 -k 2,2n -k 3,3n | head -n1) && "${go_version[2]}" != "devel" ]]; then + echo "Warning: Detected that you are using an older version of the Go compiler. Istio requires ${minimum_go_version} or greater." +fi + +OPTIMIZATION_FLAGS="-trimpath" +if [ "${DEBUG}" == "1" ]; then + OPTIMIZATION_FLAGS="" +fi + +time GOOS=${BUILD_GOOS} GOARCH=${BUILD_GOARCH} ${GOBINARY} build \ + ${V} "${GOBUILDFLAGS_ARRAY[@]}" ${GCFLAGS:+-gcflags "${GCFLAGS}"} \ + -o "${OUT}" \ + ${OPTIMIZATION_FLAGS} \ + -pkgdir="${GOPKG}/${BUILD_GOOS}_${BUILD_GOARCH}" \ + -ldflags "${LDFLAGS} ${LD_EXTRAFLAGS}" "${@}" diff --git a/scripts/run_golangci.sh b/common/scripts/lint_copyright_banner.sh similarity index 59% rename from scripts/run_golangci.sh rename to common/scripts/lint_copyright_banner.sh index 21d820f33..7ffdada87 100755 --- a/scripts/run_golangci.sh +++ b/common/scripts/lint_copyright_banner.sh @@ -5,9 +5,9 @@ # The original version of this file is located in the https://github.com/istio/common-files repo. # If you're looking at this file in a different repo and want to make a change, please go to the # common-files repo, make the change there and check it in. Then come back to this repo and run -# "make updatecommon". +# "make update-common". -# Copyright 2019 Istio Authors +# Copyright Istio Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -23,18 +23,17 @@ set -e -SCRIPTPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -ROOTDIR=$(dirname "${SCRIPTPATH}") -cd "${ROOTDIR}" +ec=0 +for fn in "$@"; do + if ! grep -L -q -e "Apache License, Version 2" "${fn}"; then + echo "Missing license: ${fn}" + ec=1 + fi -if [[ "$1" == "--fix" ]] -then - FIX="--fix" -fi + if ! grep -L -q -e "Copyright" "${fn}"; then + echo "Missing copyright: ${fn}" + ec=1 + fi +done -# if you want to update this version, also change the version number in .golangci.yml -GOLANGCI_VERSION="v1.16.0" -curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b "$GOPATH"/bin "$GOLANGCI_VERSION" -golangci-lint --version -# For tuning and when switching versions PLEASE REFERENCE: https://github.com/istio/istio/issues/14888 -env GOGC=25 golangci-lint run ${FIX} -j 8 -v ./... +exit $ec diff --git a/Makefile.common.mk b/common/scripts/lint_go.sh old mode 100644 new mode 100755 similarity index 77% rename from Makefile.common.mk rename to common/scripts/lint_go.sh index ae4920c61..2f74e8a29 --- a/Makefile.common.mk +++ b/common/scripts/lint_go.sh @@ -1,11 +1,13 @@ +#!/bin/bash + # WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY # # The original version of this file is located in the https://github.com/istio/common-files repo. # If you're looking at this file in a different repo and want to make a change, please go to the # common-files repo, make the change there and check it in. Then come back to this repo and run -# "make updatecommon". +# "make update-common". -# Copyright 2018 Istio Authors +# Copyright Istio Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,9 +21,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -updatecommon: - @git clone https://github.com/istio/common-files - @cd common-files - @git rev-parse HEAD >.commonfiles.sha - @cp -r common-files/files/* common-files/files/.[^.]* . - @rm -fr common-files +GOGC=25 golangci-lint run -c ./common/config/.golangci.yml diff --git a/common/scripts/report_build_info.sh b/common/scripts/report_build_info.sh new file mode 100755 index 000000000..06f9afcf5 --- /dev/null +++ b/common/scripts/report_build_info.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY +# +# The original version of this file is located in the https://github.com/istio/common-files repo. +# If you're looking at this file in a different repo and want to make a change, please go to the +# common-files repo, make the change there and check it in. Then come back to this repo and run +# "make update-common". + +# Copyright Istio 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. + +if BUILD_GIT_REVISION=$(git rev-parse HEAD 2> /dev/null); then + if [[ -n "$(git status --porcelain 2>/dev/null)" ]]; then + BUILD_GIT_REVISION=${BUILD_GIT_REVISION}"-dirty" + fi +else + BUILD_GIT_REVISION=unknown +fi + +# Check for local changes +if git diff-index --quiet HEAD --; then + tree_status="Clean" +else + tree_status="Modified" +fi + +# security wanted VERSION='unknown' +VERSION="${BUILD_GIT_REVISION}" +if [[ -n ${ISTIO_VERSION} ]]; then + VERSION="${ISTIO_VERSION}" +fi + +GIT_DESCRIBE_TAG=$(git describe --tags) + +# used by common/scripts/gobuild.sh +echo "istio.io/pkg/version.buildVersion=${VERSION}" +echo "istio.io/pkg/version.buildGitRevision=${BUILD_GIT_REVISION}" +echo "istio.io/pkg/version.buildStatus=${tree_status}" +echo "istio.io/pkg/version.buildTag=${GIT_DESCRIBE_TAG}" diff --git a/extensions/metadata_exchange/build_wasm.sh b/extensions/metadata_exchange/build_wasm.sh index 2d7d3c33f..a1066abb9 100755 --- a/extensions/metadata_exchange/build_wasm.sh +++ b/extensions/metadata_exchange/build_wasm.sh @@ -1,3 +1,18 @@ #!/bin/bash + +# Copyright Istio 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. + docker run -e uid="$(id -u)" -e gid="$(id -g)" -v $PWD:/work -w /work -v $(realpath $PWD/../../extensions):/work/extensions wasmsdk:v1 bash /build_wasm.sh rmdir extensions diff --git a/extensions/stats/build_wasm.sh b/extensions/stats/build_wasm.sh index 2d7d3c33f..a1066abb9 100755 --- a/extensions/stats/build_wasm.sh +++ b/extensions/stats/build_wasm.sh @@ -1,3 +1,18 @@ #!/bin/bash + +# Copyright Istio 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. + docker run -e uid="$(id -u)" -e gid="$(id -g)" -v $PWD:/work -w /work -v $(realpath $PWD/../../extensions):/work/extensions wasmsdk:v1 bash /build_wasm.sh rmdir extensions diff --git a/extensions/stats/run_test.sh b/extensions/stats/run_test.sh index 0b6fc836d..412c226f7 100755 --- a/extensions/stats/run_test.sh +++ b/extensions/stats/run_test.sh @@ -1,3 +1,17 @@ +# Copyright Istio 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. + WD=$(dirname $0) WD=$(cd $WD; pwd) diff --git a/scripts/check_license.sh b/scripts/check_license.sh deleted file mode 100755 index 9a2898777..000000000 --- a/scripts/check_license.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash - -# WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY -# -# The original version of this file is located in the https://github.com/istio/common-files repo. -# If you're looking at this file in a different repo and want to make a change, please go to the -# common-files repo, make the change there and check it in. Then come back to this repo and run -# "make updatecommon". - -# Copyright 2018 Istio 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. - -set -e - -SCRIPTPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -ROOTDIR=$(dirname "${SCRIPTPATH}") -cd "${ROOTDIR}" - -ADD_LICENSE=$1 -THISYEAR=$(date +"%Y") -if [[ $ADD_LICENSE == true ]]; then - echo "Check License script is running in ADD_LICENSE mode. It will automatically add any missing licenses for you." -fi - -ret=0 -for fn in $(find "${ROOTDIR}" -type f \( -name '*.go' -o -name '*.cc' -o -name '*.h' -o -name '*.proto' \) | grep -v vendor | grep -v testdata); do - if [[ $fn == *.pb.go ]];then - continue - fi - - if head -20 "$fn" | grep "auto\\-generated" > /dev/null; then - continue - fi - - if head -20 "$fn" | grep "DO NOT EDIT" > /dev/null; then - continue - fi - - if head -20 "$fn" | grep "Code generated by go-bindata" > /dev/null; then - continue - fi - - if ! head -20 "$fn" | grep "Apache License, Version 2" > /dev/null; then - if [[ $ADD_LICENSE == true ]]; then - echo "// Copyright ${THISYEAR} Istio 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. - -$(cat "${fn}")" > "${fn}" - else - echo "${fn} missing license" - ret=$((ret+1)) - fi - fi - - if ! head -20 "$fn" | grep Copyright > /dev/null; then - echo "${fn} missing Copyright" - ret=$((ret+1)) - fi -done - -exit $ret diff --git a/scripts/run_gofmt.sh b/scripts/run_gofmt.sh deleted file mode 100755 index 30f6184ba..000000000 --- a/scripts/run_gofmt.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - -# WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY -# -# The original version of this file is located in the https://github.com/istio/common-files repo. -# If you're looking at this file in a different repo and want to make a change, please go to the -# common-files repo, make the change there and check it in. Then come back to this repo and run -# "make updatecommon". - -# Copyright 2018 Istio 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. - -# Applies requisite code formatters to the source tree - -set -e - -SCRIPTPATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -ROOTDIR=$(dirname "${SCRIPTPATH}") -cd "${ROOTDIR}" - -# Go format tool to use -# While 'goimports' is preferred we temporarily use 'gofmt' until https://github.com/golang/go/issues/28200 is resolved -GO_FMT_TOOL=goimportsdocker - -PKGS=${PKGS:-"."} -if [[ -z ${GO_FILES} ]];then - GO_FILES=$(find "${PKGS}" -type f -name '*.go' ! -name '*.gen.go' ! -name '*.pb.go' ! -name '*mock*.go' | grep -v ./vendor) -fi - -# need to pin goimports to align with golangci-lint. SHA is from x/tools repo -if [ $GO_FMT_TOOL = "goimportsdocker" ]; then - GO_IMPORTS_DOCKER="gcr.io/istio-testing/goimports:379209517ffe" - tool="docker run -i --rm -v ${ROOTDIR}:${ROOTDIR} -w ${ROOTDIR} ${GO_IMPORTS_DOCKER} /goimports" - fmt_args="-w -local istio.io" -fi - -if [ $GO_FMT_TOOL = "gofmt" ]; then - tool=gofmt - fmt_args="-w" -fi - -echo "Formatting the source files" -# shellcheck disable=SC2086 -$tool ${fmt_args} ${GO_FILES} -exit $?