cfengine 0.19.0__tar.gz → 0.20.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 (176) hide show
  1. cfengine-0.20.0/.github/renovate-config.js +10 -0
  2. {cfengine-0.19.0 → cfengine-0.20.0}/.github/workflows/lint-policy-in-other-repos.yml +6 -6
  3. {cfengine-0.19.0 → cfengine-0.20.0}/.github/workflows/make-check.yml +2 -2
  4. {cfengine-0.19.0 → cfengine-0.20.0}/.github/workflows/pypi-publish.yml +6 -6
  5. cfengine-0.20.0/.github/workflows/renovate.yml +18 -0
  6. {cfengine-0.19.0 → cfengine-0.20.0}/.github/workflows/stale.yml +1 -1
  7. {cfengine-0.19.0 → cfengine-0.20.0}/.github/workflows/update-syntax-description.yml +3 -3
  8. {cfengine-0.19.0 → cfengine-0.20.0}/PKG-INFO +1 -1
  9. cfengine-0.20.0/renovate.json +5 -0
  10. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine.egg-info/PKG-INFO +1 -1
  11. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine.egg-info/SOURCES.txt +4 -1
  12. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine.egg-info/scm_file_list.json +140 -137
  13. cfengine-0.20.0/src/cfengine.egg-info/scm_version.json +8 -0
  14. cfengine-0.20.0/src/cfengine_cli/cfengine_wrapper/arg_parse.py +261 -0
  15. cfengine-0.20.0/src/cfengine_cli/cfengine_wrapper/cfengine_commands.py +232 -0
  16. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/cfengine_wrapper/cfengine_objects.py +4 -7
  17. cfengine-0.20.0/src/cfengine_cli/cfengine_wrapper/cfengine_utils.py +270 -0
  18. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/main.py +98 -105
  19. cfengine-0.19.0/.github/dependabot.yml +0 -20
  20. cfengine-0.19.0/src/cfengine.egg-info/scm_version.json +0 -8
  21. cfengine-0.19.0/src/cfengine_cli/cfengine_wrapper/cfengine_commands.py +0 -44
  22. cfengine-0.19.0/src/cfengine_cli/cfengine_wrapper/cfengine_utils.py +0 -191
  23. {cfengine-0.19.0 → cfengine-0.20.0}/.gitignore +0 -0
  24. {cfengine-0.19.0 → cfengine-0.20.0}/.python-version +0 -0
  25. {cfengine-0.19.0 → cfengine-0.20.0}/CLAUDE.md +0 -0
  26. {cfengine-0.19.0 → cfengine-0.20.0}/HACKING.md +0 -0
  27. {cfengine-0.19.0 → cfengine-0.20.0}/LICENSE +0 -0
  28. {cfengine-0.19.0 → cfengine-0.20.0}/Makefile +0 -0
  29. {cfengine-0.19.0 → cfengine-0.20.0}/README.md +0 -0
  30. {cfengine-0.19.0 → cfengine-0.20.0}/ci/01-install.sh +0 -0
  31. {cfengine-0.19.0 → cfengine-0.20.0}/ci/02-safe-tests.sh +0 -0
  32. {cfengine-0.19.0 → cfengine-0.20.0}/ci/03-unsafe-tests.sh +0 -0
  33. {cfengine-0.19.0 → cfengine-0.20.0}/pyproject.toml +0 -0
  34. {cfengine-0.19.0 → cfengine-0.20.0}/setup.cfg +0 -0
  35. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine.egg-info/dependency_links.txt +0 -0
  36. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine.egg-info/entry_points.txt +0 -0
  37. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine.egg-info/requires.txt +0 -0
  38. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine.egg-info/top_level.txt +0 -0
  39. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/__init__.py +0 -0
  40. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/__main__.py +0 -0
  41. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/cfengine_wrapper/__init__.py +0 -0
  42. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/changelog.py +0 -0
  43. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/commands.py +0 -0
  44. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/deptool-README.md +0 -0
  45. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/deptool.py +0 -0
  46. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/dev.py +0 -0
  47. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/docs.py +0 -0
  48. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/format.py +0 -0
  49. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/lint.py +0 -0
  50. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/lint_csv.py +0 -0
  51. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/lint_yml.py +0 -0
  52. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/masterfiles/__init__.py +0 -0
  53. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/masterfiles/analyze.py +0 -0
  54. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/masterfiles/check_download_matches_git.py +0 -0
  55. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/masterfiles/download.py +0 -0
  56. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/masterfiles/generate_git_tags.py +0 -0
  57. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/masterfiles/generate_release_information.py +0 -0
  58. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/masterfiles/generate_vcf_download.py +0 -0
  59. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/masterfiles/generate_vcf_git_checkout.py +0 -0
  60. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/paths.py +0 -0
  61. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/profile.py +0 -0
  62. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/shell.py +0 -0
  63. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/syntax-description.json +0 -0
  64. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/syntax_tree.py +0 -0
  65. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/up.py +0 -0
  66. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/utils.py +0 -0
  67. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/validate.py +0 -0
  68. {cfengine-0.19.0 → cfengine-0.20.0}/src/cfengine_cli/version.py +0 -0
  69. {cfengine-0.19.0 → cfengine-0.20.0}/tests/README.md +0 -0
  70. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/001_hello_world.expected.cf +0 -0
  71. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/001_hello_world.input.cf +0 -0
  72. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/002_basics.expected.cf +0 -0
  73. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/002_basics.input.cf +0 -0
  74. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/003_wrapping.expected.cf +0 -0
  75. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/003_wrapping.input.cf +0 -0
  76. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/004_comments.expected.cf +0 -0
  77. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/004_comments.input.cf +0 -0
  78. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/005_bundle_comments.expected.cf +0 -0
  79. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/005_bundle_comments.input.cf +0 -0
  80. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/006_remove_empty_comments.expected.cf +0 -0
  81. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/006_remove_empty_comments.input.cf +0 -0
  82. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/007_class_guarded_empty_lines.expected.cf +0 -0
  83. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/007_class_guarded_empty_lines.input.cf +0 -0
  84. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/008_long_string.expected.cf +0 -0
  85. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/008_long_string.input.cf +0 -0
  86. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/009_single_line.expected.cf +0 -0
  87. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/009_single_line.input.cf +0 -0
  88. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/010_stakeholder.expected.cf +0 -0
  89. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/010_stakeholder.input.cf +0 -0
  90. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/011_macros.expected.cf +0 -0
  91. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/011_macros.input.cf +0 -0
  92. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/011_promises.expected.cf +0 -0
  93. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/011_promises.input.cf +0 -0
  94. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/012_sameline_comments.expected.cf +0 -0
  95. {cfengine-0.19.0 → cfengine-0.20.0}/tests/format/012_sameline_comments.input.cf +0 -0
  96. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/001_hello_world.cf +0 -0
  97. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/002_deprecations.expected.txt +0 -0
  98. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/002_deprecations.x.cf +0 -0
  99. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/003_name_lowercase.cf +0 -0
  100. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/003_name_lowercase.expected.txt +0 -0
  101. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/003_name_lowercase.x.cf +0 -0
  102. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/004_block_type.cf +0 -0
  103. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/004_block_type.expected.txt +0 -0
  104. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/004_block_type.x.cf +0 -0
  105. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/005_syntax_error.cf +0 -0
  106. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/005_syntax_error.expected.txt +0 -0
  107. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/005_syntax_error.x.cf +0 -0
  108. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/006_empty_file.expected.txt +0 -0
  109. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/006_empty_file.x.cf +0 -0
  110. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/007_namespace.cf +0 -0
  111. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/007_namespace.expected.txt +0 -0
  112. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/007_namespace.x.cf +0 -0
  113. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/008_bundle_shadows_function.cf +0 -0
  114. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/008_bundle_shadows_function.expected.txt +0 -0
  115. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/008_bundle_shadows_function.x.cf +0 -0
  116. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/009_unknown_function_inside_vars.cf +0 -0
  117. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/009_unknown_function_inside_vars.expected.txt +0 -0
  118. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/009_unknown_function_inside_vars.x.cf +0 -0
  119. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/010_mutually_exclusive_types_vars.cf +0 -0
  120. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/010_mutually_exclusive_types_vars.expected.txt +0 -0
  121. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/010_mutually_exclusive_types_vars.x.cf +0 -0
  122. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/011_invalid_attributes.expected.txt +0 -0
  123. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/011_invalid_attributes.x.cf +0 -0
  124. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/012_function_call_arg_count.cf +0 -0
  125. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/012_function_call_arg_count.expected.txt +0 -0
  126. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/012_function_call_arg_count.x.cf +0 -0
  127. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/013_num_args_body.expected.txt +0 -0
  128. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/013_num_args_body.x.cf +0 -0
  129. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/013_num_args_bundle.expected.txt +0 -0
  130. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/013_num_args_bundle.x.cf +0 -0
  131. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/013_num_args_bundle_body.cf +0 -0
  132. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/014_variadic_func_arg_count.cf +0 -0
  133. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/014_variadic_func_arg_count.expected.txt +0 -0
  134. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/014_variadic_func_arg_count.x.cf +0 -0
  135. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/015_macro_multi_def_bundle.cf +0 -0
  136. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/015_macro_multi_def_bundle.expected.txt +0 -0
  137. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/015_macro_multi_def_bundle.x.cf +0 -0
  138. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/016_half_promises.cf +0 -0
  139. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/016_half_promises.expected.txt +0 -0
  140. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/016_half_promises.x.cf +0 -0
  141. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/017_implies_body.cf +0 -0
  142. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/017_implies_body.expected.txt +0 -0
  143. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/017_implies_body.x.cf +0 -0
  144. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/018_nested_calls.cf +0 -0
  145. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/018_nested_calls.expected.txt +0 -0
  146. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/018_nested_calls.x.cf +0 -0
  147. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/019_bundle_name_expansion.cf +0 -0
  148. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/020_missing_braces.expected.txt +0 -0
  149. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/020_missing_braces.x.cf +0 -0
  150. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/020_missing_semicolon.expected.txt +0 -0
  151. {cfengine-0.19.0 → cfengine-0.20.0}/tests/lint/020_missing_semicolon.x.cf +0 -0
  152. {cfengine-0.19.0 → cfengine-0.20.0}/tests/run-format-tests.sh +0 -0
  153. {cfengine-0.19.0 → cfengine-0.20.0}/tests/run-lint-tests.sh +0 -0
  154. {cfengine-0.19.0 → cfengine-0.20.0}/tests/run-shell-tests.sh +0 -0
  155. {cfengine-0.19.0 → cfengine-0.20.0}/tests/run-up-validate-tests.sh +0 -0
  156. {cfengine-0.19.0 → cfengine-0.20.0}/tests/shell/001-help.sh +0 -0
  157. {cfengine-0.19.0 → cfengine-0.20.0}/tests/shell/002-version.sh +0 -0
  158. {cfengine-0.19.0 → cfengine-0.20.0}/tests/shell/003-format.sh +0 -0
  159. {cfengine-0.19.0 → cfengine-0.20.0}/tests/shell/004-format-check.sh +0 -0
  160. {cfengine-0.19.0 → cfengine-0.20.0}/tests/shell/005-lint.sh +0 -0
  161. {cfengine-0.19.0 → cfengine-0.20.0}/tests/unit/__init__.py +0 -0
  162. {cfengine-0.19.0 → cfengine-0.20.0}/tests/unit/test_changelog.py +0 -0
  163. {cfengine-0.19.0 → cfengine-0.20.0}/tests/unit/test_deps.py +0 -0
  164. {cfengine-0.19.0 → cfengine-0.20.0}/tests/unit/test_format.py +0 -0
  165. {cfengine-0.19.0 → cfengine-0.20.0}/tests/unit/test_lint_csv.py +0 -0
  166. {cfengine-0.19.0 → cfengine-0.20.0}/tests/unit/test_lint_yml.py +0 -0
  167. {cfengine-0.19.0 → cfengine-0.20.0}/tests/unit/test_paths.py +0 -0
  168. {cfengine-0.19.0 → cfengine-0.20.0}/tests/unit/test_utils.py +0 -0
  169. {cfengine-0.19.0 → cfengine-0.20.0}/tests/unit/test_version.py +0 -0
  170. {cfengine-0.19.0 → cfengine-0.20.0}/tests/up-validate/001_complex_config.yaml +0 -0
  171. {cfengine-0.19.0 → cfengine-0.20.0}/tests/up-validate/002_version.x.yaml +0 -0
  172. {cfengine-0.19.0 → cfengine-0.20.0}/tests/up-validate/003_box.x.yaml +0 -0
  173. {cfengine-0.19.0 → cfengine-0.20.0}/tests/up-validate/004_count.x.yaml +0 -0
  174. {cfengine-0.19.0 → cfengine-0.20.0}/tests/up-validate/mocks/cloud_config.json +0 -0
  175. {cfengine-0.19.0 → cfengine-0.20.0}/tests/up-validate/mocks/vagrant +0 -0
  176. {cfengine-0.19.0 → cfengine-0.20.0}/uv.lock +0 -0
