proj-flow 0.15.2__tar.gz → 0.16.0__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 (147) hide show
  1. {proj_flow-0.15.2 → proj_flow-0.16.0}/CHANGELOG.rst +16 -0
  2. {proj_flow-0.15.2 → proj_flow-0.16.0}/PKG-INFO +1 -1
  3. proj_flow-0.16.0/actions/bootstrap/action.yml +49 -0
  4. proj_flow-0.16.0/actions/bootstrap/version.py +46 -0
  5. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/__init__.py +1 -1
  6. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/commit.py +5 -1
  7. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/release.py +13 -7
  8. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/minimal/base.py +2 -1
  9. proj_flow-0.16.0/src/proj_flow/minimal/ext/bug_report.py +75 -0
  10. proj_flow-0.15.2/src/proj_flow/minimal/ext/bug_report.py +0 -33
  11. {proj_flow-0.15.2 → proj_flow-0.16.0}/.flow/config.yaml +0 -0
  12. {proj_flow-0.15.2 → proj_flow-0.16.0}/.gitignore +0 -0
  13. {proj_flow-0.15.2 → proj_flow-0.16.0}/.readthedocs.yaml +0 -0
  14. {proj_flow-0.15.2 → proj_flow-0.16.0}/LICENSE +0 -0
  15. {proj_flow-0.15.2 → proj_flow-0.16.0}/README.md +0 -0
  16. {proj_flow-0.15.2 → proj_flow-0.16.0}/ROADMAP.md +0 -0
  17. {proj_flow-0.15.2 → proj_flow-0.16.0}/pyproject.toml +0 -0
  18. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/__main__.py +0 -0
  19. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/api/__init__.py +0 -0
  20. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/api/arg.py +0 -0
  21. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/api/completers.py +0 -0
  22. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/api/ctx.py +0 -0
  23. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/api/env.py +0 -0
  24. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/api/init.py +0 -0
  25. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/api/makefile.py +0 -0
  26. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/api/release.py +0 -0
  27. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/api/step.py +0 -0
  28. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/base/__cmake_version__.py +0 -0
  29. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/base/__init__.py +0 -0
  30. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/base/cmd.py +0 -0
  31. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/base/inspect.py +0 -0
  32. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/base/matrix.py +0 -0
  33. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/base/name_list.py +0 -0
  34. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/base/plugins.py +0 -0
  35. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/base/registry.py +0 -0
  36. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/base/uname.py +0 -0
  37. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/cli/__init__.py +0 -0
  38. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/cli/argument.py +0 -0
  39. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/cli/finder.py +0 -0
  40. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/dependency.py +0 -0
  41. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/__init__.py +0 -0
  42. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/cplusplus/__init__.py +0 -0
  43. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/cplusplus/cmake/__init__.py +0 -0
  44. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/cplusplus/cmake/parser.py +0 -0
  45. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/cplusplus/cmake/project.py +0 -0
  46. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/cplusplus/cmake/steps.py +0 -0
  47. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/cplusplus/conan/__init__.py +0 -0
  48. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/cplusplus/conan/_conan.py +0 -0
  49. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/github/__init__.py +0 -0
  50. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/github/cli.py +0 -0
  51. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/github/hosting.py +0 -0
  52. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/github/publishing.py +0 -0
  53. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/github/switches.py +0 -0
  54. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/markdown_changelog.py +0 -0
  55. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/python/__init__.py +0 -0
  56. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/python/rtdocs.py +0 -0
  57. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/python/steps.py +0 -0
  58. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/python/version.py +0 -0
  59. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/re_structured_changelog.py +0 -0
  60. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/sign/__init__.py +0 -0
  61. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/sign/api.py +0 -0
  62. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/sign/win32.py +0 -0
  63. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/ext/store.py +0 -0
  64. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/flow/__init__.py +0 -0
  65. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/flow/configs.py +0 -0
  66. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/flow/layer.py +0 -0
  67. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/flow/steps.py +0 -0
  68. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/__init__.py +0 -0
  69. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/error.py +0 -0
  70. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/fmt.py +0 -0
  71. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/format.py +0 -0
  72. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/hosting/__init__.py +0 -0
  73. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/hosting/github.py +0 -0
  74. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/msg.py +0 -0
  75. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/rich_text/__init__.py +0 -0
  76. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/rich_text/api.py +0 -0
  77. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/rich_text/markdown.py +0 -0
  78. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/log/rich_text/re_structured_text.py +0 -0
  79. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/minimal/__init__.py +0 -0
  80. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/minimal/bootstrap.py +0 -0
  81. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/minimal/init.py +0 -0
  82. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/minimal/list.py +0 -0
  83. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/minimal/run.py +0 -0
  84. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/minimal/system.py +0 -0
  85. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/project/__init__.py +0 -0
  86. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/project/api.py +0 -0
  87. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/project/cplusplus/__init__.py +0 -0
  88. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/project/cplusplus/cmake_context.py +0 -0
  89. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/project/cplusplus/conan_context.py +0 -0
  90. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/project/cplusplus/project.py +0 -0
  91. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/project/data.py +0 -0
  92. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/project/interact.py +0 -0
  93. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/base/.clang-format +0 -0
  94. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/base/.flow/config.yml +0 -0
  95. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/base/.flow/flow.py.mustache +0 -0
  96. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/base/.flow/matrix.yml +0 -0
  97. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/base/.flow/official.yml +0 -0
  98. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/base/.gitignore +0 -0
  99. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/base/README.md.mustache +0 -0
  100. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/base/flow +0 -0
  101. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/base/flow.cmd +0 -0
  102. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/base.json +0 -0
  103. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/.flow/cmake/common.cmake.mustache +0 -0
  104. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/.flow/extensions/wall/__init__.py.mustache +0 -0
  105. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/.flow/extensions/wall/icons/__init__.py.mustache +0 -0
  106. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/.flow/extensions/wall/icons/magick.py.mustache +0 -0
  107. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/.flow/packages/base.cmake.mustache +0 -0
  108. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/.flow/packages/config.cmake +0 -0
  109. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/.flow/packages/cpack.cmake +0 -0
  110. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/.flow/packages/wix/cpack.cmake.mustache +0 -0
  111. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/.flow/packages/wix/patches.in.wix +0 -0
  112. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/.flow/packages/wix.cmake.mustache +0 -0
  113. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/CMakeGraphVizOptions.cmake +0 -0
  114. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/CMakeLists.txt.mustache +0 -0
  115. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/CMakePresets.json +0 -0
  116. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/data/assets/appicon.ico +0 -0
  117. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/data/assets/appicon.png +0 -0
  118. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/data/assets/wix_banner.bmp +0 -0
  119. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/data/assets/wix_dialog.bmp +0 -0
  120. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/data/icons/.gitignore +0 -0
  121. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/data/icons/appicon-mask.svg +0 -0
  122. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/data/icons/appicon.svg +0 -0
  123. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/src/main.cc.mustache +0 -0
  124. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/src/version.hpp.in.mustache +0 -0
  125. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake/tests/test.cc.mustache +0 -0
  126. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/cmake.json +0 -0
  127. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/conan/.flow/cmake/libcxx_toolchain.cmake +0 -0
  128. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/conan/.flow/cmake/output_dirs_setup.cmake +0 -0
  129. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/conan/conanfile.txt +0 -0
  130. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/conan.json +0 -0
  131. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_actions/.github/linters/.isort.cfg +0 -0
  132. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_actions/.github/linters/.mypy.ini +0 -0
  133. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_actions/.github/workflows/build.yml.auto-release +0 -0
  134. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_actions/.github/workflows/build.yml.basic +0 -0
  135. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_actions/.github/workflows/linter.yml +0 -0
  136. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_actions/CPPLINT.cfg +0 -0
  137. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_actions.json +0 -0
  138. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_social/.github/ISSUE_TEMPLATE/bug_report.md.mustache +0 -0
  139. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_social/.github/ISSUE_TEMPLATE/feature_request.md.mustache +0 -0
  140. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_social/CODE_OF_CONDUCT.md.mustache +0 -0
  141. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_social/CONTRIBUTING.md +0 -0
  142. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/layers/github_social.json +0 -0
  143. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/licenses/0BSD.mustache +0 -0
  144. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/licenses/MIT.mustache +0 -0
  145. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/licenses/Unlicense.mustache +0 -0
  146. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/licenses/WTFPL.mustache +0 -0
  147. {proj_flow-0.15.2 → proj_flow-0.16.0}/src/proj_flow/template/licenses/Zlib.mustache +0 -0
