Makefile raw
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}
131