@@ -0,0 +1,10 @@
1
+ // Global (self-hosted) Renovate configuration, used by the
2
+ // .github/workflows/renovate.yml GitHub Action.
3
+ // Repository-level configuration is in renovate.json.
4
+ module.exports = {
5
+ platform: "github",
6
+ onboarding: false,
7
+ requireConfig: "optional",
8
+ branchPrefix: "renovate/",
9
+ repositories: ["cfengine/cfengine-cli"],
10
+ };
@@ -16,28 +16,28 @@ jobs:
16
16
  runs-on: ubuntu-24.04
17
17
  steps:
18
18
  - name: Checkout cfengine-cli
19
- uses: actions/checkout@v4
19
+ uses: actions/checkout@v7
20
20
  with:
21
21
  path: cfengine-cli
22
22
  - name: Checkout masterfiles
23
- uses: actions/checkout@v4
23
+ uses: actions/checkout@v7
24
24
  with:
25
25
  repository: cfengine/masterfiles
26
26
  path: masterfiles
27
27
  - name: Checkout documentation
28
- uses: actions/checkout@v4
28
+ uses: actions/checkout@v7
29
29
  with:
30
30
  repository: cfengine/documentation
31
31
  path: documentation
32
32
  - name: Checkout modules
33
- uses: actions/checkout@v4
33
+ uses: actions/checkout@v7
34
34
  with:
