Makefile (4513B)
1 PRE_RELEASE_VERSION ?= 2 3 RELEASE_MANIFEST_FILE ?= 4 RELEASE_CHGLOG_DESC_FILE ?= 5 6 REPOTOOLS_VERSION ?= latest 7 REPOTOOLS_MODULE = github.com/awslabs/aws-go-multi-module-repository-tools 8 REPOTOOLS_CMD_CALCULATE_RELEASE = ${REPOTOOLS_MODULE}/cmd/calculaterelease@${REPOTOOLS_VERSION} 9 REPOTOOLS_CMD_CALCULATE_RELEASE_ADDITIONAL_ARGS ?= 10 REPOTOOLS_CMD_UPDATE_REQUIRES = ${REPOTOOLS_MODULE}/cmd/updaterequires@${REPOTOOLS_VERSION} 11 REPOTOOLS_CMD_UPDATE_MODULE_METADATA = ${REPOTOOLS_MODULE}/cmd/updatemodulemeta@${REPOTOOLS_VERSION} 12 REPOTOOLS_CMD_GENERATE_CHANGELOG = ${REPOTOOLS_MODULE}/cmd/generatechangelog@${REPOTOOLS_VERSION} 13 REPOTOOLS_CMD_CHANGELOG = ${REPOTOOLS_MODULE}/cmd/changelog@${REPOTOOLS_VERSION} 14 REPOTOOLS_CMD_TAG_RELEASE = ${REPOTOOLS_MODULE}/cmd/tagrelease@${REPOTOOLS_VERSION} 15 REPOTOOLS_CMD_MODULE_VERSION = ${REPOTOOLS_MODULE}/cmd/moduleversion@${REPOTOOLS_VERSION} 16 REPOTOOLS_CMD_EACHMODULE = ${REPOTOOLS_MODULE}/cmd/eachmodule@${REPOTOOLS_VERSION} 17 18 UNIT_TEST_TAGS= 19 BUILD_TAGS= 20 21 ifneq ($(PRE_RELEASE_VERSION),) 22 REPOTOOLS_CMD_CALCULATE_RELEASE_ADDITIONAL_ARGS += -preview=${PRE_RELEASE_VERSION} 23 endif 24 25 smithy-publish-local: 26 cd codegen && ./gradlew publishToMavenLocal 27 28 smithy-build: 29 cd codegen && ./gradlew build 30 31 smithy-clean: 32 cd codegen && ./gradlew clean 33 34 GRADLE_RETRIES := 3 35 GRADLE_SLEEP := 2 36 37 # We're making a call to ./gradlew to trigger downloading Gradle and 38 # starting the daemon. Any call works, so using `./gradlew help` 39 ensure-gradle-up: 40 @cd codegen && for i in $(shell seq 1 $(GRADLE_RETRIES)); do \ 41 echo "Checking if Gradle daemon is up, attempt $$i..."; \ 42 if ./gradlew help; then \ 43 echo "Gradle daemon is up!"; \ 44 exit 0; \ 45 fi; \ 46 echo "Failed to start Gradle, retrying in $(GRADLE_SLEEP) seconds..."; \ 47 sleep $(GRADLE_SLEEP); \ 48 done; \ 49 echo "Failed to start Gradle after $(GRADLE_RETRIES) attempts."; \ 50 exit 1 51 52 ################## 53 # Linting/Verify # 54 ################## 55 .PHONY: verify vet cover 56 57 verify: vet 58 59 vet: vet-modules-. 60 61 vet-modules-%: 62 go run ${REPOTOOLS_CMD_EACHMODULE} -p $(subst vet-modules-,,$@) \ 63 "go vet ${BUILD_TAGS} --all ./..." 64 65 cover: 66 go test ${BUILD_TAGS} -coverprofile c.out ./... 67 @cover=`go tool cover -func c.out | grep '^total:' | awk '{ print $$3+0 }'`; \ 68 echo "total (statements): $$cover%"; 69 70 ################ 71 # Unit Testing # 72 ################ 73 .PHONY: test unit unit-race 74 75 test: unit-race 76 77 unit: verify unit-modules-. 78 79 unit-modules-%: 80 go run ${REPOTOOLS_CMD_EACHMODULE} -p $(subst unit-modules-,,$@) \ 81 "go test -timeout=1m ${UNIT_TEST_TAGS} ./..." 82 83 unit-race: verify unit-race-modules-. 84 85 unit-race-modules-%: 86 go run ${REPOTOOLS_CMD_EACHMODULE} -p $(subst unit-race-modules-,,$@) \ 87 "go test -timeout=1m ${UNIT_TEST_TAGS} -race -cpu=4 ./..." 88 89 90 ##################### 91 # Release Process # 92 ##################### 93 .PHONY: preview-release pre-release-validation release 94 95 preview-release: 96 go run ${REPOTOOLS_CMD_CALCULATE_RELEASE} ${REPOTOOLS_CMD_CALCULATE_RELEASE_ADDITIONAL_ARGS} 97 98 pre-release-validation: 99 @if [[ -z "${RELEASE_MANIFEST_FILE}" ]]; then \ 100 echo "RELEASE_MANIFEST_FILE is required to specify the file to write the release manifest" && false; \ 101 fi 102 @if [[ -z "${RELEASE_CHGLOG_DESC_FILE}" ]]; then \ 103 echo "RELEASE_CHGLOG_DESC_FILE is required to specify the file to write the release notes" && false; \ 104 fi 105 106 release: pre-release-validation 107 go run ${REPOTOOLS_CMD_CALCULATE_RELEASE} -o ${RELEASE_MANIFEST_FILE} ${REPOTOOLS_CMD_CALCULATE_RELEASE_ADDITIONAL_ARGS} 108 go run ${REPOTOOLS_CMD_UPDATE_REQUIRES} -release ${RELEASE_MANIFEST_FILE} 109 go run ${REPOTOOLS_CMD_UPDATE_MODULE_METADATA} -release ${RELEASE_MANIFEST_FILE} 110 go run ${REPOTOOLS_CMD_GENERATE_CHANGELOG} -release ${RELEASE_MANIFEST_FILE} -o ${RELEASE_CHGLOG_DESC_FILE} 111 go run ${REPOTOOLS_CMD_CHANGELOG} rm -all 112 go run ${REPOTOOLS_CMD_TAG_RELEASE} -release ${RELEASE_MANIFEST_FILE} 113 114 module-version: 115 @go run ${REPOTOOLS_CMD_MODULE_VERSION} . 116 117 ############## 118 # Repo Tools # 119 ############## 120 .PHONY: install-changelog 121 122 external-changelog: 123 mkdir -p .changelog 124 cp changelog-template.json .changelog/00000000-0000-0000-0000-000000000000.json 125 @echo "Generate a new UUID and update the file at .changelog/00000000-0000-0000-0000-000000000000.json" 126 @echo "Make sure to rename the file with your new id, like .changelog/12345678-1234-1234-1234-123456789012.json" 127 @echo "See CONTRIBUTING.md 'Changelog Documents' and an example at https://github.com/aws/smithy-go/pull/543/files" 128 129 install-changelog: 130 go install ${REPOTOOLS_MODULE}/cmd/changelog@${REPOTOOLS_VERSION}