release.mk 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # versioning
  2. BUMP_VERSION_CONFIG = .bumpversion.cfg
  3. # allow missing "patch" number
  4. BUMP_VERSION_PARSE_REGEX = (?P<major>\d+)\.(?P<minor>\d+)(?:\.(?P<patch>\d+))?
  5. CURRENT_VERSION_FILE ?= VERSION
  6. BUMP_VERSION_FILES = $(shell sed -n 's/^\[bumpversion:file:\(.*\)\]$$/\1/p' "$(BUMP_VERSION_CONFIG)")
  7. IS_VERSION_WITH_BUMPVERSION = $(wildcard .bumpversion.cfg)
  8. IS_VERSION_WITH_GIT = $(wildcard .git)
  9. IS_VERSION_WITH_DEB = $(wildcard debian/changelog)
  10. get_current_version = $(shell cat "$(CURRENT_VERSION_FILE)")
  11. .PHONY: help
  12. help: help-release
  13. .PHONY: help-release
  14. help-release:
  15. @echo "Release-related packaging targets:"
  16. @echo " release-major"
  17. @echo " release-minor"
  18. @echo " release-patch"
  19. @echo " release-undo"
  20. @echo " release-push"
  21. @echo
  22. release-major: VERSION_BUMP=major
  23. release-minor: VERSION_BUMP=minor
  24. release-patch: VERSION_BUMP=patch
  25. .PHONY: release-major release-minor release-patch
  26. release-major release-minor release-patch: release-generic
  27. .PHONY: release-generic
  28. ifneq ($(IS_VERSION_WITH_BUMPVERSION),)
  29. release-generic:: | release-bumpversion
  30. endif
  31. ifneq ($(IS_VERSION_WITH_DEB),)
  32. release-generic:: | release-debchange
  33. endif
  34. # take care for the ordering: 'release-git' needs to run before '-debchange' and '-bumpversion'
  35. ifneq ($(IS_VERSION_WITH_GIT),)
  36. release-generic:: release-git
  37. endif
  38. .PHONY: release-bumpversion
  39. release-bumpversion:
  40. @if [ ! -e "$(BUMP_VERSION_CONFIG)" ]; then \
  41. echo >&2 "Configuration file '$(BUMP_VERSION_CONFIG)' missing"; \
  42. exit 1; \
  43. fi
  44. @# bump version without committing (done after updating debian/changelog)
  45. @bumpversion --config-file "$(BUMP_VERSION_CONFIG)" \
  46. --parse "$(BUMP_VERSION_PARSE_REGEX)" \
  47. --current-version "$(call get_current_version)" \
  48. "$(VERSION_BUMP)"
  49. .PHONY: release-debchange
  50. release-debchange:
  51. debchange --newversion "$(call get_current_version)-1" "New upstream release"
  52. debchange --release ""
  53. .PHONY: release-git
  54. release-git:
  55. git add $(BUMP_VERSION_FILES)
  56. @# add other version-related files (if they exist)
  57. for file in "$(BUMP_VERSION_CONFIG)" debian/changelog; do \
  58. if [ -e "$$file" ]; then git add "$$file"; fi; done
  59. git commit -m "Bump version: $$(git show "HEAD:$(CURRENT_VERSION_FILE)") -> $(call get_current_version)"
  60. git tag -a "v$(call get_current_version)" -m "Bump version: $(VERSION_BUMP)"
  61. .PHONY: check-release-is-current-commit
  62. check-release-is-current-commit:
  63. [ "$$(git show -s --format=%H v$(call get_current_version)^{commit})" \
  64. = "$$(git show -s --format=%H)" ]; # refuse to run if the current commit is not the latest tag
  65. .PHONY: release-undo
  66. release-undo: check-release-is-current-commit
  67. [ -z "$$(git status -s)" ]; # refuse to run in a non-clean working directory
  68. git tag -d "v$(call get_current_version)"
  69. git reset --hard HEAD~
  70. .PHONY: release-push
  71. release-push:
  72. git push --follow-tags