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.
- {cfengine-0.11.0 → cfengine-0.11.2}/PKG-INFO +2 -2
- {cfengine-0.11.0 → cfengine-0.11.2}/pyproject.toml +1 -1
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/PKG-INFO +2 -2
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/requires.txt +1 -1
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/commands.py +4 -40
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/docs.py +4 -1
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/lint.py +34 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/generate_git_tags.py +17 -12
- cfengine-0.11.2/uv.lock +474 -0
- cfengine-0.11.0/uv.lock +0 -452
- {cfengine-0.11.0 → cfengine-0.11.2}/.github/dependabot.yml +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/.github/workflows/format.yml +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/.github/workflows/lint.yml +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/.github/workflows/pypi-publish.yml +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/.github/workflows/test.yml +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/.gitignore +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/.python-version +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/HACKING.md +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/LICENSE +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/README.md +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/ci/01-install.sh +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/ci/02-safe-tests.sh +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/ci/03-unsafe-tests.sh +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/setup.cfg +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/SOURCES.txt +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/dependency_links.txt +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/entry_points.txt +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine.egg-info/top_level.txt +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/__init__.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/__main__.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/deptool-README.md +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/deptool.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/dev.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/format.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/main.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/__init__.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/analyze.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/check_download_matches_git.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/download.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/generate_release_information.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/generate_vcf_download.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/masterfiles/generate_vcf_git_checkout.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/paths.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/profile.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/shell.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/utils.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/src/cfengine_cli/version.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/__init__.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/001_hello_world.expected.cf +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/001_hello_world.input.cf +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/002_basics.expected.cf +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/002_basics.input.cf +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/003_wrapping.expected.cf +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/003_wrapping.input.cf +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/004_comments.expected.cf +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/format/004_comments.input.cf +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/run-format-tests.sh +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/run-shell-tests.sh +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/shell/001-help.sh +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/shell/002-version.sh +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/shell/003-format.sh +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/test_deps.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/test_paths.py +0 -0
- {cfengine-0.11.0 → cfengine-0.11.2}/tests/test_utils.py +0 -0
- {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.
|
|
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.
|
|
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,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cfengine
|
|
3
|
-
Version: 0.11.
|
|
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.
|
|
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,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
|
|
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
|
|
100
|
+
return lint_folder(".")
|
|
135
101
|
|
|
136
102
|
errors = 0
|
|
137
103
|
|
|
138
104
|
for file in files:
|
|
139
|
-
errors +=
|
|
105
|
+
errors += lint_single_arg(file)
|
|
140
106
|
|
|
141
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
|