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