proj-flow 0.8.1__tar.gz → 0.9.1__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 (149) hide show
  1. proj_flow-0.9.1/.flow/config.yaml +11 -0
  2. {proj_flow-0.8.1 → proj_flow-0.9.1}/CHANGELOG.rst +47 -20
  3. {proj_flow-0.8.1 → proj_flow-0.9.1}/PKG-INFO +6 -5
  4. {proj_flow-0.8.1 → proj_flow-0.9.1}/README.md +4 -4
  5. {proj_flow-0.8.1 → proj_flow-0.9.1}/pyproject.toml +4 -3
  6. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/__init__.py +1 -1
  7. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/__main__.py +2 -2
  8. proj_flow-0.9.1/src/proj_flow/api/__init__.py +19 -0
  9. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/api/arg.py +14 -6
  10. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/api/env.py +15 -35
  11. proj_flow-0.9.1/src/proj_flow/api/release.py +99 -0
  12. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/api/step.py +12 -2
  13. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/base/__init__.py +2 -2
  14. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/base/inspect.py +15 -44
  15. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/base/plugins.py +41 -2
  16. proj_flow-0.9.1/src/proj_flow/base/registry.py +105 -0
  17. proj_flow-0.9.1/src/proj_flow/cli/__init__.py +55 -0
  18. proj_flow-0.9.1/src/proj_flow/cli/argument.py +450 -0
  19. {proj_flow-0.8.1/proj_flow/flow → proj_flow-0.9.1/src/proj_flow}/cli/finder.py +1 -1
  20. proj_flow-0.9.1/src/proj_flow/ext/__init__.py +6 -0
  21. proj_flow-0.9.1/src/proj_flow/ext/github/__init__.py +11 -0
  22. proj_flow-0.9.1/src/proj_flow/ext/github/cli.py +125 -0
  23. proj_flow-0.9.1/src/proj_flow/ext/github/hosting.py +19 -0
  24. proj_flow-0.9.1/src/proj_flow/ext/markdown_changelist.py +14 -0
  25. proj_flow-0.9.1/src/proj_flow/ext/python/__init__.py +10 -0
  26. proj_flow-0.9.1/src/proj_flow/ext/python/rtdocs.py +238 -0
  27. proj_flow-0.9.1/src/proj_flow/ext/python/steps.py +71 -0
  28. proj_flow-0.9.1/src/proj_flow/ext/python/version.py +98 -0
  29. proj_flow-0.9.1/src/proj_flow/ext/re_structured_changelist.py +14 -0
  30. proj_flow-0.9.1/src/proj_flow/flow/__init__.py +11 -0
  31. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/flow/configs.py +21 -5
  32. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/flow/dependency.py +8 -6
  33. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/flow/steps.py +6 -9
  34. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/log/__init__.py +10 -2
  35. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/log/commit.py +19 -4
  36. proj_flow-0.9.1/src/proj_flow/log/error.py +31 -0
  37. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/log/hosting/github.py +10 -6
  38. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/log/msg.py +23 -0
  39. proj_flow-0.9.1/src/proj_flow/log/release.py +125 -0
  40. proj_flow-0.9.1/src/proj_flow/log/rich_text/__init__.py +10 -0
  41. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/log/rich_text/api.py +10 -4
  42. proj_flow-0.9.1/src/proj_flow/minimal/__init__.py +11 -0
  43. {proj_flow-0.8.1/proj_flow/plugins/commands → proj_flow-0.9.1/src/proj_flow/minimal}/bootstrap.py +2 -2
  44. {proj_flow-0.8.1/proj_flow/plugins/commands → proj_flow-0.9.1/src/proj_flow/minimal}/list.py +12 -10
  45. {proj_flow-0.8.1/proj_flow/plugins/commands → proj_flow-0.9.1/src/proj_flow/minimal}/run.py +20 -11
  46. {proj_flow-0.8.1/proj_flow/plugins/commands → proj_flow-0.9.1/src/proj_flow/minimal}/system.py +2 -2
  47. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/__init__.py +1 -1
  48. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/base/.flow/matrix.yml +1 -1
  49. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/CMakeLists.txt.mustache +1 -1
  50. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_actions/.github/workflows/build.yml +1 -1
  51. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_social/.github/ISSUE_TEMPLATE/feature_request.md.mustache +1 -1
  52. proj_flow-0.8.1/proj_flow/api/__init__.py +0 -10
  53. proj_flow-0.8.1/proj_flow/flow/__init__.py +0 -11
  54. proj_flow-0.8.1/proj_flow/flow/cli/__init__.py +0 -66
  55. proj_flow-0.8.1/proj_flow/flow/cli/cmds.py +0 -385
  56. proj_flow-0.8.1/proj_flow/log/release.py +0 -34
  57. proj_flow-0.8.1/proj_flow/log/rich_text/__init__.py +0 -22
  58. {proj_flow-0.8.1 → proj_flow-0.9.1}/.gitignore +0 -0
  59. {proj_flow-0.8.1 → proj_flow-0.9.1}/.readthedocs.yaml +0 -0
  60. {proj_flow-0.8.1 → proj_flow-0.9.1}/LICENSE +0 -0
  61. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/api/completers.py +0 -0
  62. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/api/ctx.py +0 -0
  63. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/api/init.py +0 -0
  64. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/api/makefile.py +0 -0
  65. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/base/cmd.py +0 -0
  66. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/base/matrix.py +0 -0
  67. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/base/uname.py +0 -0
  68. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/flow/init.py +0 -0
  69. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/flow/interact.py +0 -0
  70. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/flow/layer.py +0 -0
  71. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/log/fmt.py +0 -0
  72. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/log/format.py +0 -0
  73. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/log/hosting/__init__.py +0 -0
  74. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/log/rich_text/markdown.py +0 -0
  75. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/log/rich_text/re_structured_text.py +0 -0
  76. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/base.py +0 -0
  77. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/cmake/__init__.py +0 -0
  78. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/cmake/__version__.py +0 -0
  79. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/cmake/build.py +0 -0
  80. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/cmake/config.py +0 -0
  81. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/cmake/context.py +0 -0
  82. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/cmake/pack.py +0 -0
  83. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/cmake/parser.py +0 -0
  84. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/cmake/test.py +0 -0
  85. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/commands/__init__.py +0 -0
  86. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/commands/ci/__init__.py +0 -0
  87. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/commands/ci/changelog.py +0 -0
  88. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/commands/ci/matrix.py +0 -0
  89. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/commands/ci/release.py +0 -0
  90. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/commands/init.py +0 -0
  91. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/conan/__init__.py +0 -0
  92. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/conan/_conan.py +0 -0
  93. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/github.py +0 -0
  94. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/sign/__init__.py +0 -0
  95. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/sign/win32.py +0 -0
  96. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/store/__init__.py +0 -0
  97. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/store/store_both.py +0 -0
  98. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/store/store_packages.py +0 -0
  99. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/plugins/store/store_tests.py +0 -0
  100. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/base/.clang-format +0 -0
  101. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/base/.flow/config.yml +0 -0
  102. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/base/.flow/flow.py.mustache +0 -0
  103. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/base/.flow/official.yml +0 -0
  104. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/base/.gitignore +0 -0
  105. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/base/README.md.mustache +0 -0
  106. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/base/flow +0 -0
  107. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/base/flow.cmd +0 -0
  108. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/base.json +0 -0
  109. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/.flow/cmake/common.cmake.mustache +0 -0
  110. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/.flow/extensions/wall/__init__.py.mustache +0 -0
  111. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/.flow/extensions/wall/icons/__init__.py.mustache +0 -0
  112. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/.flow/extensions/wall/icons/magick.py.mustache +0 -0
  113. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/.flow/packages/base.cmake.mustache +0 -0
  114. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/.flow/packages/config.cmake +0 -0
  115. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/.flow/packages/cpack.cmake +0 -0
  116. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/.flow/packages/wix/cpack.cmake.mustache +0 -0
  117. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/.flow/packages/wix/patches.in.wix +0 -0
  118. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/.flow/packages/wix.cmake.mustache +0 -0
  119. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/CMakeGraphVizOptions.cmake +0 -0
  120. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/CMakePresets.json +0 -0
  121. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/data/assets/appicon.ico +0 -0
  122. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/data/assets/appicon.png +0 -0
  123. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/data/assets/wix_banner.bmp +0 -0
  124. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/data/assets/wix_dialog.bmp +0 -0
  125. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/data/icons/.gitignore +0 -0
  126. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/data/icons/appicon-mask.svg +0 -0
  127. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/data/icons/appicon.svg +0 -0
  128. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/src/main.cc.mustache +0 -0
  129. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/src/version.hpp.in.mustache +0 -0
  130. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake/tests/test.cc.mustache +0 -0
  131. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/cmake.json +0 -0
  132. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/conan/.flow/cmake/libcxx_toolchain.cmake +0 -0
  133. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/conan/.flow/cmake/output_dirs_setup.cmake +0 -0
  134. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/conan/conanfile.txt +0 -0
  135. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/conan.json +0 -0
  136. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_actions/.github/linters/.isort.cfg +0 -0
  137. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_actions/.github/linters/.mypy.ini +0 -0
  138. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_actions/.github/workflows/linter.yml +0 -0
  139. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_actions/CPPLINT.cfg +0 -0
  140. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_actions.json +0 -0
  141. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_social/.github/ISSUE_TEMPLATE/bug_report.md.mustache +0 -0
  142. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_social/CODE_OF_CONDUCT.md.mustache +0 -0
  143. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_social/CONTRIBUTING.md +0 -0
  144. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/layers/github_social.json +0 -0
  145. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/licenses/0BSD.mustache +0 -0
  146. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/licenses/MIT.mustache +0 -0
  147. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/licenses/Unlicense.mustache +0 -0
  148. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/licenses/WTFPL.mustache +0 -0
  149. {proj_flow-0.8.1 → proj_flow-0.9.1/src}/proj_flow/template/licenses/Zlib.mustache +0 -0
