cfengine 0.11.0__tar.gz → 0.11.2__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 (65) hide show
  1. {cfengine-0.11.0 → cfengine-0.11.2}/PKG-INFO +2 -2
  2. {cfengine-0.11.0 → cfengine-0.11.2}/pyproject.toml +1 -1
  3. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/PKG-INFO +2 -2
  4. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/requires.txt +1 -1
  5. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/commands.py +4 -40
  6. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/docs.py +4 -1
  7. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/lint.py +34 -0
  8. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/generate_git_tags.py +17 -12
  9. cfengine-0.11.2/uv.lock +474 -0
  10. cfengine-0.11.0/uv.lock +0 -452
  11. {cfengine-0.11.0 → cfengine-0.11.2}/.github/dependabot.yml +0 -0
  12. {cfengine-0.11.0 → cfengine-0.11.2}/.github/workflows/format.yml +0 -0
  13. {cfengine-0.11.0 → cfengine-0.11.2}/.github/workflows/lint.yml +0 -0
  14. {cfengine-0.11.0 → cfengine-0.11.2}/.github/workflows/pypi-publish.yml +0 -0
  15. {cfengine-0.11.0 → cfengine-0.11.2}/.github/workflows/test.yml +0 -0
  16. {cfengine-0.11.0 → cfengine-0.11.2}/.gitignore +0 -0
  17. {cfengine-0.11.0 → cfengine-0.11.2}/.python-version +0 -0
  18. {cfengine-0.11.0 → cfengine-0.11.2}/HACKING.md +0 -0
  19. {cfengine-0.11.0 → cfengine-0.11.2}/LICENSE +0 -0
  20. {cfengine-0.11.0 → cfengine-0.11.2}/README.md +0 -0
  21. {cfengine-0.11.0 → cfengine-0.11.2}/ci/01-install.sh +0 -0
  22. {cfengine-0.11.0 → cfengine-0.11.2}/ci/02-safe-tests.sh +0 -0
  23. {cfengine-0.11.0 → cfengine-0.11.2}/ci/03-unsafe-tests.sh +0 -0
  24. {cfengine-0.11.0 → cfengine-0.11.2}/setup.cfg +0 -0
  25. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/SOURCES.txt +0 -0
  26. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/dependency_links.txt +0 -0
  27. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/entry_points.txt +0 -0
  28. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/top_level.txt +0 -0
  29. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/__init__.py +0 -0
  30. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/__main__.py +0 -0
  31. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/deptool-README.md +0 -0
  32. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/deptool.py +0 -0
  33. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/dev.py +0 -0
  34. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/format.py +0 -0
  35. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/main.py +0 -0
  36. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/__init__.py +0 -0
  37. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/analyze.py +0 -0
  38. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/check_download_matches_git.py +0 -0
  39. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/download.py +0 -0
  40. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/generate_release_information.py +0 -0
  41. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/generate_vcf_download.py +0 -0
  42. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/generate_vcf_git_checkout.py +0 -0
  43. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/paths.py +0 -0
  44. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/profile.py +0 -0
  45. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/shell.py +0 -0
  46. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/utils.py +0 -0
  47. {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/version.py +0 -0
  48. {cfengine-0.11.0 → cfengine-0.11.2}/tests/__init__.py +0 -0
  49. {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/001_hello_world.expected.cf +0 -0
  50. {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/001_hello_world.input.cf +0 -0
  51. {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/002_basics.expected.cf +0 -0
  52. {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/002_basics.input.cf +0 -0
  53. {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/003_wrapping.expected.cf +0 -0
  54. {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/003_wrapping.input.cf +0 -0
  55. {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/004_comments.expected.cf +0 -0
  56. {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/004_comments.input.cf +0 -0
  57. {cfengine-0.11.0 → cfengine-0.11.2}/tests/run-format-tests.sh +0 -0
  58. {cfengine-0.11.0 → cfengine-0.11.2}/tests/run-shell-tests.sh +0 -0
  59. {cfengine-0.11.0 → cfengine-0.11.2}/tests/shell/001-help.sh +0 -0
  60. {cfengine-0.11.0 → cfengine-0.11.2}/tests/shell/002-version.sh +0 -0
  61. {cfengine-0.11.0 → cfengine-0.11.2}/tests/shell/003-format.sh +0 -0
  62. {cfengine-0.11.0 → cfengine-0.11.2}/tests/test_deps.py +0 -0
  63. {cfengine-0.11.0 → cfengine-0.11.2}/tests/test_paths.py +0 -0
  64. {cfengine-0.11.0 → cfengine-0.11.2}/tests/test_utils.py +0 -0
  65. {cfengine-0.11.0 → cfengine-0.11.2}/tests/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cfengine
3
- Version: 0.11.0
3
+ Version: 0.11.2
4
4
  Summary: Human-oriented CLI for interacting with CFEngine tools
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -696,7 +696,7 @@ Requires-Python: >=3.10
696
696
  Description-Content-Type: text/markdown
697
697
  Requires-Dist: cf-remote>=0.7.3
698
698
  Requires-Dist: cfbs>=5.5.0
699
- Requires-Dist: tree-sitter-cfengine>=1.0.12
699
+ Requires-Dist: tree-sitter-cfengine>=1.1.8
700
700
  Requires-Dist: tree-sitter>=0.25
701
701
  Requires-Dist: markdown-it-py>=3.0.0
702
702
 
@@ -12,7 +12,7 @@ requires-python = ">=3.10"
12
12
  dependencies = [
13
13
  "cf-remote>=0.7.3",
14
14
  "cfbs>=5.5.0",
15
- "tree-sitter-cfengine>=1.0.12",
15
+ "tree-sitter-cfengine>=1.1.8",
16
16
  "tree-sitter>=0.25",
17
17
  "markdown-it-py>=3.0.0",
18
18
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cfengine
3
- Version: 0.11.0
3
+ Version: 0.11.2
4
4
  Summary: Human-oriented CLI for interacting with CFEngine tools
5
5
  License: GNU GENERAL PUBLIC LICENSE
6
6
  Version 3, 29 June 2007
@@ -696,7 +696,7 @@ Requires-Python: >=3.10
696
696
  Description-Content-Type: text/markdown
697
697
  Requires-Dist: cf-remote>=0.7.3
698
698
  Requires-Dist: cfbs>=5.5.0
699
- Requires-Dist: tree-sitter-cfengine>=1.0.12
699
+ Requires-Dist: tree-sitter-cfengine>=1.1.8
700
700
  Requires-Dist: tree-sitter>=0.25
701
701
  Requires-Dist: markdown-it-py>=3.0.0
702
702
 
@@ -1,5 +1,5 @@
1
1
  cf-remote>=0.7.3
2
2
  cfbs>=5.5.0
3
- tree-sitter-cfengine>=1.0.12
3
+ tree-sitter-cfengine>=1.1.8
4
4
  tree-sitter>=0.25
5
5
  markdown-it-py>=3.0.0
@@ -1,11 +1,10 @@
1
1
  import sys
2
2
  import os
3
3
  import re
4
- import itertools
5
4
  import json
6
5
  from cfengine_cli.profile import profile_cfengine, generate_callstack
7
6
  from cfengine_cli.dev import dispatch_dev_subcommand
8
- from cfengine_cli.lint import lint_cfbs_json, lint_json, lint_policy_file
7
+ from cfengine_cli.lint import lint_single_arg, lint_folder
9
8
  from cfengine_cli.shell import user_command
10
9
  from cfengine_cli.paths import bin
11
10
  from cfengine_cli.version import cfengine_cli_version_string
@@ -95,52 +94,17 @@ def format(names, line_length) -> int:
95
94
  return 0
96
95
 
97
96
 
98
- def _lint_folder(folder):
99
- errors = 0
100
- while folder.endswith(("/.", "/")):
101
- folder = folder[0:-1]
102
- for filename in itertools.chain(
103
- find(folder, extension=".json"), find(folder, extension=".cf")
104
- ):
105
- if filename.startswith(("./.", "./out/", folder + "/.", folder + "/out/")):
106
- continue
107
- if filename.startswith(".") and not filename.startswith("./"):
108
- continue
109
- errors += _lint_single_file(filename)
110
- return errors
111
-
112
-
113
- def _lint_single_file(file):
114
- assert os.path.isfile(file)
115
- if file.endswith("/cfbs.json"):
116
- return lint_cfbs_json(file)
117
- if file.endswith(".json"):
118
- return lint_json(file)
119
- assert file.endswith(".cf")
120
- return lint_policy_file(file)
121
-
122
-
123
- def _lint_single_arg(arg):
124
- if os.path.isdir(arg):
125
- return _lint_folder(arg)
126
- assert os.path.isfile(arg)
127
- _lint_single_file(arg)
128
- return 0
129
-
130
-
131
97
  def _lint(files) -> int:
132
98
 
133
99
  if not files:
134
- return _lint_folder(".")
100
+ return lint_folder(".")
135
101
 
136
102
  errors = 0
137
103
 
138
104
  for file in files:
139
- errors += _lint_single_arg(file)
105
+ errors += lint_single_arg(file)
140
106
 
141
- if errors == 0:
142
- return 0
143
- return 1
107
+ return errors
144
108
 
145
109
 
146
110
  def lint(files) -> int:
@@ -16,7 +16,7 @@ import markdown_it
16
16
  from cfbs.pretty import pretty_file
17
17
  from cfbs.utils import find
18
18
 
19
- from cfengine_cli.lint import lint_policy_file
19
+ from cfengine_cli.lint import lint_folder, lint_policy_file
20
20
  from cfengine_cli.utils import UserError
21
21
 
22
22
  IGNORED_DIRS = [".git"]
@@ -409,6 +409,9 @@ def check_docs() -> int:
409
409
 
410
410
  Run by the command:
411
411
  cfengine dev lint-docs"""
412
+ r = lint_folder(".")
413
+ if r != 0:
414
+ return r
412
415
  _process_markdown_code_blocks(
413
416
  path=".",
414
417
  languages=["json", "cf3"],
@@ -12,10 +12,12 @@ $ cfengine lint
12
12
 
13
13
  import os
14
14
  import json
15
+ import itertools
15
16
  import tree_sitter_cfengine as tscfengine
16
17
  from tree_sitter import Language, Parser
17
18
  from cfbs.validate import validate_config
18
19
  from cfbs.cfbs_config import CFBSConfig
20
+ from cfbs.utils import find
19
21
 
20
22
  DEPRECATED_PROMISE_TYPES = ["defaults", "guest_environments"]
21
23
  ALLOWED_BUNDLE_TYPES = ["agent", "common", "monitor", "server", "edit_line", "edit_xml"]
@@ -231,3 +233,35 @@ def lint_policy_file(
231
233
  else:
232
234
  print(f"FAIL: {filename} ({errors} error{'s' if errors > 0 else ''})")
233
235
  return errors
236
+
237
+
238
+ def lint_folder(folder):
239
+ errors = 0
240
+ while folder.endswith(("/.", "/")):
241
+ folder = folder[0:-1]
242
+ for filename in itertools.chain(
243
+ find(folder, extension=".json"), find(folder, extension=".cf")
244
+ ):
245
+ if filename.startswith(("./.", "./out/", folder + "/.", folder + "/out/")):
246
+ continue
247
+ if filename.startswith(".") and not filename.startswith("./"):
248
+ continue
249
+ errors += lint_single_file(filename)
250
+ return errors
251
+
252
+
253
+ def lint_single_file(file):
254
+ assert os.path.isfile(file)
255
+ if file.endswith("/cfbs.json"):
256
+ return lint_cfbs_json(file)
257
+ if file.endswith(".json"):
258
+ return lint_json(file)
259
+ assert file.endswith(".cf")
260
+ return lint_policy_file(file)
261
+
262
+
263
+ def lint_single_arg(arg):
264
+ if os.path.isdir(arg):
265
+ return lint_folder(arg)
266
+ assert os.path.isfile(arg)
267
+ return lint_single_file(arg)
@@ -42,24 +42,29 @@ def clone_or_update_repo(repo):
42
42
  def get_commit_shas_from_tags(repo_path):
43
43
  # Returns a mapping of git tag to commit SHA for all version tags in the repo
44
44
  output = (
45
- subprocess.check_output(["git", "show-ref", "--tags"], cwd=repo_path)
45
+ subprocess.check_output(["git", "show-ref", "--tags", "-d"], cwd=repo_path)
46
46
  .decode()
47
47
  .strip()
48
48
  )
49
49
  tag_map = {}
50
50
 
51
51
  for line in output.splitlines():
52
- ref = line.split()[1]
53
- tag = ref.split("refs/tags/")[1]
54
- if re.fullmatch(TAG_REGEX, tag):
55
- sha = (
56
- subprocess.check_output(
57
- ["git", "log", "-n", "1", "--format=%H", tag], cwd=repo_path
58
- )
59
- .decode()
60
- .strip()
61
- )
62
- tag_map[tag] = sha
52
+ parts = line.split()
53
+ if len(parts) != 2:
54
+ continue
55
+ sha, ref = parts
56
+
57
+ if ref.startswith("refs/tags/"):
58
+ tag = ref.split("refs/tags/")[1]
59
+ if tag.endswith("^{}"):
60
+ tag_name = tag[:-3]
61
+ if re.fullmatch(TAG_REGEX, tag_name):
62
+ tag_map[tag_name] = sha
63
+ else:
64
+ if re.fullmatch(TAG_REGEX, tag):
65
+ # Only set if not already set by ^{}
66
+ if tag not in tag_map:
67
+ tag_map[tag] = sha
63
68
 
64
69
  return tag_map
65
70