tasks.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from pathlib import Path
  2. from invoke import task
  3. import xml.etree.ElementTree as ET
  4. @task
  5. def release(c, version):
  6. """"""
  7. if version not in ["minor", "major", "patch"]:
  8. print("Version can be either major, minor or patch.")
  9. return
  10. ns = {"maven": "http://maven.apache.org/POM/4.0.0"}
  11. tree = ET.ElementTree(ET.fromstring(Path("pom.xml").read_text()))
  12. version_node = tree.find("./maven:version", ns)
  13. __version__ = version_node.text
  14. __version_info__ = tuple((int(num) if num.isdigit() else num for num in __version__.replace("-", ".", 1).split(".")))
  15. _major, _minor, _patch = __version_info__
  16. if version == "patch":
  17. _patch = _patch + 1
  18. elif version == "minor":
  19. _minor = _minor + 1
  20. _patch = 0
  21. elif version == "major":
  22. _major = _major + 1
  23. _minor = 0
  24. _patch = 0
  25. c.run(f"git checkout -b release-{_major}.{_minor}.{_patch} dev")
  26. # This pollutes the xml file, we'll just use sed
  27. # version_node.text = f"{_major}.{_minor}.{_patch}"
  28. # tree.write("pom.xml", ns)
  29. c.run(f"sed -i '0,/<version>{__version__}/ s/<version>{__version__}/<version>{_major}.{_minor}.{_patch}/g' pom.xml")
  30. print(f"Update the readme for version {_major}.{_minor}.{_patch}.")
  31. input("Press enter when ready.")
  32. c.run(f"git add -u")
  33. c.run(f'git commit -m "Update changelog version {_major}.{_minor}.{_patch}"')
  34. c.run(f"git push --set-upstream origin release-{_major}.{_minor}.{_patch}")
  35. c.run(f"git checkout main")
  36. c.run(f"git merge --no-ff release-{_major}.{_minor}.{_patch}")
  37. c.run(f'git tag -a {_major}.{_minor}.{_patch} -m "Release {_major}.{_minor}.{_patch}"')
  38. c.run(f"git push")
  39. c.run(f"git checkout dev")
  40. c.run(f"git merge --no-ff release-{_major}.{_minor}.{_patch}")
  41. c.run(f"git push")
  42. c.run(f"git branch -d release-{_major}.{_minor}.{_patch}")
  43. c.run(f"git push origin --tags")