@@ -0,0 +1,11 @@
1
+ extensions:
2
+ - proj_flow.ext.python
3
+ - proj_flow.ext.github
4
+ - proj_flow.ext.re_structured_changelist
5
+
6
+ entry:
7
+ build: [ Build ]
8
+ install: [ Install ]
9
+ docs: [ RTD ]
10
+ verify: [ Build, Check Twine ]
11
+ refresh: [ Install, Build, RTD, Check Twine ]
@@ -4,16 +4,43 @@ Changelog
4
4
 
5
5
  All notable changes to this project will be documented in this file.
6
6
 
7
- `0.8.1 <https://github.com/mzdun/cxx-flow/compare/v0.8.0...v0.8.1>`_ (2025-02-05)
8
- =================================================================================
7
+ `0.9.1 <https://github.com/mzdun/proj-flow/compare/v0.9.0...v0.9.1>`_ (2025-02-07)
8
+ ==================================================================================
9
9
 
10
10
  Bug Fixes
11
11
  ---------
12
12
 
13
- - rename the package (`a994760 <https://github.com/mzdun/cxx-flow/commit/a994760c82630aee5c962d8910d4183408b10def>`_)
13
+ - turn auto-release on (`1a79267 <https://github.com/mzdun/proj-flow/commit/1a792677e66c882266b3e2b61f5adde885653814>`_)
14
+ - prepare for autorelease (`9bbc4c5 <https://github.com/mzdun/proj-flow/commit/9bbc4c5abba3a945908f1ad796fed0e3d5bf390e>`_)
15
+
16
+ `0.9.0 <https://github.com/mzdun/proj-flow/compare/v0.8.1...v0.9.0>`_ (2025-02-07)
17
+ ==================================================================================
18
+
19
+ New Features
20
+ ------------
21
+
22
+ - add python steps and version bumper (`1bca0cb <https://github.com/mzdun/proj-flow/commit/1bca0cb11e53ee137b0179d951c3d9767475fb8d>`_)
23
+ - add ``github matrix`` and ``github release`` (`56d3ada <https://github.com/mzdun/proj-flow/commit/56d3ada74b2f38f1c1fb0dd8d63cdcb1e3e6ac98>`_)
24
+ - allow making software releases (`7ae1552 <https://github.com/mzdun/proj-flow/commit/7ae1552011c62fb92aefa8dafcef8cf499c2165d>`_)
25
+ - create hosting extension point (`f1464c2 <https://github.com/mzdun/proj-flow/commit/f1464c2da6dfea8aa42ce59d0d039505e6b37ae6>`_)
26
+ - add simple decorator for extension points (`1483dba <https://github.com/mzdun/proj-flow/commit/1483dba8794e75ad8444e831af9a38fc7dc2d430>`_)
27
+ - introduce new plugin system (`eb62ce3 <https://github.com/mzdun/proj-flow/commit/eb62ce3b5b9649affc9c925ce454940cbd2d52c3>`_)
28
+
29
+ Bug Fixes
30
+ ---------
31
+
32
+ - add some verbosity to plugin system (`830f6b8 <https://github.com/mzdun/proj-flow/commit/830f6b8227ba62286ec039d0445c1b5dc81cd65a>`_)
33
+
34
+ `0.8.1 <https://github.com/mzdun/proj-flow/compare/v0.8.0...v0.8.1>`_ (2025-02-05)
35
+ ==================================================================================
36
+
37
+ Bug Fixes
38
+ ---------
39
+
40
+ - rename the package (`a994760 <https://github.com/mzdun/proj-flow/commit/a994760c82630aee5c962d8910d4183408b10def>`_)
14
41
 