35
35
  repository: cfengine/modules
36
36
  path: modules
37
37
  - name: Set up Python
38
- uses: actions/setup-python@v5
38
+ uses: actions/setup-python@v7
39
39
  with:
40
- python-version: "3.13"
40
+ python-version: "3.14"
41
41
  - name: Install dependencies
42
42
  working-directory: cfengine-cli
43
43
  run: |
@@ -25,9 +25,9 @@ jobs:
25
25
  matrix:
26
26
  python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
27
27
  steps:
28
- - uses: actions/checkout@v4
28
+ - uses: actions/checkout@v7
29
29
  - name: Set up Python ${{ matrix.python-version }}
30
- uses: actions/setup-python@v5
30
+ uses: actions/setup-python@v7
31
31
  with:
32
32
  python-version: ${{ matrix.python-version }}
33
33
  - name: Install dependencies
@@ -9,8 +9,8 @@ jobs:
9
9
  permissions:
10
10
  contents: read
11
11
  steps:
12
- - uses: actions/checkout@v4
13
- - uses: actions/setup-python@v5
12
+ - uses: actions/checkout@v7
13
+ - uses: actions/setup-python@v7
14
14
  with:
15
15
  python-version: "3.x"
16
16
  - name: Build release distributions
@@ -21,7 +21,7 @@ jobs:
21
21
  uv lock --check
