proj-flow 0.15.2__tar.gz → 0.15.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. {proj_flow-0.15.2 → proj_flow-0.15.3}/CHANGELOG.rst +8 -0
  2. {proj_flow-0.15.2 → proj_flow-0.15.3}/PKG-INFO +1 -1
  3. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/__init__.py +1 -1
  4. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/commit.py +5 -1
  5. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/release.py +13 -7
  6. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/minimal/base.py +2 -1
  7. proj_flow-0.15.3/src/proj_flow/minimal/ext/bug_report.py +75 -0
  8. proj_flow-0.15.2/src/proj_flow/minimal/ext/bug_report.py +0 -33
  9. {proj_flow-0.15.2 → proj_flow-0.15.3}/.flow/config.yaml +0 -0
  10. {proj_flow-0.15.2 → proj_flow-0.15.3}/.gitignore +0 -0
  11. {proj_flow-0.15.2 → proj_flow-0.15.3}/.readthedocs.yaml +0 -0
  12. {proj_flow-0.15.2 → proj_flow-0.15.3}/LICENSE +0 -0
  13. {proj_flow-0.15.2 → proj_flow-0.15.3}/README.md +0 -0
  14. {proj_flow-0.15.2 → proj_flow-0.15.3}/ROADMAP.md +0 -0
  15. {proj_flow-0.15.2 → proj_flow-0.15.3}/pyproject.toml +0 -0
  16. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/__main__.py +0 -0
  17. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/api/__init__.py +0 -0
  18. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/api/arg.py +0 -0
  19. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/api/completers.py +0 -0
  20. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/api/ctx.py +0 -0
  21. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/api/env.py +0 -0
  22. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/api/init.py +0 -0
  23. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/api/makefile.py +0 -0
  24. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/api/release.py +0 -0
  25. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/api/step.py +0 -0
  26. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/base/__cmake_version__.py +0 -0
  27. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/base/__init__.py +0 -0
  28. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/base/cmd.py +0 -0
  29. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/base/inspect.py +0 -0
  30. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/base/matrix.py +0 -0
  31. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/base/name_list.py +0 -0
  32. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/base/plugins.py +0 -0
  33. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/base/registry.py +0 -0
  34. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/base/uname.py +0 -0
  35. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/cli/__init__.py +0 -0
  36. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/cli/argument.py +0 -0
  37. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/cli/finder.py +0 -0
  38. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/dependency.py +0 -0
  39. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/__init__.py +0 -0
  40. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/cplusplus/__init__.py +0 -0
  41. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/cplusplus/cmake/__init__.py +0 -0
  42. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/cplusplus/cmake/parser.py +0 -0
  43. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/cplusplus/cmake/project.py +0 -0
  44. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/cplusplus/cmake/steps.py +0 -0
  45. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/cplusplus/conan/__init__.py +0 -0
  46. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/cplusplus/conan/_conan.py +0 -0
  47. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/github/__init__.py +0 -0
  48. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/github/cli.py +0 -0
  49. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/github/hosting.py +0 -0
  50. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/github/publishing.py +0 -0
  51. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/github/switches.py +0 -0
  52. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/markdown_changelog.py +0 -0
  53. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/python/__init__.py +0 -0
  54. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/python/rtdocs.py +0 -0
  55. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/python/steps.py +0 -0
  56. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/python/version.py +0 -0
  57. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/re_structured_changelog.py +0 -0
  58. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/sign/__init__.py +0 -0
  59. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/sign/api.py +0 -0
  60. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/sign/win32.py +0 -0
  61. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/ext/store.py +0 -0
  62. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/flow/__init__.py +0 -0
  63. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/flow/configs.py +0 -0
  64. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/flow/layer.py +0 -0
  65. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/flow/steps.py +0 -0
  66. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/__init__.py +0 -0
  67. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/error.py +0 -0
  68. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/fmt.py +0 -0
  69. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/format.py +0 -0
  70. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/hosting/__init__.py +0 -0
  71. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/hosting/github.py +0 -0
  72. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/msg.py +0 -0
  73. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/rich_text/__init__.py +0 -0
  74. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/rich_text/api.py +0 -0
  75. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/rich_text/markdown.py +0 -0
  76. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/log/rich_text/re_structured_text.py +0 -0
  77. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/minimal/__init__.py +0 -0
  78. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/minimal/bootstrap.py +0 -0
  79. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/minimal/init.py +0 -0
  80. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/minimal/list.py +0 -0
  81. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/minimal/run.py +0 -0
  82. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/minimal/system.py +0 -0
  83. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/project/__init__.py +0 -0
  84. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/project/api.py +0 -0
  85. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/project/cplusplus/__init__.py +0 -0
  86. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/project/cplusplus/cmake_context.py +0 -0
  87. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/project/cplusplus/conan_context.py +0 -0
  88. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/project/cplusplus/project.py +0 -0
  89. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/project/data.py +0 -0
  90. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/project/interact.py +0 -0
  91. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/base/.clang-format +0 -0
  92. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/base/.flow/config.yml +0 -0
  93. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/base/.flow/flow.py.mustache +0 -0
  94. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/base/.flow/matrix.yml +0 -0
  95. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/base/.flow/official.yml +0 -0
  96. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/base/.gitignore +0 -0
  97. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/base/README.md.mustache +0 -0
  98. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/base/flow +0 -0
  99. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/base/flow.cmd +0 -0
  100. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/base.json +0 -0
  101. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/.flow/cmake/common.cmake.mustache +0 -0
  102. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/.flow/extensions/wall/__init__.py.mustache +0 -0
  103. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/.flow/extensions/wall/icons/__init__.py.mustache +0 -0
  104. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/.flow/extensions/wall/icons/magick.py.mustache +0 -0
  105. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/.flow/packages/base.cmake.mustache +0 -0
  106. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/.flow/packages/config.cmake +0 -0
  107. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/.flow/packages/cpack.cmake +0 -0
  108. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/.flow/packages/wix/cpack.cmake.mustache +0 -0
  109. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/.flow/packages/wix/patches.in.wix +0 -0
  110. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/.flow/packages/wix.cmake.mustache +0 -0
  111. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/CMakeGraphVizOptions.cmake +0 -0
  112. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/CMakeLists.txt.mustache +0 -0
  113. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/CMakePresets.json +0 -0
  114. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/data/assets/appicon.ico +0 -0
  115. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/data/assets/appicon.png +0 -0
  116. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/data/assets/wix_banner.bmp +0 -0
  117. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/data/assets/wix_dialog.bmp +0 -0
  118. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/data/icons/.gitignore +0 -0
  119. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/data/icons/appicon-mask.svg +0 -0
  120. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/data/icons/appicon.svg +0 -0
  121. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/src/main.cc.mustache +0 -0
  122. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/src/version.hpp.in.mustache +0 -0
  123. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake/tests/test.cc.mustache +0 -0
  124. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/cmake.json +0 -0
  125. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/conan/.flow/cmake/libcxx_toolchain.cmake +0 -0
  126. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/conan/.flow/cmake/output_dirs_setup.cmake +0 -0
  127. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/conan/conanfile.txt +0 -0
  128. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/conan.json +0 -0
  129. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_actions/.github/linters/.isort.cfg +0 -0
  130. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_actions/.github/linters/.mypy.ini +0 -0
  131. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_actions/.github/workflows/build.yml.auto-release +0 -0
  132. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_actions/.github/workflows/build.yml.basic +0 -0
  133. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_actions/.github/workflows/linter.yml +0 -0
  134. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_actions/CPPLINT.cfg +0 -0
  135. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_actions.json +0 -0
  136. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_social/.github/ISSUE_TEMPLATE/bug_report.md.mustache +0 -0
  137. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_social/.github/ISSUE_TEMPLATE/feature_request.md.mustache +0 -0
  138. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_social/CODE_OF_CONDUCT.md.mustache +0 -0
  139. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_social/CONTRIBUTING.md +0 -0
  140. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/layers/github_social.json +0 -0
  141. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/licenses/0BSD.mustache +0 -0
  142. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/licenses/MIT.mustache +0 -0
  143. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/licenses/Unlicense.mustache +0 -0
  144. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/licenses/WTFPL.mustache +0 -0
  145. {proj_flow-0.15.2 → proj_flow-0.15.3}/src/proj_flow/template/licenses/Zlib.mustache +0 -0
