# # This is a shim installed automatically by the build-harness # https://github.com/cloudposse/build-harness # export SHELL = /bin/bash export BUILD_HARNESS_PATH ?= $(shell until [ -d "$(BUILD_HARNESS_PROJECT)" ] || [ "`pwd`" == '/' ]; do cd ..; done; pwd)/$(BUILD_HARNESS_PROJECT) export BUILD_HARNESS_ORG ?= cloudposse export BUILD_HARNESS_PROJECT ?= build-harness export BUILD_HARNESS_DOCKER_IMAGE ?= $(BUILD_HARNESS_ORG)/$(BUILD_HARNESS_PROJECT) export BUILD_HARNESS_BRANCH ?= master # It is kind of expensive to figure out the Docker SHA tag, so we just define the command here, and only call it when needed export BUILD_HARNESS_DOCKER_SHA_TAG_CMD := git -C "$(BUILD_HARNESS_PATH)" log -n 1 --format=sha-%h 2>/dev/null || echo latest -include $(BUILD_HARNESS_PATH)/Makefile .PHONY : init ## Init build-harness init:: @curl --retry 5 --fail --silent --retry-delay 1 https://raw.githubusercontent.com/$(BUILD_HARNESS_ORG)/$(BUILD_HARNESS_PROJECT)/$(BUILD_HARNESS_BRANCH)/bin/install.sh | \ bash -s "$(BUILD_HARNESS_ORG)" "$(BUILD_HARNESS_PROJECT)" "$(BUILD_HARNESS_BRANCH)" .PHONY : clean ## Clean build-harness clean:: @[ "$(BUILD_HARNESS_PATH)" == '/' ] || \ [ "$(BUILD_HARNESS_PATH)" == '.' ] || \ [ "$(BUILD_HARNESS_PATH)" == '/$(BUILD_HARNESS_PROJECT)' ] || \ echo rm -rf $(BUILD_HARNESS_PATH) .PHONY: build-harness/shell builder build-harness/shell/pull builder/pull build-harness/shell/pull builder/pull: BUILD_HARNESS_DOCKER_SHA_TAG ?= $(shell $(BUILD_HARNESS_DOCKER_SHA_TAG_CMD)) build-harness/shell/pull builder/pull: docker pull $(BUILD_HARNESS_DOCKER_IMAGE):$(BUILD_HARNESS_DOCKER_SHA_TAG) @[[ "$(BUILD_HARNESS_DOCKER_SHA_TAG)" == "latest" ]] || docker pull $(BUILD_HARNESS_DOCKER_IMAGE):latest DEFAULT_DOCKER_ENVS := AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN TERM AWS_PROFILE AWS_REGION \ AWS_DEFAULT_PROFILE AWS_DEFAULT_REGION EXTRA_DOCKER_ENVS ?= AWS_CONFIG_FILE AWS_SHARED_CREDENTIALS_FILE DOCKER_ENVS ?= $(DEFAULT_DOCKER_ENVS) $(EXTRA_DOCKER_ENVS) ## Start a shell inside of the `build-harness` docker container with `make build-harness/shell` or `make builder` ## Run `make` targets inside the build-harness shell by setting `TARGETS` or `TARGET`, e.g. ## make builder TARGETS="github/init readme" build-harness/shell builder tester: MOUNT_HOME ?= $(shell [ -d "$$HOME" ] && printf -- "-e HOME -v \"%s\":\"%s\"" "$$HOME" "$$HOME") build-harness/shell builder tester: TARGETS ?= $(TARGET) build-harness/shell builder tester: ARGS := $(if $(TARGETS),$(TARGETS),-l || true) build-harness/shell builder tester: ENTRYPOINT := $(if $(TARGETS),/usr/bin/make,/bin/bash) build-harness/shell builder: RUNNER_DOCKER_TAG ?= $(shell $(BUILD_HARNESS_DOCKER_SHA_TAG_CMD)) build-harness/shell builder: RUNNER_DOCKER_IMAGE ?= $(BUILD_HARNESS_DOCKER_IMAGE) build-harness/shell builder: build-harness/runner @exit 0 .PHONY: build-harness/shell-slim builder-slim pr/auto-format pr/auto-format/host tf14-upgrade build-harness/shell-slim builder-slim pr/auto-format tf14-upgrade: RUNNER_DOCKER_IMAGE ?= $(BUILD_HARNESS_DOCKER_IMAGE) build-harness/shell-slim builder-slim tf14-upgrade pr/auto-format: RUNNER_DOCKER_SHA_TAG ?= $(shell $(BUILD_HARNESS_DOCKER_SHA_TAG_CMD)) build-harness/shell-slim builder-slim tf14-upgrade pr/auto-format: RUNNER_DOCKER_TAG ?= \ $(shell docker inspect --type=image $(RUNNER_DOCKER_IMAGE):$(RUNNER_DOCKER_SHA_TAG) >/dev/null 2>&1 && \ echo "$(RUNNER_DOCKER_SHA_TAG) " || echo "slim-$(RUNNER_DOCKER_SHA_TAG)") build-harness/shell-slim builder-slim: TARGETS ?= $(TARGET) build-harness/shell-slim builder-slim: ARGS := $(if $(TARGETS),$(TARGETS),-l || true) build-harness/shell-slim builder-slim: ENTRYPOINT := $(if $(TARGETS),/usr/bin/make,/bin/bash) build-harness/shell-slim builder-slim: build-harness/runner pr/auto-format tf14-upgrade : ENTRYPOINT := /usr/bin/make pr/auto-format pr/auto-format/host: ARGS := terraform/fmt readme pr/auto-format: build-harness/runner pr/auto-format/host: $(MAKE) $(ARGS) tf14-upgrade: export TERRAFORM_FORCE_README := true tf14-upgrade: ARGS := github/init terraform/v14-rewrite tf14-upgrade: build-harness/runner .PHONY: tester tester/pull tester tester/pull: TEST_HARNESS_DOCKER_IMAGE ?= cloudposse/test-harness tester tester/pull: TEST_HARNESS_DOCKER_TAG ?= latest tester: RUNNER_DOCKER_IMAGE ?= $(TEST_HARNESS_DOCKER_IMAGE) tester: RUNNER_DOCKER_TAG ?= $(TEST_HARNESS_DOCKER_TAG) tester: build-harness/runner tester/pull: docker pull $(TEST_HARNESS_DOCKER_IMAGE):$(TEST_HARNESS_DOCKER_TAG) .PHONY: build-harness/runner build-harness/runner: $(info Starting $(RUNNER_DOCKER_IMAGE):$(RUNNER_DOCKER_TAG)) docker run --name build-harness \ --rm -it \ -e PACKAGES_PREFER_HOST=true \ $(addprefix -e ,$(DOCKER_ENVS)) \ $(MOUNT_HOME) \ -v $(CURDIR):/opt \ --workdir /opt \ --entrypoint $(ENTRYPOINT) \ $(RUNNER_DOCKER_IMAGE):$(RUNNER_DOCKER_TAG) $(ARGS) .PHONY: reset-owner reset-owner: @if [[ -n $$(find . -xdev -user 0 -print) ]]; then \ printf "\n* To reset ownership on files, run:\n sudo find . -xdev -user 0 -exec chown $$USER {} \;\n\n" ; \ else \ printf "\n* No root-owned files found\n\n" ; \ fi