22
22
  uv build
23
23
  - name: Upload release-dists as artifact
24
- uses: actions/upload-artifact@v4
24
+ uses: actions/upload-artifact@v7
25
25
  with:
26
26
  name: release-dists
27
27
  path: dist/
@@ -30,7 +30,7 @@ jobs:
30
30
  permissions:
31
31
  contents: read
32
32
  steps:
33
- - uses: actions/checkout@v4
33
+ - uses: actions/checkout@v7
34
34
  - run: |
35
35
  git fetch --all --tags
36
36
  pip install uv
@@ -46,9 +46,9 @@ jobs:
46
46
  id-token: write
47
47
  steps:
48
48
  - name: Retrieve release distributions
49
- uses: actions/download-artifact@v4
49
+ uses: actions/download-artifact@v8
50
50
  with:
51
51
  name: release-dists
52
52
  path: dist/
53
53
  - name: Publish release distributions to PyPI
54
- uses: pypa/gh-action-pypi-publish@v1.13.0
54
+ uses: pypa/gh-action-pypi-publish@v1.14.1
@@ -0,0 +1,18 @@
1
+ name: Renovate
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "0 6 * * *" # Run every day at 6am UTC
6
+ workflow_dispatch: # Enables manual trigger
7
+
8
+ jobs:
9
+ renovate:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Checkout
13
+ uses: actions/checkout@v7.0.1
14
+ - name: Self-hosted Renovate
15
+ uses: renovatebot/github-action@v46.1.20
16
+ with:
17
+ configurationFile: .github/renovate-config.js
18
+ token: ${{ secrets.RENOVATE_TOKEN }}
@@ -15,7 +15,7 @@ jobs:
15
15
  issues: read
16
16
 
17
17
  steps:
18
- - uses: actions/stale@v5
18
+ - uses: actions/stale@v10
19
19
  with:
20
20
  repo-token: ${{ secrets.GITHUB_TOKEN }}
21
21
  stale-pr-message: "Marking this PR as stale due to inactivity; it will be closed in 7 days."
@@ -21,13 +21,13 @@ jobs:
21
21
  pull-requests: write
22
22
  steps:
23
23
  - name: Checks-out repository
24
- uses: actions/checkout@v4
24
+ uses: actions/checkout@v7
25
25
  with:
26
26
  ref: "main"
27
27
  - name: Set up Python 3.12
28
- uses: actions/setup-python@v5
28
+ uses: actions/setup-python@v7
29
29
  with:
30
- python-version: "3.12"
30
+ python-version: "3.14"
31
31
  - name: Install dependencies
32
32
  run: |
33
33
  python -m pip install --upgrade pip
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cfengine
3
- Version: 0.19.0
3
+ Version: 0.20.0
4
4
  Summary: Human-oriented CLI for interacting with CFEngine policy language, projects, and other CFEngine tools
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": ["config:recommended"],
4
+ "reviewers": ["larsewi", "olehermanse"]
5
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cfengine
3
- Version: 0.19.0
3
+ Version: 0.20.0
4
4
  Summary: Human-oriented CLI for interacting with CFEngine policy language, projects, and other CFEngine tools
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -6,11 +6,13 @@ LICENSE
6
6
  Makefile