@@ -4,6 +4,14 @@ Changelog
4
4
 
5
5
  All notable changes to this project will be documented in this file.
6
6
 
7
+ `0.15.3 <https://github.com/mzdun/proj-flow/compare/v0.15.2...v0.15.3>`_ (2025-02-24)
8
+ =====================================================================================
9
+
10
+ Bug Fixes
11
+ ---------
12
+
13
+ - only use two most-recent minor versions in YAML (`24e4b05 <https://github.com/mzdun/proj-flow/commit/24e4b05c6bb6c3dc2a7db534e49f7ba542d396da>`_)
14
+
7
15
  `0.15.2 <https://github.com/mzdun/proj-flow/compare/v0.15.1...v0.15.2>`_ (2025-02-24)
8
16
  =====================================================================================
9
17
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proj-flow
3
- Version: 0.15.2
3
+ Version: 0.15.3
4
4
  Summary: C++ project maintenance, automated
5
5
  Project-URL: Changelog, https://github.com/mzdun/proj-flow/blob/main/CHANGELOG.rst
6
6
  Project-URL: Documentation, https://proj-flow.readthedocs.io/en/latest/
@@ -6,4 +6,4 @@ The **proj_flow** contains only ``__version__`` to be updated, nothing more.
6
6
  This is in an attempt to make this module easy to load initially.