@@ -4,6 +4,22 @@ Changelog
4
4
 
5
5
  All notable changes to this project will be documented in this file.
6
6
 
7
+ `0.16.0 <https://github.com/mzdun/proj-flow/compare/v0.15.3...v0.16.0>`_ (2025-03-02)
8
+ =====================================================================================
9
+
10
+ New Features
11
+ ------------
12
+
13
+ - add bootstrap action (`57cf99b <https://github.com/mzdun/proj-flow/commit/57cf99bad7c34aa22d357746824647499d70eb07>`_)
14
+
15
+ `0.15.3 <https://github.com/mzdun/proj-flow/compare/v0.15.2...v0.15.3>`_ (2025-02-24)
16
+ =====================================================================================
17
+
18
+ Bug Fixes
19
+ ---------
20
+
21
+ - only use two most-recent minor versions in YAML (`24e4b05 <https://github.com/mzdun/proj-flow/commit/24e4b05c6bb6c3dc2a7db534e49f7ba542d396da>`_)
22
+
7
23
  `0.15.2 <https://github.com/mzdun/proj-flow/compare/v0.15.1...v0.15.2>`_ (2025-02-24)
8
24
  =====================================================================================
9
25
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proj-flow
3
- Version: 0.15.2
3
+ Version: 0.16.0
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/
@@ -0,0 +1,49 @@
1
+ name: Python + Project Flow bootstrap
2
+ author: Marcin Zdun
3
+
4
+ inputs:
5
+ python-version:
6
+ description: "Version range or exact version of Python or PyPy to use, using SemVer's version range syntax. Reads from .python-version if unset."
7
+
8
+ outputs:
9
+ version:
10
+ description: Version of the `proj-flow` this project expects
11
+ value: ${{ steps.version.outputs.version }}
12
+
13
+ is-flow-app:
14
+ description: Checks, if this project is a Flow project
15
+ value: ${{ steps.version.outputs.is-flow-app }}
16
+
17
+ runs:
18
+ using: composite
19
+ steps:
20
+ - name: python 3.10
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: ${{ inputs.python-version }}
24
+
25
+ - name: check version
26
+ id: version
27
+ shell: python
28
+ run: |
29
+ import os
30
+ import sys
31
+
32
+ ACTION_PATH = r'${{ github.action_path }}'.replace('/', os.sep)
33
+ sys.path.insert(0, ACTION_PATH)
34
+
35
+ import version
36
+ env:
37
+ RUNNER_CONTEXT: ${{ toJson(runner) }}
38
+
39
+ - name: .flow/.venv cache
40
+ if: ${{ fromJson(steps.version.outputs.is-flow-app) }}
41
+ uses: actions/cache@v4
42
+ with:
43
+ path: .flow/.venv
44
+ key: ${{ steps.version.outputs.venv-cache-key }}
45
+
46
+ - name: bootstrap
47
+ if: ${{ fromJson(steps.version.outputs.is-flow-app) }}
48
+ run: python ./.flow/flow.py bootstrap
49
+ shell: bash
@@ -0,0 +1,46 @@
1
+ import os
2
+ import json
3
+ from platform import machine
4
+ from typing import cast
5
+
6
+ VAR_NAME = "CXX_FLOW_VERSION"
7
+ VARIABLE = ""
8
+ IS_FLOW_APP = False
9
+
10
+ RUNNER = cast(dict, json.loads(os.environ["RUNNER_CONTEXT"]))
11
+ RUNNER_OS = RUNNER.get("os", os.name)
12
+ RUNNER_ARCH = RUNNER.get("arch", machine() or "unk-arch")
13
+
14
+ try:
15
+ with open(".flow/flow.py", encoding="UTF-8") as flow_py:
16
+ for line in flow_py:
17
+ if not line.startswith(VAR_NAME):
18
+ continue
19
+
20
+ var_list = line.split("=", 1)
21
+ if len(var_list) != 2:
22
+ continue
23
+
24
+ var = var_list[0].strip()
25
+ if var != VAR_NAME:
26
+ continue
27
+
28
+ val = var_list[1].strip()
29
+ start = val[:1]
30
+ if start not in "\"'":
31
+ continue
32
+
33
+ VARIABLE = val[1:].split(start, 1)[0].strip()
34
+ break
35
+
36
+ IS_FLOW_APP = True
37
+
38
+ except FileNotFoundError:
39
+ pass
40
+
41
+ VENV_CACHE_KEY = f"venv-{RUNNER_OS}-{RUNNER_ARCH}-{VARIABLE}"
42
+
43
+ with open(os.environ["GITHUB_OUTPUT"], "a", encoding="UTF-8") as out:
44
+ print(f"version={VARIABLE}", file=out)
45
+ print(f"venv-cache-key={VENV_CACHE_KEY}", file=out)
46
+ print(f"is-flow-app={json.dumps(IS_FLOW_APP)}", file=out)
@@ -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.16.0"
@@ -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