15
42
  `0.8.0 <https://github.com/mzdun/proj-flow/compare/v0.7.1...v0.8.0>`_ (2025-02-05)
16
- =================================================================================
43
+ ==================================================================================
17
44
 
18
45
  New Features
19
46
  ------------
@@ -27,13 +54,13 @@ Bug Fixes
27
54
  - extract the code common to docstr and argparse (`ce09b2f <https://github.com/mzdun/proj-flow/commit/ce09b2f131e8bd2df7563b600ac5d1ff50928957>`_)
28
55
 
29
56
  `0.7.1 <https://github.com/mzdun/proj-flow/compare/v0.7.0...v0.7.1>`_ (2025-02-02)
30
- =================================================================================
57
+ ==================================================================================
31
58
 
32
59
  *Nothing to report.*
33
60
 
34
61
 
35
62
  `0.7.0 <https://github.com/mzdun/proj-flow/compare/v0.6.0...v0.7.0>`_ (2025-02-02)
36
- =================================================================================
63
+ ==================================================================================
37
64
 
38
65
  New Features
39
66
  ------------
@@ -52,7 +79,7 @@ Bug Fixes
52
79
 
53
80
 
54
81
  `0.6.0 <https://github.com/mzdun/proj-flow/compare/v0.5.0...v0.6.0>`_ (2025-01-31)