7
7
  """
8
8
 
9
- __version__ = "0.15.2"
9
+ __version__ = "0.15.3"
@@ -139,7 +139,11 @@ def _get_commit(hash: str, short_hash: str, message: str) -> Optional[Commit]:
139
139
 
140
140
  breaking_change = None
141
141
  body = "\n".join(lines).strip().split("BREAKING CHANGE", 1)
142
- if len(body) > 1:
142
+ if (
143
+ len(body) > 1
144
+ and (len(body[0]) == 0 or body[0][-1:] == "\n")
145
+ and (len(body[1]) == 1 or body[1][:1] == ":")
146
+ ):
143
147
  body = body[1].lstrip(":").strip()
144
148
  breaking_change = [
145
149
  re.sub(r"\s+", " ", para.strip()) for para in body.split("\n\n")
@@ -6,8 +6,7 @@ The **proj_flow.log.release** performs a relase on the hosting service.
6
6
  """
7
7
 
8
8
  import typing
9
- from abc import ABC, abstractmethod
10
- from typing import Iterable, Union
9
+ from typing import Iterable, Optional, Union
11
10
 
12
11
  from proj_flow import api
13
12
  from proj_flow.api import env
@@ -18,9 +17,14 @@ from proj_flow.log.error import NoProjectError, VersionNotAdvancing
18
17
  OneOrMoreStrings = Union[str, Iterable[str]]
19
18
 
20
19
 
21
- class VersionUpdater(ABC):
22
- @abstractmethod
23
- def on_version_change(self, new_version: str) -> OneOrMoreStrings: ...
20
+ class VersionUpdater:
21
+ def on_version_change(self, new_version: str) -> Optional[OneOrMoreStrings]:
22
+ return None
23
+
24
+ def on_version_change_tags(
25
+ self, new_version: str, tags: list[str]
26
+ ) -> Optional[OneOrMoreStrings]:
27
+ return self.on_version_change(new_version)
24
28
 
25
29
 
26
30
  version_updaters = registry.Registry[VersionUpdater]("VersionUpdater")
