Makefile 4.4 KB

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