55
- =================================================================================
82
+ ==================================================================================
56
83
 
57
84
  New Features
58
85
  ------------
@@ -67,7 +94,7 @@ Bug Fixes
67
94
 
68
95
 
69
96
  `0.5.0 <https://github.com/mzdun/proj-flow/compare/v0.4.3...v0.5.0>`_ (2025-01-27)
70
- =================================================================================
97
+ ==================================================================================
71
98
 
72
99
  New Features
73
100
  ------------
@@ -76,7 +103,7 @@ New Features
76
103
 
77
104
 
78
105
  `0.4.3 <https://github.com/mzdun/proj-flow/compare/v0.4.2...v0.4.3>`_ (2025-01-27)
79
- =================================================================================
106
+ ==================================================================================
80
107
 
81
108
  Bug Fixes
82
109
  ---------
@@ -85,7 +112,7 @@ Bug Fixes
85
112
 
86
113
 
87
114
  `0.4.2 <https://github.com/mzdun/proj-flow/compare/v0.4.1...v0.4.2>`_ (2025-01-27)
88
- =================================================================================
115
+ ==================================================================================
89
116
 
90
117
  Bug Fixes
91
118
  ---------
@@ -94,7 +121,7 @@ Bug Fixes
94
121
 
95
122
 
96
123
  `0.4.1 <https://github.com/mzdun/proj-flow/compare/v0.3.7...v0.4.1>`_ (2025-01-27)
97
- =================================================================================
124
+ ==================================================================================
98
125
 
99
126
  Bug Fixes
100
127
  ---------
@@ -105,7 +132,7 @@ Bug Fixes
105
132
 
106
133
 
107
134
  `0.3.7 <https://github.com/mzdun/proj-flow/compare/v0.3.6...v0.3.7>`_ (2025-01-27)
108
- =================================================================================
135
+ ==================================================================================
109
136
 
110
137
  Bug Fixes
111
138
  ---------
@@ -114,7 +141,7 @@ Bug Fixes
114
141
 
115
142
 
116
143
  `0.3.6 <https://github.com/mzdun/proj-flow/compare/v0.3.5...v0.3.6>`_ (2025-01-27)
117
- =================================================================================
144
+ ==================================================================================
118
145
 
119
146
  Bug Fixes
120
147
  ---------
@@ -123,7 +150,7 @@ Bug Fixes
123
150
 
124
151
 
125
152
  `0.3.5 <https://github.com/mzdun/proj-flow/compare/v0.3.4...v0.3.5>`_ (2025-01-26)
126
- =================================================================================
153
+ ==================================================================================
127
154
 
128
155
  Bug Fixes
129
156
  ---------
@@ -132,7 +159,7 @@ Bug Fixes
132
159
 
133
160
 
134
161
  `0.3.4 <https://github.com/mzdun/proj-flow/compare/v0.3.3...v0.3.4>`_ (2025-01-26)
135
- =================================================================================
162
+ ==================================================================================
136
163
 
137
164
  Bug Fixes
138
165
  ---------
@@ -141,7 +168,7 @@ Bug Fixes
141
168
 
142
169
 
143
170
  `0.3.3 <https://github.com/mzdun/proj-flow/compare/v0.3.2...v0.3.3>`_ (2025-01-26)
144
- =================================================================================
171
+ ==================================================================================
145
172
 
146
173
  Bug Fixes
147
174
  ---------
@@ -150,7 +177,7 @@ Bug Fixes
150
177
 
151
178
 