@@ -114,8 +118,10 @@ def add_release(
114
118
  files_to_commit.append(version_path)
115
119
 
116
120
  for updater in version_updaters.get():
117
- modified = updater.on_version_change(next_version)
118
- if isinstance(modified, str):
121
+ modified = updater.on_version_change_tags(next_version, tags)
122
+ if modified is None:
123
+ continue
124
+ elif isinstance(modified, str):
119
125
  files_to_commit.append(modified)
120
126
  else:
121
127
  files_to_commit.extend(modified)
@@ -12,6 +12,7 @@ from typing import List
12
12
  from proj_flow import __version__, api
13
13
  from proj_flow.flow import layer
14
14
 
15
+
15
16
  class GitInit(api.init.InitStep):
16
17
  layers: List[layer.LayerInfo] = []
17
18
 
@@ -27,7 +28,7 @@ class GitInit(api.init.InitStep):
27
28
 
28
29
  git("init")
29
30
  git("add", ".")
30
-
31
+
31
32
  executables: List[str] = []
32
33
 
33
34
  for fs_layer in GitInit.layers:
@@ -0,0 +1,75 @@
1
+ # Copyright (c) 2025 Marcin Zdun
2
+ # This code is licensed under MIT license (see LICENSE for details)
3
+
4
+ """
5
+ The **proj_flow.minimal.ext.bug_report** adds next version to bug_report.yaml
6
+ next to CHANGELOG.rst.
7
+ """
8
+
9
+ import re
10
+ import sys
11
+ from typing import List, Tuple
12
+
13
+ from proj_flow.log import release
14
+
15
+ YAML_PATH = ".github/ISSUE_TEMPLATE/bug_report.yaml"
16
+
17
+
18
+ def _version(ver: str) -> Tuple[int, int, int, str]:
19
+ if ver[:1] == "v":
20
+ ver = ver[1:]
21
+
22
+ m = re.match(r"([0-9]+)\.([0-9]+)\.([0-9]+)(.*)", ver)
23
+ if m is None:
24
+ print(f"fatal error: cannot parse {ver}", file=sys.stderr)
25
+ raise SystemExit(1)
26
+ return (int(m.group(1)), int(m.group(2)), int(m.group(3)), ver)
27
+
28
+ def _prev_version(new_version: str, tags: List[str]):
29
+ current = _version(new_version)
30
+ versions = [_version(tag) for tag in reversed(tags)]
31
+ index = 0
32
+ while index < len(versions):
33
+ comp = versions[index]
34
+ if comp[0] != current[0] or comp[1] != current[1]:
35
+ break
36
+
37
+ index += 1
38
+ if index >= len(versions):
39
+ index = 0
40
+
41
+ return None if index > len(versions) else versions[index][-1]
42
+
43
+ @release.version_updaters.add
44
+ class VersionUpdater(release.VersionUpdater):
45
+ def on_version_change_tags(self, new_version: str, tags: List[str]):
46
+ old_version = _prev_version(new_version, tags)
47
+
48
+ range = [f" - Current (v{new_version})\n"]
49
+ if old_version:
50
+ range.extend(
51
+ [
52
+ f" - Previous (v{old_version})\n",
53
+ f" - Older, than v{old_version}\n",
54
+ ]
55
+ )
56
+
57
+ with open(YAML_PATH, encoding="UTF-8") as inf:
58
+ lines = inf.readlines()
59
+
60
+ try:
61
+ id_index = lines.index(" id: version\n")
62
+ option_index = lines.index(" options:\n", id_index) + 1
63
+ option_index_end = option_index
64
+ while option_index_end < len(lines) and lines[option_index_end].startswith(
65
+ " - "
66
+ ):
67
+ option_index_end += 1
68
+ lines[option_index:option_index_end] = range
69
+ except ValueError as e:
70
+ print(e, file=sys.stderr)
71
+
72
+ with open(YAML_PATH, "w", encoding="UTF-8") as outf:
73
+ outf.writelines(lines)
74
+
75
+ return YAML_PATH
@@ -1,33 +0,0 @@
1
- # Copyright (c) 2025 Marcin Zdun
2
- # This code is licensed under MIT license (see LICENSE for details)
3
-
4
- """
5
- The **proj_flow.minimal.ext.bug_report** adds next version to bug_report.yaml
6
- next to CHANGELOG.rst.
7
- """
8
-
9
- import re
10
- import sys
11
-
12
- from proj_flow.log import release
13
-
14
- YAML_PATH = ".github/ISSUE_TEMPLATE/bug_report.yaml"
15
-
16
-
17
- @release.version_updaters.add
18
- class VersionUpdater(release.VersionUpdater):
19
- def on_version_change(self, new_version: str):
20
- with open(YAML_PATH, encoding="UTF-8") as inf:
21
- lines = inf.readlines()
22
-
23
- try:
24
- id_index = lines.index(" id: version\n")
25
- option_index = lines.index(" options:\n", id_index) + 1
26
- lines[option_index:option_index] = f" - v{new_version}\n"
27
- except ValueError as e:
28
- print(e, file=sys.stderr)
29
-
30
- with open(YAML_PATH, "w", encoding="UTF-8") as outf:
31
- outf.writelines(lines)
32
-
33
- return YAML_PATH
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes