diff --git a/.circleci/config.yml b/.circleci/config.yml index be742713..1ad3908e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,8 +1,9 @@ version: 2.1 jobs: build: + resource_class: large machine: - image: 'ubuntu-1604:201903-01' + image: 'ubuntu-2004:202107-02' working_directory: ~/terraform-provider-watchtower steps: - add_ssh_keys: @@ -10,7 +11,27 @@ jobs: # hc-github-team-secure-boundary github user,TF_ACC=1 ~/.go/bin/go test ./... -v $(TESTARGS) -timeout 120m to read private modules - "d4:7f:b2:f7:6f:4d:e7:21:cc:d2:b7:6a:8b:68:e6:d4" - checkout + - run: + name: "Install go" + command: | + unset GOPATH # ci image has done strange things with GOPATH, unset it so install-go can fix it + make install-go + source ~/.bashrc + go mod download + - run: + name: "Initialize Test Database" + command: | + sudo apt-get update && sudo apt-get install -y postgresql-client jq + source ~/.bashrc + make test-database-up + until pg_isready -h 127.0.0.1; do docker container inspect boundary-sql-tests &> /dev/null || exit -1; sleep 1; done - run: name: "Run Acceptance Tests" command: | + source ~/.bashrc make testacc-ci + - run: + name: "Cleanup" + when: always + command: | + make test-database-down diff --git a/Makefile b/Makefile index 12e7e8e2..1df24ce2 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -default: testacc +default: testacc GOOS=$(shell go env GOOS) GOARCH=$(shell go env GOARCH) INSTALL_PATH=~/.local/share/terraform/plugins/localhost/providers/boundary/0.0.1/linux_$(GOARCH) @@ -11,6 +11,16 @@ ifeq ($(GOOS), "windows") INSTALL_PATH=%APPDATA%/HashiCorp/Terraform/plugins/localhost/providers/boundary/0.0.1/windows_$(GOARCH) endif +REGISTRY_NAME?=docker.io/hashicorpboundary +IMAGE_NAME=postgres +IMAGE_TAG ?= $(REGISTRY_NAME)/$(IMAGE_NAME):11-alpine +DOCKER_ARGS ?= -d +PG_OPTS ?= +TEST_DB_PORT ?= 5432 +BOUNDARY_VERSION = $(shell go mod edit -json | jq -r '.["Require"][] | select(.Path=="github.com/hashicorp/boundary") | .["Version"]') +GOPATH ?= ~/go +GOMODCACHE ?= $(GOPATH)/pkg/mod + tools: go generate -tags tools tools/tools.go @@ -28,11 +38,13 @@ testacc-ci: install-go git config --global --add url."git@github.com:".insteadOf "https://github.com/" TF_ACC=1 ~/.go/bin/go test ./... -v $(TESTARGS) -timeout 120m -install-go: +install-go: ~/.go/bin/go + +~/.go/bin/go: ./ci/goinstall.sh dev: - mkdir -p $(INSTALL_PATH) + mkdir -p $(INSTALL_PATH) go build -o $(INSTALL_PATH)/terraform-provider-boundary main.go all: @@ -41,10 +53,35 @@ all: GOOS=windows go build -o $(BUILD_ALL_PATH)/terraform-provider-boundary_windows-amd64 main.go GOOS=linux go build -o $(BUILD_ALL_PATH)/terraform-provider-boundary_linux-amd64 main.go -docs: +docs: go run github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs rm-id-flag-from-docs: find docs/ -name "*.md" -type f | xargs sed -i -e '/- \*\*id\*\*/d' -.PHONY: testacc tools docs +test-database-up: + @echo "Using image: $(IMAGE_TAG)" + @echo "Additional postgres configuration: $(PG_OPTS)" + @echo "Using volume: $(GOMODCACHE)/github.com/hashicorp/boundary@$(BOUNDARY_VERSION)/internal/db/schema/migrations/postgres:/migrations" + @docker run \ + $(DOCKER_ARGS) \ + --name boundary-sql-tests \ + -p $(TEST_DB_PORT):5432 \ + -e POSTGRES_PASSWORD=boundary \ + -e POSTGRES_USER=boundary \ + -e POSTGRES_DB=boundary \ + -e PGDATA=/pgdata \ + --mount type=tmpfs,destination=/pgdata \ + -v "$(GOMODCACHE)/github.com/hashicorp/boundary@$(BOUNDARY_VERSION)/internal/db/schema/migrations/postgres":/migrations \ + $(IMAGE_TAG) \ + -c 'config_file=/etc/postgresql/postgresql.conf' \ + $(PG_OPTS) 1> /dev/null + @echo "Test database available at: 127.0.0.1:$(TEST_DB_PORT)" + @echo "For database logs run:" + @echo " docker logs boundary-sql-tests" + +test-database-down: + docker stop boundary-sql-tests || true + docker rm -v boundary-sql-tests || true + +.PHONY: testacc tools docs test-database-up test-database-down diff --git a/README.md b/README.md index bc284465..54a57b8b 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,15 @@ If you wish to work on the provider, you'll first need [Go](http://www.golang.or To compile the provider, run `go install`. This will build the provider and put the provider binary in the `$GOPATH/bin` directory. -In order to run the full suite of Acceptance tests, run `make testacc`. +In order to run the full suite of Acceptance tests, +a postgres docker container must be started first: + +```sh +$ go mod download # ensure boundary is installed, files are used by the docker image +$ make test-database-up +``` + +Once the test database is ready the tests can be run using `make testacc`. *Note:* Acceptance tests create real resources, and often cost money to run. @@ -61,6 +69,9 @@ In order to run the full suite of Acceptance tests, run `make testacc`. $ make testacc ``` +For more details on the docker image and troubleshooting see the +[boundary testing doc](https://github.com/hashicorp/boundary/blob/main/CONTRIBUTING.md#testing). + Generating Docs ----------------------