proj-flow 0.21.0__tar.gz → 0.22.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.
- {proj_flow-0.21.0 → proj_flow-0.22.1}/.flow/config.yaml +4 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/CHANGELOG.rst +22 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/PKG-INFO +1 -1
- proj_flow-0.22.1/schema/test-runner.yaml +45 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/__init__.py +1 -1
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/api/completers.py +1 -1
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/api/env.py +37 -13
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/api/release.py +1 -1
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/api/step.py +7 -3
- proj_flow-0.21.0/src/proj_flow/ext/cplusplus/cmake/presets.py → proj_flow-0.22.1/src/proj_flow/base/cmake_presets.py +44 -24
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/base/plugins.py +12 -7
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/cli/finder.py +4 -3
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/dependency.py +6 -2
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/cplusplus/cmake/__init__.py +2 -2
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/cplusplus/cmake/parser.py +4 -3
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/cplusplus/cmake/steps.py +3 -9
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/cplusplus/conan/__init__.py +6 -4
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/github/publishing.py +1 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/python/rtdocs.py +2 -2
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/python/steps.py +5 -4
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/python/version.py +12 -12
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/sign/__init__.py +2 -2
- proj_flow-0.22.1/src/proj_flow/ext/test_runner/__init__.py +6 -0
- proj_flow-0.22.1/src/proj_flow/ext/test_runner/cli.py +416 -0
- proj_flow-0.22.1/src/proj_flow/ext/test_runner/driver/commands.py +74 -0
- proj_flow-0.22.1/src/proj_flow/ext/test_runner/driver/test.py +610 -0
- proj_flow-0.22.1/src/proj_flow/ext/test_runner/driver/testbed.py +141 -0
- proj_flow-0.22.1/src/proj_flow/ext/test_runner/utils/archives.py +56 -0
- proj_flow-0.22.1/src/proj_flow/ext/webidl/base/__init__.py +2 -0
- proj_flow-0.22.1/src/proj_flow/ext/webidl/model/__init__.py +2 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/release.py +7 -4
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/rich_text/api.py +3 -4
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/minimal/ext/bug_report.py +6 -4
- proj_flow-0.22.1/src/proj_flow/minimal/ext/versions.py +48 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/minimal/run.py +3 -2
- {proj_flow-0.21.0 → proj_flow-0.22.1}/.gitignore +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/.readthedocs.yaml +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/LICENSE +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/README.md +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/ROADMAP.md +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/actions/bootstrap/action.yml +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/actions/bootstrap/version.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/pyproject.toml +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/__main__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/api/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/api/arg.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/api/ctx.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/api/init.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/api/makefile.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/base/__cmake_version__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/base/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/base/cmd.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/base/inspect.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/base/matrix.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/base/name_list.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/base/registry.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/base/uname.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/cli/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/cli/argument.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/cplusplus/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/cplusplus/cmake/project.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/cplusplus/conan/_conan.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/github/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/github/cli.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/github/hosting.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/github/switches.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/markdown_changelog.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/python/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/re_structured_changelog.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/sign/api.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/sign/win32.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/store.py +0 -0
- {proj_flow-0.21.0/src/proj_flow/ext/webidl/base → proj_flow-0.22.1/src/proj_flow/ext/test_runner/driver}/__init__.py +0 -0
- {proj_flow-0.21.0/src/proj_flow/ext/webidl/model → proj_flow-0.22.1/src/proj_flow/ext/test_runner/utils}/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/tools/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/tools/pragma_once.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/tools/run_linter.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/base/config.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/cli/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/cli/cmake.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/cli/depfile.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/cli/gen.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/cli/init.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/cli/root.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/cli/updater.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/data/init/flow_webidl.cmake +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/data/templates/cmake.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/data/templates/depfile.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/data/templates/partials/cxx/attribute-decl.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/data/templates/partials/cxx/in-out.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/data/templates/partials/cxx/includes.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/data/templates/partials/cxx/operation-decl.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/data/templates/partials/cxx/type.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/data/types/cxx.json +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/model/ast.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/model/builders.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/ext/webidl/registry.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/flow/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/flow/configs.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/flow/layer.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/flow/steps.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/commit.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/error.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/fmt.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/format.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/hosting/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/hosting/github.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/msg.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/rich_text/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/rich_text/markdown.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/log/rich_text/re_structured_text.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/minimal/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/minimal/base.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/minimal/bootstrap.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/minimal/init.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/minimal/list.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/minimal/system.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/project/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/project/api.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/project/cplusplus/__init__.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/project/cplusplus/cmake_context.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/project/cplusplus/conan_context.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/project/cplusplus/project.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/project/data.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/project/interact.py +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/base/.clang-format +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/base/.flow/config.yml +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/base/.flow/flow.py.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/base/.flow/matrix.yml +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/base/.flow/official.yml +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/base/.gitignore +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/base/README.md.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/base/flow +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/base/flow.cmd +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/base.json +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/.flow/cmake/common.cmake.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/.flow/extensions/wall/__init__.py.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/.flow/extensions/wall/icons/__init__.py.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/.flow/extensions/wall/icons/magick.py.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/.flow/packages/base.cmake.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/.flow/packages/config.cmake +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/.flow/packages/cpack.cmake +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/.flow/packages/wix/cpack.cmake.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/.flow/packages/wix/patches.in.wix +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/.flow/packages/wix.cmake.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/CMakeGraphVizOptions.cmake +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/CMakeLists.txt.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/CMakePresets.json +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/data/assets/appicon.ico +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/data/assets/appicon.png +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/data/assets/wix_banner.bmp +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/data/assets/wix_dialog.bmp +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/data/icons/.gitignore +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/data/icons/appicon-mask.svg +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/data/icons/appicon.svg +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/src/main.cc.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/src/version.hpp.in.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake/tests/test.cc.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/cmake.json +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/conan/.flow/cmake/libcxx_toolchain.cmake +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/conan/.flow/cmake/output_dirs_setup.cmake +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/conan/conanfile.txt +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/conan.json +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_actions/.github/linters/.isort.cfg +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_actions/.github/linters/.mypy.ini +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_actions/.github/workflows/build.yml.auto-release +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_actions/.github/workflows/build.yml.basic +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_actions/.github/workflows/linter.yml +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_actions/CPPLINT.cfg +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_actions.json +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_social/.github/ISSUE_TEMPLATE/bug_report.md.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_social/.github/ISSUE_TEMPLATE/feature_request.md.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_social/CODE_OF_CONDUCT.md.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_social/CONTRIBUTING.md +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/layers/github_social.json +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/licenses/0BSD.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/licenses/MIT.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/licenses/Unlicense.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/licenses/WTFPL.mustache +0 -0
- {proj_flow-0.21.0 → proj_flow-0.22.1}/src/proj_flow/template/licenses/Zlib.mustache +0 -0
|
@@ -3,6 +3,7 @@ extensions:
|
|
|
3
3
|
- proj_flow.ext.github
|
|
4
4
|
- proj_flow.ext.re_structured_changelog
|
|
5
5
|
- proj_flow.minimal.ext.bug_report
|
|
6
|
+
- proj_flow.minimal.ext.versions
|
|
6
7
|
|
|
7
8
|
entry:
|
|
8
9
|
build: [ Build ]
|
|
@@ -10,3 +11,6 @@ entry:
|
|
|
10
11
|
docs: [ RTD ]
|
|
11
12
|
verify: [ Build, Check Twine ]
|
|
12
13
|
refresh: [ Install, Build, RTD, Check Twine ]
|
|
14
|
+
|
|
15
|
+
version-updates:
|
|
16
|
+
schema/test-runner.yaml: tags/v$VERSION/
|
|
@@ -4,6 +4,28 @@ Changelog
|
|
|
4
4
|
|
|
5
5
|
All notable changes to this project will be documented in this file.
|
|
6
6
|
|
|
7
|
+
`0.22.1 <https://github.com/mzdun/proj-flow/compare/v0.22.0...v0.22.1>`_ (2026-02-03)
|
|
8
|
+
=====================================================================================
|
|
9
|
+
|
|
10
|
+
Bug Fixes
|
|
11
|
+
---------
|
|
12
|
+
|
|
13
|
+
- add $id to test-runner schema (`8769ddf <https://github.com/mzdun/proj-flow/commit/8769ddfbd4dd959b1001ff62163e094cdd064fb1>`_)
|
|
14
|
+
|
|
15
|
+
`0.22.0 <https://github.com/mzdun/proj-flow/compare/v0.21.0...v0.22.0>`_ (2026-02-03)
|
|
16
|
+
=====================================================================================
|
|
17
|
+
|
|
18
|
+
New Features
|
|
19
|
+
------------
|
|
20
|
+
|
|
21
|
+
- get test-runner over from cov (`4829061 <https://github.com/mzdun/proj-flow/commit/4829061c153ea66b8c323766f82147d2e71ee5b7>`_)
|
|
22
|
+
|
|
23
|
+
Bug Fixes
|
|
24
|
+
---------
|
|
25
|
+
|
|
26
|
+
- make CMake presets more accessible (`d78726f <https://github.com/mzdun/proj-flow/commit/d78726fd708804a04ee3170fa5e90e27a6fa3941>`_)
|
|
27
|
+
- move ``rt.root`` to ``Path`` (`fe6f3e7 <https://github.com/mzdun/proj-flow/commit/fe6f3e7b6968a01f847599e06c67bfeb463d7802>`_)
|
|
28
|
+
|
|
7
29
|
`0.21.0 <https://github.com/mzdun/proj-flow/compare/v0.20.3...v0.21.0>`_ (2026-02-03)
|
|
8
30
|
=====================================================================================
|
|
9
31
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: proj-flow
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.22.1
|
|
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,45 @@
|
|
|
1
|
+
$schema: http://json-schema.org/draft-04/schema#
|
|
2
|
+
$id: https://raw.githubusercontent.com/mzdun/proj-flow/refs/tags/v0.22.1/schema/test-runner.yaml
|
|
3
|
+
type: object
|
|
4
|
+
required: [args, expected]
|
|
5
|
+
additionalProperties: false
|
|
6
|
+
default: {}
|
|
7
|
+
|
|
8
|
+
properties:
|
|
9
|
+
$schema: {type: string}
|
|
10
|
+
linear: {type: boolean}
|
|
11
|
+
disabled: {type: [boolean, string]}
|
|
12
|
+
lang: {type: string}
|
|
13
|
+
args: {type: string}
|
|
14
|
+
post: {type: [string, array], items: {type: string}}
|
|
15
|
+
expected:
|
|
16
|
+
type: ["null", array]
|
|
17
|
+
items:
|
|
18
|
+
- type: integer
|
|
19
|
+
- $ref: "#/$defs/lines"
|
|
20
|
+
- $ref: "#/$defs/lines"
|
|
21
|
+
check:
|
|
22
|
+
type: object
|
|
23
|
+
properties:
|
|
24
|
+
stdout: {$ref: "#/$defs/check"}
|
|
25
|
+
stderr: {$ref: "#/$defs/check"}
|
|
26
|
+
writes: {$ref: "#/$defs/dictionary"}
|
|
27
|
+
patches: {$ref: "#/$defs/dictionary"}
|
|
28
|
+
prepare: { $ref: "#/$defs/commands" }
|
|
29
|
+
cleanup: { $ref: "#/$defs/commands" }
|
|
30
|
+
|
|
31
|
+
$defs:
|
|
32
|
+
dictionary:
|
|
33
|
+
type: object
|
|
34
|
+
properties:
|
|
35
|
+
^$: {not: {}}
|
|
36
|
+
^.+$: {type: string}
|
|
37
|
+
lines:
|
|
38
|
+
type: [string, array]
|
|
39
|
+
items: string
|
|
40
|
+
commands:
|
|
41
|
+
type: array
|
|
42
|
+
items: string
|
|
43
|
+
check:
|
|
44
|
+
type: enum
|
|
45
|
+
enum: [begin, end, all]
|
|
@@ -57,7 +57,7 @@ def _str_arg(arg: Union[bool, str]):
|
|
|
57
57
|
def matrix_completer(prefix: str, parser, **kwargs):
|
|
58
58
|
flow_cfg = cast(api.env.FlowConfig, parser.flow)
|
|
59
59
|
|
|
60
|
-
matrix_yml =
|
|
60
|
+
matrix_yml = flow_cfg.root / ".flow" / "matrix.yml"
|
|
61
61
|
with open(matrix_yml, "r", encoding="UTF-8") as contents:
|
|
62
62
|
data: Dict[str, List[Any]] = yaml.load(contents, Loader=yaml.Loader).get(
|
|
63
63
|
"matrix", {}
|
|
@@ -21,10 +21,12 @@ import subprocess
|
|
|
21
21
|
import sys
|
|
22
22
|
from dataclasses import dataclass
|
|
23
23
|
from enum import Enum
|
|
24
|
+
from pathlib import Path
|
|
24
25
|
from typing import Any, Callable, Dict, List, Optional, Union, cast
|
|
25
26
|
|
|
26
27
|
from proj_flow.api import ctx
|
|
27
28
|
from proj_flow.base import plugins, uname
|
|
29
|
+
from proj_flow.base.cmake_presets import get_binary_dirs
|
|
28
30
|
|
|
29
31
|
platform = uname.uname()[0]
|
|
30
32
|
|
|
@@ -32,6 +34,25 @@ platform = uname.uname()[0]
|
|
|
32
34
|
_flow_config_default_compiler: Optional[Dict[str, str]] = None
|
|
33
35
|
|
|
34
36
|
|
|
37
|
+
class CMakeBinaryDirsCache:
|
|
38
|
+
_dirs: dict[str, Path] | None = None
|
|
39
|
+
_loaded: bool = False
|
|
40
|
+
|
|
41
|
+
@property
|
|
42
|
+
def dirs(self):
|
|
43
|
+
if not self._loaded:
|
|
44
|
+
self._loaded = True
|
|
45
|
+
self._dirs = get_binary_dirs()
|
|
46
|
+
|
|
47
|
+
return self._dirs
|
|
48
|
+
|
|
49
|
+
def binary_dir(self, key: str):
|
|
50
|
+
return (self.dirs or {}).get(key)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
CMAKE_BINARY_DIRS = CMakeBinaryDirsCache()
|
|
54
|
+
|
|
55
|
+
|
|
35
56
|
def default_compiler():
|
|
36
57
|
try:
|
|
37
58
|
return os.environ["DEV_CXX"]
|
|
@@ -152,7 +173,7 @@ def _flatten_dict(dst: ctx.SettingsType, defaults: Dict[str, Any], prefix=""):
|
|
|
152
173
|
dst[this_key] = str(val)
|
|
153
174
|
|
|
154
175
|
|
|
155
|
-
def _merge(cfg: dict, defaults: ctx.SettingsType, path:
|
|
176
|
+
def _merge(cfg: dict, defaults: ctx.SettingsType, path: Path):
|
|
156
177
|
config = plugins.load_data(path)
|
|
157
178
|
if not isinstance(config, dict):
|
|
158
179
|
return
|
|
@@ -189,25 +210,25 @@ class FlowConfig:
|
|
|
189
210
|
_cfg: dict
|
|
190
211
|
steps: list = []
|
|
191
212
|
aliases: List[RunAlias] = []
|
|
192
|
-
root:
|
|
213
|
+
root: Path
|
|
193
214
|
|
|
194
|
-
def __init__(self, cfg: Optional["FlowConfig"] = None, root:
|
|
215
|
+
def __init__(self, cfg: Optional["FlowConfig"] = None, root: Path = Path()):
|
|
195
216
|
if cfg is not None:
|
|
196
217
|
self._cfg = cfg._cfg
|
|
197
218
|
self.steps = cfg.steps
|
|
198
219
|
self.aliases = cfg.aliases
|
|
199
220
|
self.root = cfg.root
|
|
200
221
|
else:
|
|
201
|
-
self.root =
|
|
222
|
+
self.root = root.absolute()
|
|
202
223
|
defaults: ctx.SettingsType = {}
|
|
203
224
|
dest: dict = {}
|
|
204
225
|
|
|
205
226
|
_merge(
|
|
206
227
|
dest,
|
|
207
228
|
defaults,
|
|
208
|
-
|
|
229
|
+
Path("~").expanduser() / ".config" / "proj-flow.json",
|
|
209
230
|
)
|
|
210
|
-
_merge(dest, defaults,
|
|
231
|
+
_merge(dest, defaults, self.root / ".flow" / "config.json")
|
|
211
232
|
|
|
212
233
|
self._cfg = dest
|
|
213
234
|
self._cfg["defaults"] = defaults
|
|
@@ -223,11 +244,9 @@ class FlowConfig:
|
|
|
223
244
|
extensions = cast(List[str], self._cfg.get("extensions", []))
|
|
224
245
|
extensions.insert(0, "proj_flow.minimal")
|
|
225
246
|
|
|
226
|
-
local_extensions =
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
if os.path.isdir(local_extensions):
|
|
230
|
-
sys.path.insert(0, local_extensions)
|
|
247
|
+
local_extensions = (self.root / ".flow" / "extensions").resolve()
|
|
248
|
+
if local_extensions.is_dir():
|
|
249
|
+
sys.path.insert(0, local_extensions.as_posix())
|
|
231
250
|
|
|
232
251
|
load_extensions(extensions)
|
|
233
252
|
|
|
@@ -465,8 +484,13 @@ class Config:
|
|
|
465
484
|
return self.items.get("build_name", "")
|
|
466
485
|
|
|
467
486
|
@property
|
|
468
|
-
def build_dir(self) ->
|
|
469
|
-
|
|
487
|
+
def build_dir(self) -> Path:
|
|
488
|
+
cmake_binary_dir = CMAKE_BINARY_DIRS.binary_dir(
|
|
489
|
+
f"{self.preset}-{self.build_generator}"
|
|
490
|
+
)
|
|
491
|
+
if cmake_binary_dir:
|
|
492
|
+
return cmake_binary_dir
|
|
493
|
+
return Path("build") / self.preset
|
|
470
494
|
|
|
471
495
|
@property
|
|
472
496
|
def preset(self) -> str:
|
|
@@ -113,5 +113,5 @@ def get_project(rt: env.Runtime):
|
|
|
113
113
|
|
|
114
114
|
_, project = project_suites.find(wrap)
|
|
115
115
|
if project is None:
|
|
116
|
-
rt.fatal(f"Cannot get project information from {rt.root}")
|
|
116
|
+
rt.fatal(f"Cannot get project information from {rt.root.as_posix()}")
|
|
117
117
|
return project
|
|
@@ -7,6 +7,7 @@ The **proj_flow.api.step** exposes APIs used by run extensions.
|
|
|
7
7
|
|
|
8
8
|
import os
|
|
9
9
|
from abc import ABC, abstractmethod
|
|
10
|
+
from pathlib import Path
|
|
10
11
|
from typing import List, cast
|
|
11
12
|
|
|
12
13
|
from proj_flow.api.env import Config, Runtime
|
|
@@ -34,7 +35,7 @@ class Step(ABC):
|
|
|
34
35
|
def is_active(self, config: Config, rt: Runtime) -> bool:
|
|
35
36
|
return True
|
|
36
37
|
|
|
37
|
-
def directories_to_remove(self, config: Config) -> List[
|
|
38
|
+
def directories_to_remove(self, config: Config) -> List[Path]:
|
|
38
39
|
return []
|
|
39
40
|
|
|
40
41
|
@abstractmethod
|
|
@@ -59,7 +60,7 @@ class SerialStep(Step):
|
|
|
59
60
|
return False
|
|
60
61
|
return True
|
|
61
62
|
|
|
62
|
-
def directories_to_remove(self, config: Config) -> List[
|
|
63
|
+
def directories_to_remove(self, config: Config) -> List[Path]:
|
|
63
64
|
return matrix.flatten(
|
|
64
65
|
[child.directories_to_remove(config) for child in self.children]
|
|
65
66
|
)
|
|
@@ -162,7 +163,10 @@ def _extend_docstring(conv, step: Step):
|
|
|
162
163
|
_name_list("Requires", step.platform_dependencies(), template="``{}``"),
|
|
163
164
|
_name_list(
|
|
164
165
|
"Removes",
|
|
165
|
-
|
|
166
|
+
[
|
|
167
|
+
dirname.as_posix()
|
|
168
|
+
for dirname in step.directories_to_remove(_dummy_config)
|
|
169
|
+
],
|
|
166
170
|
template="``{}``",
|
|
167
171
|
),
|
|
168
172
|
)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# This code is licensed under MIT license (see LICENSE for details)
|
|
3
3
|
|
|
4
4
|
"""
|
|
5
|
-
The **proj_flow.
|
|
5
|
+
The **proj_flow.project.cplusplus.cmake_presets** check build directories for CMake step.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import json
|
|
@@ -11,7 +11,7 @@ import platform
|
|
|
11
11
|
from dataclasses import dataclass
|
|
12
12
|
from enum import Enum
|
|
13
13
|
from pathlib import Path
|
|
14
|
-
from typing import cast
|
|
14
|
+
from typing import Callable, TypeVar, cast
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class MacroType(Enum):
|
|
@@ -40,6 +40,7 @@ MACROS: dict[str, Path | str | MacroType] = {
|
|
|
40
40
|
class Preset:
|
|
41
41
|
name: str
|
|
42
42
|
binary_dir: str | None
|
|
43
|
+
build_type: str | None
|
|
43
44
|
generator: str | None
|
|
44
45
|
inherits: list[str]
|
|
45
46
|
file_dir: Path
|
|
@@ -82,12 +83,15 @@ class Presets:
|
|
|
82
83
|
if dirname is None:
|
|
83
84
|
return self.result
|
|
84
85
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
self.
|
|
86
|
+
try:
|
|
87
|
+
includes, presets = Presets.__load_file(filename)
|
|
88
|
+
self.__visit_includes(dirname, includes)
|
|
89
|
+
for preset in presets:
|
|
90
|
+
self.__visit_preset(dirname, preset)
|
|
91
|
+
for preset in self.result.values():
|
|
92
|
+
self.__merge_preset(preset)
|
|
93
|
+
except FileNotFoundError:
|
|
94
|
+
return None
|
|
91
95
|
|
|
92
96
|
return self.result
|
|
93
97
|
|
|
@@ -109,9 +113,12 @@ class Presets:
|
|
|
109
113
|
binary_dir = cast(str | None, preset.get("binaryDir"))
|
|
110
114
|
generator = cast(str | None, preset.get("generator"))
|
|
111
115
|
inherits = cast(list[str], preset.get("inherits", []))
|
|
116
|
+
cache = cast(dict, preset.get("cacheVariables", {}))
|
|
117
|
+
build_type = cast(str | None, cache.get("CMAKE_BUILD_TYPE"))
|
|
112
118
|
self.result[name] = Preset(
|
|
113
119
|
name=name,
|
|
114
120
|
binary_dir=binary_dir,
|
|
121
|
+
build_type=build_type,
|
|
115
122
|
generator=generator,
|
|
116
123
|
inherits=inherits,
|
|
117
124
|
file_dir=dirname,
|
|
@@ -132,33 +139,46 @@ class Presets:
|
|
|
132
139
|
preset.binary_dir = parent_preset.binary_dir
|
|
133
140
|
if parent_preset.generator and not preset.generator:
|
|
134
141
|
preset.generator = parent_preset.generator
|
|
142
|
+
if parent_preset.build_type and not preset.build_type:
|
|
143
|
+
preset.build_type = parent_preset.build_type
|
|
135
144
|
|
|
136
145
|
@staticmethod
|
|
137
146
|
def __load_file(filename: Path):
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
presets = cast(list[dict], data.get("configurePresets", []))
|
|
143
|
-
except FileNotFoundError:
|
|
144
|
-
includes: list[str] = []
|
|
145
|
-
presets: list[dict] = []
|
|
147
|
+
with open(filename, encoding="UTF-8") as f:
|
|
148
|
+
data = json.load(f)
|
|
149
|
+
includes = cast(list[str], data.get("include", []))
|
|
150
|
+
presets = cast(list[dict], data.get("configurePresets", []))
|
|
146
151
|
|
|
147
152
|
return (includes, presets)
|
|
148
153
|
|
|
149
154
|
|
|
155
|
+
def binary_dir_from_preset(preset: Preset, cwd: Path):
|
|
156
|
+
path = preset.expand()
|
|
157
|
+
if not path:
|
|
158
|
+
return None
|
|
159
|
+
if path.is_relative_to(cwd):
|
|
160
|
+
path = path.relative_to(cwd)
|
|
161
|
+
return path
|
|
162
|
+
|
|
163
|
+
|
|
150
164
|
def get_binary_dirs():
|
|
165
|
+
return visit_presets(binary_dir_from_preset)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
T = TypeVar("T")
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def visit_presets(mapper: Callable[[Preset, Path], T | None]):
|
|
151
172
|
presets = Presets().visit_file(Path("CMakePresets.json"))
|
|
173
|
+
if presets is None:
|
|
174
|
+
return None
|
|
152
175
|
|
|
153
|
-
cwd =
|
|
154
|
-
result: dict[str,
|
|
176
|
+
cwd = Path.cwd()
|
|
177
|
+
result: dict[str, T] = {}
|
|
155
178
|
for preset in presets.values():
|
|
156
|
-
|
|
157
|
-
if
|
|
179
|
+
mapped = mapper(preset, cwd)
|
|
180
|
+
if mapped is None:
|
|
158
181
|
continue
|
|
159
|
-
|
|
160
|
-
if rel[: len(cwd)] == cwd:
|
|
161
|
-
rel = rel[len(cwd) :]
|
|
162
|
-
result[preset.name] = rel
|
|
182
|
+
result[preset.name] = mapped
|
|
163
183
|
|
|
164
184
|
return result
|
|
@@ -6,18 +6,23 @@ The **proj_flow.base.plugins** provide the plugin enumeration helpers.
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
import json
|
|
9
|
-
import
|
|
9
|
+
from pathlib import Path
|
|
10
10
|
from typing import cast
|
|
11
11
|
|
|
12
12
|
import yaml
|
|
13
13
|
|
|
14
|
+
try:
|
|
15
|
+
from yaml import CLoader as Loader
|
|
16
|
+
except ImportError:
|
|
17
|
+
from yaml import Loader
|
|
14
18
|
|
|
15
|
-
|
|
19
|
+
|
|
20
|
+
def load_yaml(filename: Path):
|
|
16
21
|
with open(filename) as src:
|
|
17
|
-
return cast(dict, yaml.load(src, Loader=
|
|
22
|
+
return cast(dict, yaml.load(src, Loader=Loader))
|
|
18
23
|
|
|
19
24
|
|
|
20
|
-
def load_json(filename:
|
|
25
|
+
def load_json(filename: Path):
|
|
21
26
|
with open(filename) as src:
|
|
22
27
|
return cast(dict, json.load(src))
|
|
23
28
|
|
|
@@ -29,8 +34,8 @@ LOADERS = {
|
|
|
29
34
|
}
|
|
30
35
|
|
|
31
36
|
|
|
32
|
-
def load_data(filename:
|
|
33
|
-
|
|
37
|
+
def load_data(filename: Path):
|
|
38
|
+
ext = filename.suffix
|
|
34
39
|
loader = LOADERS.get(ext.lower())
|
|
35
40
|
if loader:
|
|
36
41
|
try:
|
|
@@ -39,7 +44,7 @@ def load_data(filename: str):
|
|
|
39
44
|
pass
|
|
40
45
|
|
|
41
46
|
for new_ext, loader in LOADERS.items():
|
|
42
|
-
new_filename =
|
|
47
|
+
new_filename = filename.with_suffix(new_ext)
|
|
43
48
|
try:
|
|
44
49
|
return loader(new_filename)
|
|
45
50
|
except Exception:
|
|
@@ -9,6 +9,7 @@ contains ``-C`` argument.
|
|
|
9
9
|
|
|
10
10
|
import os
|
|
11
11
|
import shlex
|
|
12
|
+
from pathlib import Path
|
|
12
13
|
from typing import List
|
|
13
14
|
|
|
14
15
|
from argcomplete import finders
|
|
@@ -43,7 +44,7 @@ class CompletionFinder(finders.CompletionFinder):
|
|
|
43
44
|
|
|
44
45
|
def find_project(self):
|
|
45
46
|
if not self.active():
|
|
46
|
-
return
|
|
47
|
+
return Path()
|
|
47
48
|
|
|
48
49
|
comp_line = os.environ["COMP_LINE"]
|
|
49
50
|
comp_point = int(os.environ["COMP_POINT"])
|
|
@@ -51,9 +52,9 @@ class CompletionFinder(finders.CompletionFinder):
|
|
|
51
52
|
pos = find_dash_see(args)
|
|
52
53
|
|
|
53
54
|
if pos < 0:
|
|
54
|
-
return
|
|
55
|
+
return Path()
|
|
55
56
|
|
|
56
|
-
return args[pos]
|
|
57
|
+
return Path(args[pos])
|
|
57
58
|
|
|
58
59
|
|
|
59
60
|
autocomplete = CompletionFinder()
|
|
@@ -57,14 +57,18 @@ class Dependency:
|
|
|
57
57
|
version_expression: str
|
|
58
58
|
kind: DepKind = DepKind.APP
|
|
59
59
|
|
|
60
|
-
def __lt__(self, rhs:
|
|
60
|
+
def __lt__(self, rhs: object):
|
|
61
|
+
if not isinstance(rhs, Dependency):
|
|
62
|
+
return False
|
|
61
63
|
if self.kind != rhs.kind:
|
|
62
64
|
return self.kind.value < rhs.kind.value
|
|
63
65
|
if self.name != rhs.name:
|
|
64
66
|
return self.name < rhs.name
|
|
65
67
|
return self.version_expression < rhs.version_expression
|
|
66
68
|
|
|
67
|
-
def __eq__(self, rhs:
|
|
69
|
+
def __eq__(self, rhs: object):
|
|
70
|
+
if not isinstance(rhs, Dependency):
|
|
71
|
+
return False
|
|
68
72
|
return (
|
|
69
73
|
self.kind == rhs.kind
|
|
70
74
|
and self.name == rhs.name
|
|
@@ -7,6 +7,6 @@ The **proj_flow.ext.cplusplus.cmake** provides ``"CMake"``, ``"Build"``,
|
|
|
7
7
|
context.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
from . import parser,
|
|
10
|
+
from . import parser, project, steps
|
|
11
11
|
|
|
12
|
-
__all__ = ["parser", "
|
|
12
|
+
__all__ = ["parser", "project", "steps"]
|
|
@@ -7,6 +7,7 @@ The **proj_flow.ext.cplusplus.cmake.parser** contains simple CMake parser.
|
|
|
7
7
|
|
|
8
8
|
import os
|
|
9
9
|
import re
|
|
10
|
+
from pathlib import Path
|
|
10
11
|
from typing import Iterator, List, NamedTuple, Optional
|
|
11
12
|
|
|
12
13
|
from proj_flow.api.release import NO_ARG, Arg
|
|
@@ -76,7 +77,7 @@ def _command(cmd: Token, stream: Iterator[Token]):
|
|
|
76
77
|
return result
|
|
77
78
|
|
|
78
79
|
|
|
79
|
-
def _cmake(filename:
|
|
80
|
+
def _cmake(filename: Path):
|
|
80
81
|
commands: List[Command] = []
|
|
81
82
|
|
|
82
83
|
with open(filename, "r", encoding="UTF-8") as f:
|
|
@@ -102,9 +103,9 @@ def _patch(directory: str, arg: Arg, value: str):
|
|
|
102
103
|
input.write(patched)
|
|
103
104
|
|
|
104
105
|
|
|
105
|
-
def get_project(dirname:
|
|
106
|
+
def get_project(dirname: Path) -> Optional[CMakeProject]:
|
|
106
107
|
try:
|
|
107
|
-
commands = _cmake(
|
|
108
|
+
commands = _cmake(dirname / "CMakeLists.txt")
|
|
108
109
|
except FileNotFoundError:
|
|
109
110
|
return None
|
|
110
111
|
|
|
@@ -7,12 +7,12 @@ building and archiving.
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
import os
|
|
10
|
+
from pathlib import Path
|
|
10
11
|
from typing import Dict, List, cast
|
|
11
12
|
|
|
12
13
|
from proj_flow import api
|
|
13
14
|
from proj_flow.api import env, step
|
|
14
15
|
from proj_flow.base.__cmake_version__ import CMAKE_VERSION
|
|
15
|
-
from proj_flow.ext.cplusplus.cmake.presets import get_binary_dirs
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class CMakeBase(api.step.Step):
|
|
@@ -60,18 +60,12 @@ class CMakeConfig(CMakeBase):
|
|
|
60
60
|
|
|
61
61
|
def __init__(self):
|
|
62
62
|
super().__init__(name="CMake")
|
|
63
|
-
self.binary_dirs = get_binary_dirs()
|
|
64
63
|
|
|
65
64
|
def is_active(self, config: env.Config, rt: env.Runtime) -> bool:
|
|
66
65
|
return os.path.isfile("CMakeLists.txt") and os.path.isfile("CMakePresets.json")
|
|
67
66
|
|
|
68
|
-
def directories_to_remove(self, config: env.Config) -> List[
|
|
69
|
-
|
|
70
|
-
if not binary_dir:
|
|
71
|
-
if "READTHEDOCS" not in os.environ:
|
|
72
|
-
return []
|
|
73
|
-
return [f"build/{config.preset}"]
|
|
74
|
-
return [binary_dir]
|
|
67
|
+
def directories_to_remove(self, config: env.Config) -> List[Path]:
|
|
68
|
+
return [config.build_dir]
|
|
75
69
|
|
|
76
70
|
def run(self, config: env.Config, rt: env.Runtime) -> int:
|
|
77
71
|
cmake_vars = cast(Dict[str, str], rt._cfg.get("cmake", {}).get("vars", {}))
|
|
@@ -7,6 +7,7 @@ The **proj_flow.ext.cplusplus.conan** provides the ``"Conan"`` step.
|
|
|
7
7
|
|
|
8
8
|
import os
|
|
9
9
|
import textwrap
|
|
10
|
+
from pathlib import Path
|
|
10
11
|
from typing import List
|
|
11
12
|
|
|
12
13
|
from proj_flow.api import env, step
|
|
@@ -14,7 +15,7 @@ from proj_flow.project import cplusplus
|
|
|
14
15
|
|
|
15
16
|
from ._conan import conan_api
|
|
16
17
|
|
|
17
|
-
CONAN_DIR = "build/conan"
|
|
18
|
+
CONAN_DIR = Path("build/conan")
|
|
18
19
|
CONAN_PROFILE = "_profile-compiler"
|
|
19
20
|
CONAN_PROFILE_GEN = "_profile-build_type"
|
|
20
21
|
|
|
@@ -34,13 +35,13 @@ class ConanConfig:
|
|
|
34
35
|
def is_active(self, config: env.Config, rt: env.Runtime) -> int:
|
|
35
36
|
return os.path.isfile("conanfile.txt") or os.path.isfile("conanfile.py")
|
|
36
37
|
|
|
37
|
-
def directories_to_remove(self, _: env.Config) -> List[
|
|
38
|
+
def directories_to_remove(self, _: env.Config) -> List[Path]:
|
|
38
39
|
return [CONAN_DIR]
|
|
39
40
|
|
|
40
41
|
def run(self, config: env.Config, rt: env.Runtime) -> int:
|
|
41
42
|
api = conan_api()
|
|
42
43
|
|
|
43
|
-
profile_gen = f"{CONAN_DIR}/{CONAN_PROFILE_GEN}-{config.preset}"
|
|
44
|
+
profile_gen = f"{CONAN_DIR.as_posix()}/{CONAN_PROFILE_GEN}-{config.preset}"
|
|
44
45
|
if not rt.dry_run:
|
|
45
46
|
os.makedirs(CONAN_DIR, exist_ok=True)
|
|
46
47
|
with open(profile_gen, "w", encoding="UTF-8") as profile:
|
|
@@ -60,7 +61,8 @@ class ConanConfig:
|
|
|
60
61
|
]:
|
|
61
62
|
print(setting, file=profile)
|
|
62
63
|
|
|
63
|
-
|
|
64
|
+
conan_dir = CONAN_DIR.as_posix()
|
|
65
|
+
if api.config(rt, conan_dir, f"./{conan_dir}/{CONAN_PROFILE}", profile_gen):
|
|
64
66
|
return 1
|
|
65
67
|
if not rt.dry_run and os.path.exists("CMakeUserPresets.json"):
|
|
66
68
|
os.remove("CMakeUserPresets.json")
|
|
@@ -30,14 +30,14 @@ class RTDocs:
|
|
|
30
30
|
return ["python -m PyYAML"]
|
|
31
31
|
|
|
32
32
|
def is_active(self, config: env.Config, rt: env.Runtime) -> bool:
|
|
33
|
-
return
|
|
33
|
+
return (rt.root / ".readthedocs.yaml").is_file()
|
|
34
34
|
|
|
35
35
|
def run(self, config: env.Config, rt: env.Runtime) -> int:
|
|
36
36
|
import venv
|
|
37
37
|
|
|
38
38
|
import yaml
|
|
39
39
|
|
|
40
|
-
with open(
|
|
40
|
+
with open(rt.root / ".readthedocs.yaml") as rtd_yaml:
|
|
41
41
|
data = yaml.load(rtd_yaml, Loader=yaml.Loader)
|
|
42
42
|
|
|
43
43
|
formats = ["html"]
|
|
@@ -22,7 +22,7 @@ class Install:
|
|
|
22
22
|
return ["python -m pip"]
|
|
23
23
|
|
|
24
24
|
def run(self, config: env.Config, rt: env.Runtime) -> int:
|
|
25
|
-
return rt.cmd("python", "-m", "pip", "install", rt.root)
|
|
25
|
+
return rt.cmd("python", "-m", "pip", "install", rt.root.as_posix())
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
@step.register
|
|
@@ -48,8 +48,9 @@ class CheckTwine:
|
|
|
48
48
|
return ["twine"]
|
|
49
49
|
|
|
50
50
|
def run(self, config: env.Config, rt: env.Runtime) -> int:
|
|
51
|
-
filenames = []
|
|
52
|
-
|
|
51
|
+
filenames: list[str] = []
|
|
52
|
+
root = rt.root / "dist"
|
|
53
|
+
for root, dirnames, filenames in root.walk():
|
|
53
54
|
dirnames[:] = []
|
|
54
55
|
|
|
55
56
|
_, project = release.project_suites.find(lambda suite: suite.get_project(rt))
|
|
@@ -67,5 +68,5 @@ class CheckTwine:
|
|
|
67
68
|
return 0
|
|
68
69
|
|
|
69
70
|
return rt.cmd(
|
|
70
|
-
"twine", "check", *(
|
|
71
|
+
"twine", "check", *((root / filename).as_posix() for filename in filenames)
|
|
71
72
|
)
|