152
179
  `0.3.2 <https://github.com/mzdun/proj-flow/compare/v0.3.1...v0.3.2>`_ (2025-01-26)
153
- =================================================================================
180
+ ==================================================================================
154
181
 
155
182
  Bug Fixes
156
183
  ---------
@@ -159,7 +186,7 @@ Bug Fixes
159
186
 
160
187
 
161
188
  `0.3.1 <https://github.com/mzdun/proj-flow/compare/v0.3.0...v0.3.1>`_ (2025-01-26)
162
- =================================================================================
189
+ ==================================================================================
163
190
 
164
191
  Bug Fixes
165
192
  ---------
@@ -168,7 +195,7 @@ Bug Fixes
168
195
 
169
196
 
170
197
  `0.3.0 <https://github.com/mzdun/proj-flow/compare/v0.2.0...v0.3.0>`_ (2025-01-26)
171
- =================================================================================
198
+ ==================================================================================
172
199
 
173
200
  New Features
174
201
  ------------
@@ -188,7 +215,7 @@ Bug Fixes
188
215
 
189
216
 
190
217
  `0.2.0 <https://github.com/mzdun/proj-flow/commits/v0.2.0>`_ (2025-01-22)
191
- ========================================================================
218
+ =========================================================================
192
219
 
193
220
  New Features
194
221
  ------------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proj-flow
3
- Version: 0.8.1
3
+ Version: 0.9.1
4
4
  Summary: C++ project maintenance, automated
5
5
  Project-URL: Documentation, https://proj-flow.readthedocs.io/en/latest/
6
6
  Project-URL: Homepage, https://pypi.org/project/proj-flow/
@@ -20,15 +20,16 @@ Requires-Dist: argcomplete
20
20
  Requires-Dist: chevron2021
21
21
  Requires-Dist: prompt-toolkit
22
22
  Requires-Dist: pyyaml
23
+ Requires-Dist: toml
23
24
  Description-Content-Type: text/markdown
24
25
 
25
- # C++ flow
26
+ # Project Flow
26
27
 
