boilersync 1.2.17__tar.gz → 1.2.19__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.
- {boilersync-1.2.17 → boilersync-1.2.19}/PKG-INFO +1 -1
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/_version.py +2 -2
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/file_ignores.py +18 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_diff.py +28 -0
- boilersync-1.2.17/.github/workflows/publish.yml +0 -33
- {boilersync-1.2.17 → boilersync-1.2.19}/.cursor/rules/adding-commands.mdc +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/.cursor/rules/project-description.mdc +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/.cursor/rules/python-conventions.mdc +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/.github/workflows/auto-tag.yml +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/.github/workflows/deploy-docs.yml +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/.gitignore +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/.vscode/launch.json +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/.vscode/settings.json +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/.vscode/tasks.json +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/PROBLEMS.md +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/README.md +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/__init__.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/__main__.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/cli.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/cli_helpers.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/commands/__init__.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/commands/check_pull.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/commands/diff.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/commands/init.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/commands/pull.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/commands/pull_proposal.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/commands/push.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/commands/templates.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/comparison.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/errors.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/interpolation_context.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/logging.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/names.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/paths.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/project_context.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/project_metadata.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/template_ownership.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/template_processor.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/template_sources.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/template_workspace.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/utils.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/boilersync/variable_collector.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/docs/ensemble.md +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/docs/index.md +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/docs/project-metadata.md +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/docs/template-metadata.md +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/mkdocs.yml +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/pyproject.toml +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/scripts/build.sh +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/__init__.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_check_pull.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_filename_interpolation.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_init_runtime_features.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_interpolation_context.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_paths.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_pull_proposal.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_push_inheritance.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_template_inheritance.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_template_sources.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_templates_commands.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_templates_init.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_variable_collection.py +0 -0
- {boilersync-1.2.17 → boilersync-1.2.19}/tests/test_variable_type_conversion.py +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 2,
|
|
21
|
+
__version__ = version = '1.2.19'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 2, 19)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -23,6 +23,20 @@ def is_default_copy_ignored(path: Path) -> bool:
|
|
|
23
23
|
return any(part in DEFAULT_COPY_IGNORED_NAMES for part in path.parts)
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def is_agents_compatibility_symlink(root_dir: Path, path: Path) -> bool:
|
|
27
|
+
if path != Path("CLAUDE.md"):
|
|
28
|
+
return False
|
|
29
|
+
|
|
30
|
+
source = root_dir / path
|
|
31
|
+
if not source.is_symlink():
|
|
32
|
+
return False
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
return source.readlink() == Path("AGENTS.md")
|
|
36
|
+
except OSError:
|
|
37
|
+
return False
|
|
38
|
+
|
|
39
|
+
|
|
26
40
|
def git_visible_files(root_dir: Path) -> list[Path] | None:
|
|
27
41
|
"""Return git-visible file paths relative to root_dir, or None outside git.
|
|
28
42
|
|
|
@@ -66,6 +80,8 @@ def git_visible_files(root_dir: Path) -> list[Path] | None:
|
|
|
66
80
|
path = Path(raw_path.decode("utf-8", errors="surrogateescape"))
|
|
67
81
|
if path.is_absolute() or ".." in path.parts or is_default_copy_ignored(path):
|
|
68
82
|
continue
|
|
83
|
+
if is_agents_compatibility_symlink(root_dir, path):
|
|
84
|
+
continue
|
|
69
85
|
if (root_dir / path).is_file():
|
|
70
86
|
paths.append(path)
|
|
71
87
|
return paths
|
|
@@ -83,6 +99,8 @@ def copyable_project_files(root_dir: Path) -> list[Path]:
|
|
|
83
99
|
relative_path = item.relative_to(root_dir)
|
|
84
100
|
if is_default_copy_ignored(relative_path):
|
|
85
101
|
continue
|
|
102
|
+
if is_agents_compatibility_symlink(root_dir, relative_path):
|
|
103
|
+
continue
|
|
86
104
|
paths.append(relative_path)
|
|
87
105
|
return paths
|
|
88
106
|
|
|
@@ -213,6 +213,34 @@ class TestDiff(unittest.TestCase):
|
|
|
213
213
|
self.assertEqual(result.exit_code, 0, result.output)
|
|
214
214
|
self.assertIn("No divergence from template.", result.output)
|
|
215
215
|
|
|
216
|
+
def test_diff_ignores_claude_agents_compatibility_symlink(self) -> None:
|
|
217
|
+
_write_template(
|
|
218
|
+
self.template_root_dir,
|
|
219
|
+
org=self.org,
|
|
220
|
+
repo=self.repo,
|
|
221
|
+
subdir="agents-template",
|
|
222
|
+
files={"AGENTS.md.boilersync": "$${name_pretty} instructions\n"},
|
|
223
|
+
config={"skip_git": True},
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
target_dir = self.root / "agents-project"
|
|
227
|
+
target_dir.mkdir()
|
|
228
|
+
init(
|
|
229
|
+
self._template_ref("agents-template"),
|
|
230
|
+
target_dir=target_dir,
|
|
231
|
+
template_variables={
|
|
232
|
+
"name_snake": "agents_project",
|
|
233
|
+
"name_pretty": "Agents Project",
|
|
234
|
+
},
|
|
235
|
+
no_input=True,
|
|
236
|
+
)
|
|
237
|
+
(target_dir / "CLAUDE.md").symlink_to("AGENTS.md")
|
|
238
|
+
|
|
239
|
+
result = self._invoke_diff(target_dir, "--name-status")
|
|
240
|
+
|
|
241
|
+
self.assertEqual(result.exit_code, 0, result.output)
|
|
242
|
+
self.assertIn("No divergence from template.", result.output)
|
|
243
|
+
|
|
216
244
|
def test_starter_files_are_excluded_by_default_and_included_on_request(
|
|
217
245
|
self,
|
|
218
246
|
) -> None:
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
name: Publish to PyPI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
tags:
|
|
6
|
-
- "v*" # Only runs on version tags like v1.0.0
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
publish-pypi:
|
|
10
|
-
runs-on: ubuntu-latest
|
|
11
|
-
permissions: write-all
|
|
12
|
-
steps:
|
|
13
|
-
- name: Check out code
|
|
14
|
-
uses: actions/checkout@v3
|
|
15
|
-
with:
|
|
16
|
-
fetch-depth: 0
|
|
17
|
-
|
|
18
|
-
- name: Set up Python
|
|
19
|
-
uses: actions/setup-python@v4
|
|
20
|
-
with:
|
|
21
|
-
python-version: "3.11"
|
|
22
|
-
|
|
23
|
-
- name: Install build tools
|
|
24
|
-
run: pip install build twine hatch
|
|
25
|
-
|
|
26
|
-
- name: Build PyPI package
|
|
27
|
-
run: hatch build
|
|
28
|
-
|
|
29
|
-
- name: Publish to PyPI
|
|
30
|
-
env:
|
|
31
|
-
TWINE_USERNAME: __token__
|
|
32
|
-
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
|
33
|
-
run: twine upload dist/*
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|