7
7
  README.md
8
8
  pyproject.toml
9
+ renovate.json
9
10
  uv.lock
10
- .github/dependabot.yml
11
+ .github/renovate-config.js
11
12
  .github/workflows/lint-policy-in-other-repos.yml
12
13
  .github/workflows/make-check.yml
13
14
  .github/workflows/pypi-publish.yml
15
+ .github/workflows/renovate.yml
14
16
  .github/workflows/stale.yml
15
17
  .github/workflows/update-syntax-description.yml
16
18
  ci/01-install.sh
@@ -47,6 +49,7 @@ src/cfengine_cli/utils.py
47
49
  src/cfengine_cli/validate.py
48
50
  src/cfengine_cli/version.py
49
51
  src/cfengine_cli/cfengine_wrapper/__init__.py
52
+ src/cfengine_cli/cfengine_wrapper/arg_parse.py
50
53
  src/cfengine_cli/cfengine_wrapper/cfengine_commands.py
51
54
  src/cfengine_cli/cfengine_wrapper/cfengine_objects.py
52
55
  src/cfengine_cli/cfengine_wrapper/cfengine_utils.py
@@ -1,163 +1,166 @@
1
1
  {
2
2
  "files": [
3
- "README.md",
4
- "uv.lock",
3
+ "HACKING.md",
5
4
  "Makefile",
6
5
  ".python-version",
7
- "LICENSE",
8
6
  "pyproject.toml",
9
- "HACKING.md",
7
+ "renovate.json",
8
+ "LICENSE",
10
9
  "CLAUDE.md",
10
+ "README.md",
11
+ "uv.lock",
11
12
  ".gitignore",
12
- "src/cfengine_cli/changelog.py",
13
- "src/cfengine_cli/shell.py",
14
- "src/cfengine_cli/__init__.py",
15
- "src/cfengine_cli/version.py",
16
- "src/cfengine_cli/lint_yml.py",
17
- "src/cfengine_cli/profile.py",
18
- "src/cfengine_cli/deptool-README.md",
19
- "src/cfengine_cli/utils.py",
20
- "src/cfengine_cli/format.py",
21
- "src/cfengine_cli/syntax-description.json",
22
- "src/cfengine_cli/docs.py",
23
- "src/cfengine_cli/up.py",
24
- "src/cfengine_cli/lint_csv.py",
25
- "src/cfengine_cli/syntax_tree.py",
26
- "src/cfengine_cli/main.py",
27
- "src/cfengine_cli/deptool.py",
28
- "src/cfengine_cli/lint.py",
29
- "src/cfengine_cli/commands.py",
30
- "src/cfengine_cli/validate.py",
31
- "src/cfengine_cli/__main__.py",
32
- "src/cfengine_cli/paths.py",
33
- "src/cfengine_cli/dev.py",
34
- "src/cfengine_cli/cfengine_wrapper/cfengine_commands.py",
35
- "src/cfengine_cli/cfengine_wrapper/cfengine_objects.py",
36
- "src/cfengine_cli/cfengine_wrapper/cfengine_utils.py",
37
- "src/cfengine_cli/cfengine_wrapper/__init__.py",
38
- "src/cfengine_cli/masterfiles/check_download_matches_git.py",
39
- "src/cfengine_cli/masterfiles/generate_vcf_git_checkout.py",
40
- "src/cfengine_cli/masterfiles/__init__.py",
41
- "src/cfengine_cli/masterfiles/download.py",
42
- "src/cfengine_cli/masterfiles/analyze.py",
43
- "src/cfengine_cli/masterfiles/generate_release_information.py",
44
- "src/cfengine_cli/masterfiles/generate_vcf_download.py",
45
- "src/cfengine_cli/masterfiles/generate_git_tags.py",
46
- "ci/01-install.sh",
47
- "ci/02-safe-tests.sh",
48
- "ci/03-unsafe-tests.sh",
49
- "tests/README.md",
50
- "tests/run-shell-tests.sh",
51
- "tests/run-up-validate-tests.sh",
13
+ ".github/renovate-config.js",
14
+ ".github/workflows/renovate.yml",
15
+ ".github/workflows/pypi-publish.yml",
16
+ ".github/workflows/lint-policy-in-other-repos.yml",
17
+ ".github/workflows/update-syntax-description.yml",
18
+ ".github/workflows/make-check.yml",
19
+ ".github/workflows/stale.yml",
52
20
  "tests/run-lint-tests.sh",
21
+ "tests/run-up-validate-tests.sh",
53
22
  "tests/run-format-tests.sh",
54
- "tests/lint/015_macro_multi_def_bundle.cf",
55
- "tests/lint/010_mutually_exclusive_types_vars.cf",
56
- "tests/lint/020_missing_semicolon.x.cf",
57
- "tests/lint/010_mutually_exclusive_types_vars.x.cf",
58
- "tests/lint/013_num_args_body.expected.txt",
59
- "tests/lint/007_namespace.x.cf",
60
- "tests/lint/018_nested_calls.expected.txt",
61
- "tests/lint/010_mutually_exclusive_types_vars.expected.txt",
62
- "tests/lint/016_half_promises.expected.txt",
23
+ "tests/run-shell-tests.sh",
24
+ "tests/README.md",
25
+ "tests/up-validate/002_version.x.yaml",
26
+ "tests/up-validate/001_complex_config.yaml",
27
+ "tests/up-validate/004_count.x.yaml",
28
+ "tests/up-validate/003_box.x.yaml",
29
+ "tests/up-validate/mocks/cloud_config.json",
30
+ "tests/up-validate/mocks/vagrant",
31
+ "tests/shell/002-version.sh",
32
+ "tests/shell/003-format.sh",
33
+ "tests/shell/005-lint.sh",
34
+ "tests/shell/004-format-check.sh",
35
+ "tests/shell/001-help.sh",
36
+ "tests/format/006_remove_empty_comments.input.cf",
37
+ "tests/format/006_remove_empty_comments.expected.cf",
38
+ "tests/format/008_long_string.expected.cf",
39
+ "tests/format/012_sameline_comments.expected.cf",
40
+ "tests/format/007_class_guarded_empty_lines.input.cf",
41
+ "tests/format/011_promises.expected.cf",
42
+ "tests/format/012_sameline_comments.input.cf",
43
+ "tests/format/011_macros.input.cf",
44
+ "tests/format/008_long_string.input.cf",
45
+ "tests/format/005_bundle_comments.input.cf",
46
+ "tests/format/002_basics.expected.cf",
47
+ "tests/format/009_single_line.expected.cf",
48
+ "tests/format/007_class_guarded_empty_lines.expected.cf",
49
+ "tests/format/001_hello_world.expected.cf",
50
+ "tests/format/001_hello_world.input.cf",
51
+ "tests/format/003_wrapping.input.cf",
52
+ "tests/format/010_stakeholder.expected.cf",
53
+ "tests/format/011_macros.expected.cf",
54
+ "tests/format/004_comments.expected.cf",
55
+ "tests/format/004_comments.input.cf",
56
+ "tests/format/010_stakeholder.input.cf",
57
+ "tests/format/009_single_line.input.cf",
58
+ "tests/format/002_basics.input.cf",
59
+ "tests/format/003_wrapping.expected.cf",
60
+ "tests/format/011_promises.input.cf",
61
+ "tests/format/005_bundle_comments.expected.cf",
63
62
  "tests/lint/002_deprecations.x.cf",
63
+ "tests/lint/018_nested_calls.cf",
64
+ "tests/lint/012_function_call_arg_count.x.cf",
65
+ "tests/lint/004_block_type.expected.txt",
64
66
  "tests/lint/009_unknown_function_inside_vars.cf",
65
- "tests/lint/008_bundle_shadows_function.expected.txt",
66
- "tests/lint/013_num_args_bundle.x.cf",
67
- "tests/lint/020_missing_semicolon.expected.txt",
68
- "tests/lint/017_implies_body.cf",
69
- "tests/lint/020_missing_braces.expected.txt",
67
+ "tests/lint/010_mutually_exclusive_types_vars.x.cf",
68
+ "tests/lint/014_variadic_func_arg_count.cf",
69
+ "tests/lint/013_num_args_bundle.expected.txt",
70
70
  "tests/lint/017_implies_body.expected.txt",
71
- "tests/lint/008_bundle_shadows_function.cf",
72
- "tests/lint/003_name_lowercase.x.cf",
73
- "tests/lint/009_unknown_function_inside_vars.x.cf",
74
- "tests/lint/004_block_type.x.cf",
71
+ "tests/lint/003_name_lowercase.cf",
72
+ "tests/lint/018_nested_calls.x.cf",
73
+ "tests/lint/013_num_args_bundle.x.cf",
75
74
  "tests/lint/011_invalid_attributes.expected.txt",
76
- "tests/lint/005_syntax_error.cf",
77
- "tests/lint/013_num_args_bundle_body.cf",
78
- "tests/lint/003_name_lowercase.expected.txt",
75
+ "tests/lint/003_name_lowercase.x.cf",
76
+ "tests/lint/007_namespace.expected.txt",
77
+ "tests/lint/010_mutually_exclusive_types_vars.cf",
78
+ "tests/lint/020_missing_semicolon.x.cf",
79
+ "tests/lint/014_variadic_func_arg_count.expected.txt",
80
+ "tests/lint/018_nested_calls.expected.txt",
81
+ "tests/lint/015_macro_multi_def_bundle.cf",
82
+ "tests/lint/020_missing_braces.expected.txt",
83
+ "tests/lint/008_bundle_shadows_function.x.cf",
79
84
  "tests/lint/002_deprecations.expected.txt",
80
- "tests/lint/013_num_args_bundle.expected.txt",
81
- "tests/lint/012_function_call_arg_count.expected.txt",
82
- "tests/lint/004_block_type.cf",
85
+ "tests/lint/013_num_args_bundle_body.cf",
86
+ "tests/lint/012_function_call_arg_count.cf",
87
+ "tests/lint/015_macro_multi_def_bundle.x.cf",
88
+ "tests/lint/006_empty_file.x.cf",
83
89
  "tests/lint/005_syntax_error.x.cf",
90
+ "tests/lint/020_missing_braces.x.cf",
84
91
  "tests/lint/015_macro_multi_def_bundle.expected.txt",
85
- "tests/lint/006_empty_file.expected.txt",
92
+ "tests/lint/007_namespace.x.cf",
93
+ "tests/lint/017_implies_body.cf",
94
+ "tests/lint/020_missing_semicolon.expected.txt",
95
+ "tests/lint/007_namespace.cf",
86
96
  "tests/lint/014_variadic_func_arg_count.x.cf",
87
- "tests/lint/004_block_type.expected.txt",
88
- "tests/lint/016_half_promises.cf",
89
- "tests/lint/018_nested_calls.x.cf",
97
+ "tests/lint/009_unknown_function_inside_vars.x.cf",
98
+ "tests/lint/008_bundle_shadows_function.expected.txt",
99
+ "tests/lint/012_function_call_arg_count.expected.txt",
100
+ "tests/lint/005_syntax_error.cf",
101
+ "tests/lint/004_block_type.cf",
102
+ "tests/lint/008_bundle_shadows_function.cf",
103
+ "tests/lint/003_name_lowercase.expected.txt",
104
+ "tests/lint/013_num_args_body.expected.txt",
105
+ "tests/lint/009_unknown_function_inside_vars.expected.txt",
106
+ "tests/lint/016_half_promises.x.cf",
107
+ "tests/lint/004_block_type.x.cf",
108
+ "tests/lint/001_hello_world.cf",
109
+ "tests/lint/005_syntax_error.expected.txt",
110
+ "tests/lint/006_empty_file.expected.txt",
111
+ "tests/lint/010_mutually_exclusive_types_vars.expected.txt",
90
112
  "tests/lint/011_invalid_attributes.x.cf",
91
- "tests/lint/018_nested_calls.cf",
92
- "tests/lint/014_variadic_func_arg_count.cf",
93
- "tests/lint/020_missing_braces.x.cf",
113
+ "tests/lint/013_num_args_body.x.cf",
94
114
  "tests/lint/017_implies_body.x.cf",
95
- "tests/lint/012_function_call_arg_count.x.cf",
96
- "tests/lint/007_namespace.expected.txt",
97
- "tests/lint/015_macro_multi_def_bundle.x.cf",
98
115
  "tests/lint/019_bundle_name_expansion.cf",
99
- "tests/lint/001_hello_world.cf",
100
- "tests/lint/009_unknown_function_inside_vars.expected.txt",
101
- "tests/lint/007_namespace.cf",
102
- "tests/lint/014_variadic_func_arg_count.expected.txt",
103
- "tests/lint/012_function_call_arg_count.cf",
104
- "tests/lint/008_bundle_shadows_function.x.cf",
105
- "tests/lint/013_num_args_body.x.cf",
106
- "tests/lint/003_name_lowercase.cf",
107
- "tests/lint/005_syntax_error.expected.txt",
108
- "tests/lint/006_empty_file.x.cf",
109
- "tests/lint/016_half_promises.x.cf",
110
- "tests/shell/001-help.sh",
111
- "tests/shell/002-version.sh",
112
- "tests/shell/004-format-check.sh",
113
- "tests/shell/005-lint.sh",
114
- "tests/shell/003-format.sh",
115
- "tests/up-validate/002_version.x.yaml",
116
- "tests/up-validate/004_count.x.yaml",
117
- "tests/up-validate/001_complex_config.yaml",
118
- "tests/up-validate/003_box.x.yaml",
119
- "tests/up-validate/mocks/vagrant",
120
- "tests/up-validate/mocks/cloud_config.json",
121
- "tests/format/003_wrapping.input.cf",
122
- "tests/format/011_macros.expected.cf",
123
- "tests/format/009_single_line.input.cf",
124
- "tests/format/009_single_line.expected.cf",
125
- "tests/format/010_stakeholder.input.cf",
126
- "tests/format/007_class_guarded_empty_lines.expected.cf",
127
- "tests/format/004_comments.expected.cf",
128
- "tests/format/001_hello_world.input.cf",
129
- "tests/format/011_promises.expected.cf",
130
- "tests/format/006_remove_empty_comments.input.cf",
131
- "tests/format/005_bundle_comments.expected.cf",
132
- "tests/format/002_basics.expected.cf",
133
- "tests/format/005_bundle_comments.input.cf",
134
- "tests/format/006_remove_empty_comments.expected.cf",
135
- "tests/format/007_class_guarded_empty_lines.input.cf",
136
- "tests/format/003_wrapping.expected.cf",
137
- "tests/format/010_stakeholder.expected.cf",
138
- "tests/format/004_comments.input.cf",
139
- "tests/format/001_hello_world.expected.cf",
140
- "tests/format/011_promises.input.cf",
141
- "tests/format/012_sameline_comments.expected.cf",
142
- "tests/format/008_long_string.expected.cf",
143
- "tests/format/008_long_string.input.cf",
144
- "tests/format/002_basics.input.cf",
145
- "tests/format/012_sameline_comments.input.cf",
146
- "tests/format/011_macros.input.cf",
116
+ "tests/lint/016_half_promises.cf",
117
+ "tests/lint/016_half_promises.expected.txt",
118
+ "tests/unit/test_lint_csv.py",
119
+ "tests/unit/test_changelog.py",
120
+ "tests/unit/test_lint_yml.py",
147
121
  "tests/unit/__init__.py",
148
122
  "tests/unit/test_version.py",
149
- "tests/unit/test_deps.py",
150
- "tests/unit/test_utils.py",
151
123
  "tests/unit/test_format.py",
152
- "tests/unit/test_changelog.py",
153
- "tests/unit/test_lint_csv.py",
154
- "tests/unit/test_lint_yml.py",
124
+ "tests/unit/test_deps.py",
155
125
  "tests/unit/test_paths.py",
156
- ".github/dependabot.yml",
157
- ".github/workflows/lint-policy-in-other-repos.yml",
158
- ".github/workflows/pypi-publish.yml",
159
- ".github/workflows/make-check.yml",
160
- ".github/workflows/stale.yml",
161
- ".github/workflows/update-syntax-description.yml"
126
+ "tests/unit/test_utils.py",
127
+ "ci/03-unsafe-tests.sh",
128
+ "ci/02-safe-tests.sh",
129
+ "ci/01-install.sh",
130
+ "src/cfengine_cli/main.py",
131
+ "src/cfengine_cli/syntax_tree.py",
132
+ "src/cfengine_cli/dev.py",
133
+ "src/cfengine_cli/docs.py",
134
+ "src/cfengine_cli/lint_csv.py",
135
+ "src/cfengine_cli/profile.py",
136
+ "src/cfengine_cli/deptool-README.md",
137
+ "src/cfengine_cli/lint.py",
138
+ "src/cfengine_cli/__init__.py",
139
+ "src/cfengine_cli/shell.py",
140
+ "src/cfengine_cli/deptool.py",
141
+ "src/cfengine_cli/changelog.py",
142
+ "src/cfengine_cli/validate.py",
143
+ "src/cfengine_cli/commands.py",
144
+ "src/cfengine_cli/up.py",
145
+ "src/cfengine_cli/version.py",
146
+ "src/cfengine_cli/__main__.py",
147
+ "src/cfengine_cli/syntax-description.json",
148
+ "src/cfengine_cli/lint_yml.py",
149
+ "src/cfengine_cli/format.py",
150
+ "src/cfengine_cli/paths.py",
151
+ "src/cfengine_cli/utils.py",
152
+ "src/cfengine_cli/masterfiles/generate_git_tags.py",
153
+ "src/cfengine_cli/masterfiles/generate_release_information.py",
154
+ "src/cfengine_cli/masterfiles/download.py",
155
+ "src/cfengine_cli/masterfiles/__init__.py",
156
+ "src/cfengine_cli/masterfiles/generate_vcf_git_checkout.py",
157
+ "src/cfengine_cli/masterfiles/generate_vcf_download.py",
158
+ "src/cfengine_cli/masterfiles/analyze.py",
159
+ "src/cfengine_cli/masterfiles/check_download_matches_git.py",
160
+ "src/cfengine_cli/cfengine_wrapper/cfengine_utils.py",
161
+ "src/cfengine_cli/cfengine_wrapper/__init__.py",
162
+ "src/cfengine_cli/cfengine_wrapper/arg_parse.py",
163
+ "src/cfengine_cli/cfengine_wrapper/cfengine_objects.py",
164
+ "src/cfengine_cli/cfengine_wrapper/cfengine_commands.py"
162
165
  ]
163
166
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.20.0",
3
+ "distance": 0,
4
+ "node": "g6eb511329016e82aac64dcd587f5714b8e86f79a",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-07-22"
8
+ }