27
28
  [![Python package workflow badge](https://github.com/mzdun/proj-flow/actions/workflows/python-publish.yml/badge.svg)](https://github.com/mzdun/proj-flow/actions)
28
29
  [![PyPI version badge](https://img.shields.io/pypi/v/proj-flow.svg)](https://pypi.python.org/pypi/proj-flow)
29
30
  [![PyPI License: MIT](https://img.shields.io/pypi/l/proj-flow.svg)](https://pypi.python.org/pypi/proj-flow)
30
31
 
31
- **C++ flow** aims at being a one-stop tool for C++ projects, from creating new
32
+ **Project Flow** aims at being a one-stop tool for C++ projects, from creating new
32
33
  project, though building and verifying, all the way to publishing releases to
33
34
  the repository. It will run a set of known steps and will happily consult your
34
35
  project what do you want to call any subset of those steps.
@@ -38,13 +39,13 @@ for config and build and GitHub CLI for releases.
38
39
 
39
40
  ## Installation
40
41
 
41
- To create a new project with _C++ flow_, first install it using pip:
42
+ To create a new project with _Project Flow_, first install it using pip:
42
43
 
43
44
  ```sh
44
45
  (.venv) $ pip install proj-flow
45
46
  ```
46
47
 
47
- Every project created with _C++ flow_ has a self-bootstrapping helper script,
48
+ Every project created with _Project Flow_ has a self-bootstrapping helper script,
48
49
  which will install `proj-flow` if it is needed, using either current virtual
49
50
  environment or switching to a private virtual environment (created inside
50
51
  `.flow/.venv` directory). This is used by the GitHub workflow in the generated
@@ -1,10 +1,10 @@
1
- # C++ flow
1
+ # Project Flow
2
2
 
3
3
  [![Python package workflow badge](https://github.com/mzdun/proj-flow/actions/workflows/python-publish.yml/badge.svg)](https://github.com/mzdun/proj-flow/actions)
4
4
  [![PyPI version badge](https://img.shields.io/pypi/v/proj-flow.svg)](https://pypi.python.org/pypi/proj-flow)
5
5
  [![PyPI License: MIT](https://img.shields.io/pypi/l/proj-flow.svg)](https://pypi.python.org/pypi/proj-flow)
6
6
 
7
- **C++ flow** aims at being a one-stop tool for C++ projects, from creating new
7
+ **Project Flow** aims at being a one-stop tool for C++ projects, from creating new
8
8
  project, though building and verifying, all the way to publishing releases to
9
9
  the repository. It will run a set of known steps and will happily consult your
10
10
  project what do you want to call any subset of those steps.
@@ -14,13 +14,13 @@ for config and build and GitHub CLI for releases.
14
14
 
15
15
  ## Installation
16
16
 
17
- To create a new project with _C++ flow_, first install it using pip:
17
+ To create a new project with _Project Flow_, first install it using pip:
18
18
 
19
19
  ```sh
20
20
  (.venv) $ pip install proj-flow
21
21
  ```
22
22
 
23
- Every project created with _C++ flow_ has a self-bootstrapping helper script,
23
+ Every project created with _Project Flow_ has a self-bootstrapping helper script,
24
24
  which will install `proj-flow` if it is needed, using either current virtual
25
25
  environment or switching to a private virtual environment (created inside
26
26
  `.flow/.venv` directory). This is used by the GitHub workflow in the generated
@@ -3,13 +3,13 @@ build-backend = "hatchling.build"
3
3
  requires = ["hatchling"]
4
4
 
5
5
  [tool.hatch.version]
6
- path = "proj_flow/__init__.py"
6
+ path = "src/proj_flow/__init__.py"
7
7
 
8
8
  [tool.hatch.build.targets.sdist]
9
9
  exclude = ["/.github", "/docs"]
10
10
 
11
11
  [tool.hatch.build.targets.wheel]
12
- packages = ["proj_flow"]
12
+ packages = ["src/proj_flow"]
13
13
 
14
14
  [project]
15
15
  authors = [{name = "Marcin Zdun", email = "marcin.zdun@gmail.com"}]
@@ -27,6 +27,7 @@ dependencies = [
27
27
  "chevron2021",
28
28
  "prompt_toolkit",
29
29
  "PyYAML",
30
+ "toml",
30
31
  ]
31
32
  description = "C++ project maintenance, automated"
32
33
  dynamic = ["version"]
@@ -41,4 +42,4 @@ Homepage = "https://pypi.org/project/proj-flow/"
41
42
  "Source Code" = "https://github.com/mzdun/proj-flow"
42
43
 
43
44
  [project.scripts]
44
- proj-flow = "proj_flow.flow.cli:main"
45
+ proj-flow = "proj_flow.cli:main"
@@ -1,4 +1,4 @@
1
1
  # Copyright (c) 2025 Marcin Zdun
2
2
  # This code is licensed under MIT license (see LICENSE for details)
3
3
 
4
- __version__ = "0.8.1"
4
+ __version__ = "0.9.1"
@@ -2,9 +2,9 @@
2
2
  # This code is licensed under MIT license (see LICENSE for details)
3
3
 
4
4
  """
5
- The **proj_flow.__main__** allows *C++ flow* to be called as Python component.
5
+ The **proj_flow.__main__** allows *Project Flow* to be called as Python component.
6
6
  """
7
7
 
8
- from .flow.cli import main
8
+ from proj_flow.cli import main
9
9
 
10
10
  main()
@@ -0,0 +1,19 @@
1
+ # Copyright (c) 2025 Marcin Zdun
2
+ # This code is licensed under MIT license (see LICENSE for details)
3
+
4
+ """
5
+ The **proj_flow.api** contains public APIs, usable in third-party plugins.
6
+ """
7
+
8
+ from . import arg, completers, ctx, env, init, makefile, release, step
9
+
10
+ __all__ = [
11
+ "arg",
12
+ "completers",
13
+ "ctx",
14
+ "env",
15
+ "init",
16
+ "makefile",
17
+ "release",
18
+ "step",
19
+ ]
@@ -24,7 +24,7 @@ class Argument:
24
24
  action: typing.Union[str, argparse.Action, None] = None
25
25
  default: typing.Optional[typing.Any] = None
26
26
  choices: typing.Optional[typing.List[str]] = None
27
- completer: typing.Optional[callable] = None # type: ignore
27
+ completer: typing.Optional[_inspect.Function] = None
28
28
 
29
29
  def visit(self, parser: argparse.ArgumentParser, name: str):
30
30
  kwargs = {}
@@ -68,11 +68,16 @@ class FlagArgument(Argument):
68
68
  @dataclass
69
69
  class _Command:
70
70
  name: str
71
- entry: typing.Optional[callable] # type: ignore
71
+ entry: typing.Optional[_inspect.Function]
72
72
  doc: typing.Optional[str]
73
73
  subs: typing.Dict[str, "_Command"]
74
74
 
75
- def add(self, names: typing.List[str], entry: callable, doc: typing.Optional[str]): # type: ignore
75
+ def add(
76
+ self,
77
+ names: typing.List[str],
78
+ entry: _inspect.Function,
79
+ doc: typing.Optional[str],
80
+ ):
76
81
  name = names[0]
77
82
  rest = names[1:]
78
83
  if len(rest):
@@ -97,15 +102,18 @@ _known_commands = _Command("", None, None, {})
97
102
  _autodoc = {
98
103
  "proj_flow.flow.configs.Configs": "Current configuration list.",
99
104
  "proj_flow.api.env.Runtime": "Tools and print messages, while respecting ``--dry-run``, ``--silent`` and ``--verbose``.",
105
+ "proj_flow.cli.argument.Command": "The Command object attached to this @command function.",
100
106
  }
101
107
 
102
108
 
103
109
  def command(*name: str):
104
- def wrap(entry: callable): # type: ignore
110
+ def wrap(function: object):
111
+ entry = typing.cast(_inspect.Function, function)
105
112
  global _known_commands
106
- _known_commands.add(list(name), entry, entry.__doc__)
113
+ orig_doc = inspect.getdoc(entry)
114
+ _known_commands.add(list(name), entry, orig_doc)
107
115
 
108
- doc = inspect.getdoc(entry) or ""
116
+ doc = orig_doc or ""
109
117
  if doc:
110
118
  doc += "\n\n"
111
119
 
@@ -23,9 +23,7 @@ from dataclasses import dataclass
23
23
  from enum import Enum
24
24
  from typing import Any, Callable, Dict, List, Optional, Union, cast
25
25
 
26
- import yaml
27
-
28
- from proj_flow.base import uname
26
+ from proj_flow.base import plugins, uname
29
27
  from proj_flow.base.plugins import load_module_plugins
30
28
 
31
29
  platform = uname.uname()[0]
@@ -132,47 +130,29 @@ class FlowConfig:
132
130
  self.root = cfg.root
133
131
  else:
134
132
  self.root = os.path.abspath(root)
135
- try:
136
- with open(
137
- os.path.join(self.root, ".flow", "config.yml"),
138
- encoding="UTF-8",
139
- ) as f:
140
- self._cfg = yaml.load(f, Loader=yaml.Loader)
141
- except FileNotFoundError:
142
- self._cfg = {}
133
+ self._cfg = plugins.load_data(
134
+ os.path.join(self.root, ".flow", "config.json")
135
+ )
143
136
 
144
137
  self._propagate_compilers()
145
- self._load_plugins()
138
+ self._load_extensions()
146
139
 
147
140
  def _propagate_compilers(self):
148
141
  global _flow_config_default_compiler
149
142
  _flow_config_default_compiler = self.compiler_os_default
150
143
 
151
- def _load_plugins(self):
152
- std_plugins = importlib.import_module("proj_flow.plugins")
153
- load_module_plugins(std_plugins)
144
+ def _load_extensions(self):
145
+ extensions = cast(List[str], self._cfg.get("extensions", []))
146
+ extensions.insert(0, "proj_flow.minimal")
154
147
 
155
- local_plugins = os.path.abspath(os.path.join(self.root, ".flow", "extensions"))
156
- if not os.path.exists(local_plugins):
157
- return
158
-
159
- if not os.path.isdir(local_plugins):
160
- plugins = importlib.import_module(local_plugins)
161
- load_module_plugins(plugins, can_fail=True)
162
- return
163
-
164
- sys.path.insert(0, local_plugins)
165
-
166
- for root, dirnames, _ in os.walk(local_plugins):
167
- for dirname in dirnames:
168
- init = os.path.join(root, dirname, "__init__.py")
169
- if not os.path.isfile(init):
170
- continue
171
- plugins = importlib.import_module(dirname)
172
- load_module_plugins(plugins, can_fail=True)
173
- dirnames[:] = []
148
+ local_extensions = os.path.abspath(
149
+ os.path.join(self.root, ".flow", "extensions")
150
+ )
151
+ if os.path.isdir(local_extensions):
152
+ sys.path.insert(0, local_extensions)
174
153
 
175
- sys.path.pop(0)
154
+ for extension in extensions:
155
+ importlib.import_module(extension)
176
156
 
177
157
  @property
178
158
  def entry(self) -> Dict[str, dict]:
@@ -0,0 +1,99 @@
1
+ # Copyright (c) 2025 Marcin Zdun
2
+ # This code is licensed under MIT license (see LICENSE for details)
3
+
4
+ """
5
+ The **proj_flow.api.release** provides :class:`ProjectSuite` extension point.
6
+ """
7
+
8
+ import os
9
+ import re
10
+ from abc import ABC, abstractmethod
11
+ from dataclasses import dataclass
12
+ from typing import NamedTuple, Optional, Union
13
+
14
+ from proj_flow.api import env
15
+ from proj_flow.base import registry
16
+
17
+
18
+ class Arg(NamedTuple):
19
+ value: str
20
+ offset: int
21
+
22
+
23
+ NO_ARG = Arg("", -1)
24
+
25
+
26
+ class Decl(NamedTuple):
27
+ name: str
28
+ value: str
29
+ offset: int
30
+
31
+ def __str__(self):
32
+ return self.value
33
+
34
+ def asArg(self):
35
+ return Arg(self.value, self.offset)
36
+
37
+
38
+ class Version(NamedTuple):
39
+ core: Arg
40
+ stability: Arg
41
+
42
+ def __str__(self):
43
+ return f"{self.core.value}{self.stability.value}"
44
+
45
+
46
+ @dataclass
47
+ class Project:
48
+ package_root: str
49
+ version: Version
50
+
51
+ @property
52
+ def archive_name(self):
53
+ return f"{self.package_root}-{self.version}"
54
+
55
+ @property
56
+ def tag_name(self):
57
+ return f"v{self.version}"
58
+
59
+
60
+ class ProjectSuite(ABC):
61
+ @abstractmethod
62
+ def get_project(self, rt: env.Runtime) -> Optional[Project]: ...
63
+
64
+ def set_version(self, rt: env.Runtime, version: str):
65
+ core = re.split(r"([0-9]+\.[0-9]+\.[0-9]+)", version, maxsplit=1)[1]
66
+ stability = version[len(core) :]
67
+
68
+ project = self.get_project(rt)
69
+ if project:
70
+ self.patch_project(rt, project.version.core, core)
71
+
72
+ project = self.get_project(rt)
73
+ if project:
74
+ version_pos = project.version
75
+
76
+ if len(stability):
77
+ self.patch_project(rt, version_pos.stability, stability)
78
+ elif len(version_pos.stability.value):
79
+ self.patch_project(rt, version_pos.stability, "")
80
+
81
+ @abstractmethod
82
+ def get_version_file_path(self, rt: env.Runtime) -> Optional[str]: ...
83
+
84
+ def patch_project(self, rt: env.Runtime, pos: Arg, newValue: str):
85
+ path = self.get_version_file_path(rt)
86
+
87
+ if not path or not os.path.isfile(path):
88
+ return
89
+
90
+ with open(path, "r", encoding="UTF-8") as input:
91
+ text = input.read()
92
+
93
+ patched = text[: pos.offset] + newValue + text[pos.offset + len(pos.value) :]
94
+
95
+ with open(path, "w", encoding="UTF-8") as input:
96
+ input.write(patched)
97
+
98
+
99
+ project_suites = registry.Registry[ProjectSuite]("ProjectSuite")
@@ -5,10 +5,12 @@
5
5
  The **proj_flow.api.step** exposes APIs used by run extensions.
6
6
  """
7
7
 
8
+ import os
8
9
  from abc import ABC, abstractmethod
9
10
  from typing import List, cast
10
11
 
11
12
  from proj_flow.api.env import Config, Runtime
13
+ from proj_flow.base import inspect as _inspect
12
14
  from proj_flow.base import matrix
13
15
 
14
16
 
@@ -77,7 +79,8 @@ def _register_step(step: Step):
77
79
 
78
80
  name = step.name
79
81
  if name in [step.name for step in __steps]:
80
- raise NameError(f"Step {name} already registered")
82
+ if "READTHEDOCS" not in os.environ:
83
+ raise NameError(f"Step {name} already registered")
81
84
 
82
85
  __steps.append(step)
83
86
 
@@ -115,7 +118,7 @@ def _name_list(label: str, names: List[str], template="`{}`") -> str:
115
118
  return f"\n:{label}: {prefix}{em[-1]}"
116
119
 
117
120
 
118
- def _make_private(f: callable):
121
+ def _make_private(f: _inspect.Function):
119
122
  if f.__doc__:
120
123
  f.__doc__ += "\n\n:meta private:\n"
121
124
  else:
@@ -171,3 +174,10 @@ def register(cls=None):
171
174
  return impl
172
175
 
173
176
  return impl(cls)
177
+
178
+
179
+ def verbose_info():
180
+ for step in __steps:
181
+ print(
182
+ f'-- Step: adding "{step.name}" from `{step.__module__}.{step.__class__.__name__}`'
183
+ )
@@ -6,6 +6,6 @@ The **proj_flow.base** contains low-level tools for higher-level parts of the
6
6
  library.
7
7
  """
8
8
 
9
- from . import cmd, matrix, plugins, uname
9
+ from . import cmd, matrix, plugins, registry, uname
10
10
 
11
- __all__ = ["cmd", "matrix", "plugins", "uname"]
11
+ __all__ = ["cmd", "matrix", "plugins", "registry", "uname"]