1PRE_RELEASE_VERSION ?=
  2
  3RELEASE_MANIFEST_FILE ?=
  4RELEASE_CHGLOG_DESC_FILE ?=
  5
  6REPOTOOLS_VERSION ?= latest
  7REPOTOOLS_MODULE = github.com/awslabs/aws-go-multi-module-repository-tools
  8REPOTOOLS_CMD_CALCULATE_RELEASE = ${REPOTOOLS_MODULE}/cmd/calculaterelease@${REPOTOOLS_VERSION}
  9REPOTOOLS_CMD_CALCULATE_RELEASE_ADDITIONAL_ARGS ?=
 10REPOTOOLS_CMD_UPDATE_REQUIRES = ${REPOTOOLS_MODULE}/cmd/updaterequires@${REPOTOOLS_VERSION}
 11REPOTOOLS_CMD_UPDATE_MODULE_METADATA = ${REPOTOOLS_MODULE}/cmd/updatemodulemeta@${REPOTOOLS_VERSION}
 12REPOTOOLS_CMD_GENERATE_CHANGELOG = ${REPOTOOLS_MODULE}/cmd/generatechangelog@${REPOTOOLS_VERSION}
 13REPOTOOLS_CMD_CHANGELOG = ${REPOTOOLS_MODULE}/cmd/changelog@${REPOTOOLS_VERSION}
 14REPOTOOLS_CMD_TAG_RELEASE = ${REPOTOOLS_MODULE}/cmd/tagrelease@${REPOTOOLS_VERSION}
 15REPOTOOLS_CMD_MODULE_VERSION = ${REPOTOOLS_MODULE}/cmd/moduleversion@${REPOTOOLS_VERSION}
 16
 17UNIT_TEST_TAGS=
 18BUILD_TAGS=
 19
 20ifneq ($(PRE_RELEASE_VERSION),)
 21	REPOTOOLS_CMD_CALCULATE_RELEASE_ADDITIONAL_ARGS += -preview=${PRE_RELEASE_VERSION}
 22endif
 23
 24smithy-publish-local:
 25	cd codegen && ./gradlew publishToMavenLocal
 26
 27smithy-build:
 28	cd codegen && ./gradlew build
 29
 30smithy-clean:
 31	cd codegen && ./gradlew clean
 32
 33##################
 34# Linting/Verify #
 35##################
 36.PHONY: verify vet cover
 37
 38verify: vet
 39
 40vet:
 41	go vet ${BUILD_TAGS} --all ./...
 42
 43cover:
 44	go test ${BUILD_TAGS} -coverprofile c.out ./...
 45	@cover=`go tool cover -func c.out | grep '^total:' | awk '{ print $$3+0 }'`; \
 46		echo "total (statements): $$cover%";
 47
 48################
 49# Unit Testing #
 50################
 51.PHONY: unit unit-race unit-test unit-race-test
 52
 53unit: verify
 54	go vet ${BUILD_TAGS} --all ./... && \
 55	go test ${BUILD_TAGS} ${RUN_NONE} ./... && \
 56	go test -timeout=1m ${UNIT_TEST_TAGS} ./...
 57
 58unit-race: verify
 59	go vet ${BUILD_TAGS} --all ./... && \
 60	go test ${BUILD_TAGS} ${RUN_NONE} ./... && \
 61	go test -timeout=1m ${UNIT_TEST_TAGS} -race -cpu=4 ./...
 62
 63unit-test: verify
 64	go test -timeout=1m ${UNIT_TEST_TAGS} ./...
 65
 66unit-race-test: verify
 67	go test -timeout=1m ${UNIT_TEST_TAGS} -race -cpu=4 ./...
 68
 69#####################
 70#  Release Process  #
 71#####################
 72.PHONY: preview-release pre-release-validation release
 73
 74preview-release:
 75	go run ${REPOTOOLS_CMD_CALCULATE_RELEASE} ${REPOTOOLS_CMD_CALCULATE_RELEASE_ADDITIONAL_ARGS}
 76
 77pre-release-validation:
 78	@if [[ -z "${RELEASE_MANIFEST_FILE}" ]]; then \
 79		echo "RELEASE_MANIFEST_FILE is required to specify the file to write the release manifest" && false; \
 80	fi
 81	@if [[ -z "${RELEASE_CHGLOG_DESC_FILE}" ]]; then \
 82		echo "RELEASE_CHGLOG_DESC_FILE is required to specify the file to write the release notes" && false; \
 83	fi
 84
 85release: pre-release-validation
 86	go run ${REPOTOOLS_CMD_CALCULATE_RELEASE} -o ${RELEASE_MANIFEST_FILE} ${REPOTOOLS_CMD_CALCULATE_RELEASE_ADDITIONAL_ARGS}
 87	go run ${REPOTOOLS_CMD_UPDATE_REQUIRES} -release ${RELEASE_MANIFEST_FILE}
 88	go run ${REPOTOOLS_CMD_UPDATE_MODULE_METADATA} -release ${RELEASE_MANIFEST_FILE}
 89	go run ${REPOTOOLS_CMD_GENERATE_CHANGELOG} -release ${RELEASE_MANIFEST_FILE} -o ${RELEASE_CHGLOG_DESC_FILE}
 90	go run ${REPOTOOLS_CMD_CHANGELOG} rm -all
 91	go run ${REPOTOOLS_CMD_TAG_RELEASE} -release ${RELEASE_MANIFEST_FILE}
 92
 93module-version:
 94	@go run ${REPOTOOLS_CMD_MODULE_VERSION} .
 95
 96##############
 97# Repo Tools #
 98##############
 99.PHONY: install-changelog
100
101install-changelog:
102	go install ${REPOTOOLS_MODULE}/cmd/changelog@${REPOTOOLS_VERSION}