Skip to content

Instantly share code, notes, and snippets.

@thiagozs
Last active October 31, 2024 19:52
Show Gist options
  • Save thiagozs/13aa08645a0f13d5ff029d4ecc76a853 to your computer and use it in GitHub Desktop.
Save thiagozs/13aa08645a0f13d5ff029d4ecc76a853 to your computer and use it in GitHub Desktop.
Makefile semver
.PHONY: help
## ENVIRONMENT VARIABLES
VERSION_FILE = release-candidate.txt
SEMVER ?= 0.1.0
CURRENT_VERSION := $(shell [ -f $(VERSION_FILE) ] && cat $(VERSION_FILE) || echo $(SEMVER))
# Self-Documented Makefile
# https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
.DEFAULT_GOAL := help
################### samver ###################
increment_major = $(shell \
VERSION=$$(echo $(CURRENT_VERSION) | sed 's/^v//'); \
MAJOR=$$(echo $$VERSION | cut -d. -f1); \
MINOR=$$(echo $$VERSION | cut -d. -f2); \
PATCH=$$(echo $$VERSION | cut -d. -f3); \
MAJOR=$$((MAJOR + 1)); \
echo "v$$MAJOR.0.0" \
)
increment_minor = $(shell \
VERSION=$$(echo $(CURRENT_VERSION) | sed 's/^v//'); \
MAJOR=$$(echo $$VERSION | cut -d. -f1); \
MINOR=$$(echo $$VERSION | cut -d. -f2); \
PATCH=$$(echo $$VERSION | cut -d. -f3); \
MINOR=$$((MINOR + 1)); \
echo "v$$MAJOR.$$MINOR.0" \
)
increment_patch = $(shell \
VERSION=$$(echo $(CURRENT_VERSION) | sed 's/^v//'); \
MAJOR=$$(echo $$VERSION | cut -d. -f1); \
MINOR=$$(echo $$VERSION | cut -d. -f2); \
PATCH=$$(echo $$VERSION | cut -d. -f3); \
PATCH=$$((PATCH + 1)); \
echo "v$$MAJOR.$$MINOR.$$PATCH" \
)
.PHONY: semver
semver: ## Show current version
@echo "Versão atual: $(CURRENT_VERSION)"
.PHONY: major
major: ## Increment major version
$(eval NEW_VERSION := $(call increment_major))
@echo $(NEW_VERSION) > $(VERSION_FILE)
@echo "Versão Major incrementada para: $(NEW_VERSION)"
.PHONY: minor
minor: ## Increment minor version
$(eval NEW_VERSION := $(call increment_minor))
@echo $(NEW_VERSION) > $(VERSION_FILE)
@echo "Versão Minor incrementada para: $(NEW_VERSION)"
.PHONY: patch
patch: ## Increment patch version
$(eval NEW_VERSION := $(call increment_patch))
@echo $(NEW_VERSION) > $(VERSION_FILE)
@echo "Versão Patch incrementada para: $(NEW_VERSION)"
.PHONY: save
save: ## Save current version
@echo $(CURRENT_VERSION) > $(VERSION_FILE)
@echo "Versão atual salva como: $(CURRENT_VERSION)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment