test: prevent the container tests from depending on consul (#16029)

The consul container tests orchestrate running containers from various
versions of consul to test things like upgrades. Having the test
framework itself depend on the consul codebase inherently links it to a
specific version of consul which may make some test approaches in the
future difficult.

This change prohibits any such relationship via a custom linting rule.
Unfortunately because the api, sdk, and
test/integration/consul-container packages are submodules of
github.com/hashicorp/consul the gomodguard linter is incapable of
handling those separately hence the need for some custom bash instead.
This commit is contained in:
R.B. Boyer 2023-01-20 14:45:13 -06:00 committed by GitHub
parent 20146f2916
commit 5ab39af773
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 2 deletions

View File

@ -190,6 +190,14 @@ jobs:
- run: go install github.com/reillywatson/enumcover/cmd/enumcover@master && enumcover ./... - run: go install github.com/reillywatson/enumcover/cmd/enumcover@master && enumcover ./...
- run: *notify-slack-failure - run: *notify-slack-failure
lint-container-test-deps:
docker:
- image: *GOLANG_IMAGE
steps:
- checkout
- run: make lint-container-test-deps
- run: *notify-slack-failure
lint: lint:
description: "Run golangci-lint" description: "Run golangci-lint"
parameters: parameters:
@ -1076,6 +1084,7 @@ workflows:
- check-generated-protobuf: *filter-ignore-non-go-branches - check-generated-protobuf: *filter-ignore-non-go-branches
- check-generated-deep-copy: *filter-ignore-non-go-branches - check-generated-deep-copy: *filter-ignore-non-go-branches
- lint-enums: *filter-ignore-non-go-branches - lint-enums: *filter-ignore-non-go-branches
- lint-container-test-deps: *filter-ignore-non-go-branches
- lint-consul-retry: *filter-ignore-non-go-branches - lint-consul-retry: *filter-ignore-non-go-branches
- lint: *filter-ignore-non-go-branches - lint: *filter-ignore-non-go-branches
- lint: - lint:

View File

@ -314,18 +314,32 @@ other-consul:
exit 1 ; \ exit 1 ; \
fi fi
lint: lint-tools lint: -lint-main lint-container-test-deps
.PHONY: -lint-main
-lint-main: lint-tools
@echo "--> Running golangci-lint" @echo "--> Running golangci-lint"
@golangci-lint run --build-tags '$(GOTAGS)' && \ @golangci-lint run --build-tags '$(GOTAGS)' && \
(cd api && golangci-lint run --build-tags '$(GOTAGS)') && \ (cd api && golangci-lint run --build-tags '$(GOTAGS)') && \
(cd sdk && golangci-lint run --build-tags '$(GOTAGS)') (cd sdk && golangci-lint run --build-tags '$(GOTAGS)')
@echo "--> Running golangci-lint (container tests)" @echo "--> Running golangci-lint (container tests)"
cd test/integration/consul-container && golangci-lint run --build-tags '$(GOTAGS)' @cd test/integration/consul-container && golangci-lint run --build-tags '$(GOTAGS)'
@echo "--> Running lint-consul-retry" @echo "--> Running lint-consul-retry"
@lint-consul-retry @lint-consul-retry
@echo "--> Running enumcover" @echo "--> Running enumcover"
@enumcover ./... @enumcover ./...
.PHONY: lint-container-test-deps
lint-container-test-deps:
@echo "--> Checking container tests for bad dependencies"
@cd test/integration/consul-container && ( \
found="$$(go list -m all | grep -c '^github.com/hashicorp/consul ')" ; \
if [[ "$$found" != "0" ]]; then \
echo "test/integration/consul-container: This project should not depend on the root consul module" >&2 ; \
exit 1 ; \
fi \
)
# Build the static web ui inside a Docker container. For local testing only; do not commit these assets. # Build the static web ui inside a Docker container. For local testing only; do not commit these assets.
ui: ui-docker ui: ui-docker