pycastle 0.2.0.2.dev0__tar.gz → 0.2.0.5__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.
- pycastle-0.2.0.5/.github/workflows/publish.yml +95 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/PKG-INFO +1 -1
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/pyproject.toml +2 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/implement-prompt.md +3 -3
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/review-prompt.md +3 -5
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/docker_session.py +2 -2
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle.egg-info/PKG-INFO +1 -1
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_docker_session.py +27 -1
- pycastle-0.2.0.2.dev0/.github/workflows/publish.yml +0 -104
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/.gitignore +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/.python-version +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/CLAUDE.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/CONTEXT.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/LICENSE +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/README.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/docs/adr/0001-runtime-dependency-installation.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/docs/adr/0002-cli-native-model-shorthand-resolution.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/docs/agents/domain.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/docs/agents/issue-tracker.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/docs/agents/triage-labels.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/setup.cfg +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/__init__.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/_types.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/agent_output_protocol.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/agent_result.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/agent_runner.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/build_command.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/config/__init__.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/config/loader.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/container_runner.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/.gitignore +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/Dockerfile +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/config.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/coding-standards/deep-modules.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/coding-standards/interfaces.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/coding-standards/mocking.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/coding-standards/refactoring.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/coding-standards/tests.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/merge-prompt.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/plan-prompt.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/preflight-issue.md +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/errors.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/init_command.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/iteration/__init__.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/iteration/_deps.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/iteration/_phase_row.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/iteration/_utils.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/iteration/implement.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/iteration/merge.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/iteration/planning.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/iteration/preflight.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/labels.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/main.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/orchestrator.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/prompt_pipeline.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/rich_status_display.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/services/__init__.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/services/_base.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/services/claude_service.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/services/docker_service.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/services/git_service.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/services/github_service.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/status_display.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/stream_session.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/worktree.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle.egg-info/SOURCES.txt +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle.egg-info/dependency_links.txt +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle.egg-info/entry_points.txt +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle.egg-info/requires.txt +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle.egg-info/top_level.txt +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/__init__.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/conftest.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_agent_output_protocol.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_agent_result.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_agent_runner.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_build_command.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_claude_service.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_config_new.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_container_runner.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_default_prompts.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_deps.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_docker_service.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_errors.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_git_service.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_github_service.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_implement.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_init_command.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_integration.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_iteration.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_labels.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_main.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_merge.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_orchestrator.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_phase_row.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_plain_status_display.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_plan.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_planning.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_preflight.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_prompt_pipeline.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_prompt_utils.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_status_display.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_stream_session.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_subprocess_service.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_utils.py +0 -0
- {pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/tests/test_worktree.py +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
tags:
|
|
8
|
+
- 'v*.*.*'
|
|
9
|
+
pull_request:
|
|
10
|
+
branches:
|
|
11
|
+
- main
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
test:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
- run: pip install -e ".[dev]"
|
|
22
|
+
- run: ruff check
|
|
23
|
+
- run: mypy src
|
|
24
|
+
- run: pytest
|
|
25
|
+
|
|
26
|
+
build:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
needs: test
|
|
29
|
+
if: github.event_name == 'push'
|
|
30
|
+
outputs:
|
|
31
|
+
is_tag: ${{ steps.version.outputs.is_tag }}
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v4
|
|
34
|
+
with:
|
|
35
|
+
fetch-depth: 0
|
|
36
|
+
fetch-tags: true
|
|
37
|
+
|
|
38
|
+
- uses: actions/setup-python@v5
|
|
39
|
+
with:
|
|
40
|
+
python-version: "3.12"
|
|
41
|
+
|
|
42
|
+
- name: Compute version
|
|
43
|
+
id: version
|
|
44
|
+
run: |
|
|
45
|
+
pip install setuptools-scm
|
|
46
|
+
VERSION=$(python -m setuptools_scm)
|
|
47
|
+
echo "Computed version: $VERSION"
|
|
48
|
+
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
|
|
49
|
+
if [[ "$VERSION" == *".dev"* ]]; then
|
|
50
|
+
echo "ERROR: dev version on tag build" >&2
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
echo "is_tag=true" >> "$GITHUB_OUTPUT"
|
|
54
|
+
else
|
|
55
|
+
echo "is_tag=false" >> "$GITHUB_OUTPUT"
|
|
56
|
+
fi
|
|
57
|
+
echo "SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYCASTLE=$VERSION" >> "$GITHUB_ENV"
|
|
58
|
+
|
|
59
|
+
- name: Build
|
|
60
|
+
run: pip install build && python -m build
|
|
61
|
+
|
|
62
|
+
- uses: actions/upload-artifact@v4
|
|
63
|
+
with:
|
|
64
|
+
name: dist
|
|
65
|
+
path: dist/
|
|
66
|
+
|
|
67
|
+
publish-testpypi:
|
|
68
|
+
runs-on: ubuntu-latest
|
|
69
|
+
needs: build
|
|
70
|
+
if: needs.build.outputs.is_tag == 'false'
|
|
71
|
+
environment: testpypi
|
|
72
|
+
permissions:
|
|
73
|
+
id-token: write
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/download-artifact@v4
|
|
76
|
+
with:
|
|
77
|
+
name: dist
|
|
78
|
+
path: dist/
|
|
79
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
80
|
+
with:
|
|
81
|
+
repository-url: https://test.pypi.org/legacy/
|
|
82
|
+
|
|
83
|
+
publish-pypi:
|
|
84
|
+
runs-on: ubuntu-latest
|
|
85
|
+
needs: build
|
|
86
|
+
if: needs.build.outputs.is_tag == 'true'
|
|
87
|
+
environment: pypi
|
|
88
|
+
permissions:
|
|
89
|
+
id-token: write
|
|
90
|
+
steps:
|
|
91
|
+
- uses: actions/download-artifact@v4
|
|
92
|
+
with:
|
|
93
|
+
name: dist
|
|
94
|
+
path: dist/
|
|
95
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
{pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/implement-prompt.md
RENAMED
|
@@ -85,11 +85,11 @@ Before finishing, run `{{FEEDBACK_COMMANDS}}` to ensure all tests pass.
|
|
|
85
85
|
|
|
86
86
|
Do not stage files or run `git commit` — the orchestrator handles commits.
|
|
87
87
|
|
|
88
|
-
Emit a `<commit_message>` tag with a plain description of the changes.
|
|
88
|
+
Emit a `<commit_message>` tag with a plain description of the changes. Keep it concise — task completed, key decisions made, and files changed.
|
|
89
89
|
|
|
90
|
-
Example: `<commit_message>task completed + PRD reference; key decisions; files changed</commit_message>`
|
|
90
|
+
Example: `<commit_message>task completed + PRD reference; key decisions; files changed; Blockers or notes for next iteration</commit_message>`
|
|
91
91
|
|
|
92
|
-
### 8.
|
|
92
|
+
### 8. Issues
|
|
93
93
|
|
|
94
94
|
If the task is not complete, leave a comment on the GitHub issue with what was done.
|
|
95
95
|
|
|
@@ -91,12 +91,10 @@ Check that the implementation respects any ADRs in `docs/adr/` that touch the ar
|
|
|
91
91
|
|
|
92
92
|
Standards were applied at each step above — no separate standards file reference needed.
|
|
93
93
|
|
|
94
|
-
## 8. Output
|
|
95
|
-
|
|
96
94
|
Run `{{FEEDBACK_COMMANDS}}` to ensure nothing is broken.
|
|
97
95
|
|
|
98
|
-
|
|
96
|
+
## 8. Output
|
|
99
97
|
|
|
100
|
-
Emit a `<commit_message>` tag with a plain description of the refinements.
|
|
98
|
+
Emit a `<commit_message>` tag with a plain description of the refinements. Keep it concise.
|
|
101
99
|
|
|
102
|
-
Example: `<commit_message>
|
|
100
|
+
Example: `<commit_message>Description of revinements</commit_message>`
|
|
@@ -4,7 +4,7 @@ import sys
|
|
|
4
4
|
import tarfile
|
|
5
5
|
import threading
|
|
6
6
|
from collections.abc import Iterator
|
|
7
|
-
from pathlib import Path
|
|
7
|
+
from pathlib import Path, PurePosixPath
|
|
8
8
|
from typing import cast
|
|
9
9
|
|
|
10
10
|
import docker
|
|
@@ -180,7 +180,7 @@ class DockerSession:
|
|
|
180
180
|
|
|
181
181
|
def write_file(self, content: str, container_path: str) -> None:
|
|
182
182
|
data = content.encode("utf-8")
|
|
183
|
-
path =
|
|
183
|
+
path = PurePosixPath(container_path)
|
|
184
184
|
buf = io.BytesIO()
|
|
185
185
|
with tarfile.open(fileobj=buf, mode="w") as tar:
|
|
186
186
|
info = tarfile.TarInfo(name=path.name)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import tarfile
|
|
2
2
|
import threading
|
|
3
|
-
from pathlib import Path
|
|
3
|
+
from pathlib import Path, PureWindowsPath
|
|
4
4
|
from unittest.mock import MagicMock, patch
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
@@ -562,3 +562,29 @@ def test_docker_session_write_file_puts_archive_with_correct_content():
|
|
|
562
562
|
assert member.name == "myfile.txt"
|
|
563
563
|
content = tar.extractfile(member).read().decode("utf-8")
|
|
564
564
|
assert content == "hello content"
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
def test_docker_session_write_file_splits_container_path_as_posix_on_windows_host():
|
|
568
|
+
"""Regression for #467: container paths must split as POSIX even on Windows hosts.
|
|
569
|
+
|
|
570
|
+
Simulates a Windows host by patching the module's Path symbol with PureWindowsPath.
|
|
571
|
+
With the buggy implementation, parent renders as '\\home\\agent' and Docker
|
|
572
|
+
rejects the put_archive call with a 404.
|
|
573
|
+
"""
|
|
574
|
+
mock_client = MagicMock()
|
|
575
|
+
session = DockerSession(
|
|
576
|
+
volumes={},
|
|
577
|
+
container_env={},
|
|
578
|
+
image_name="img",
|
|
579
|
+
cfg=Config(),
|
|
580
|
+
docker_client=mock_client,
|
|
581
|
+
)
|
|
582
|
+
session.__enter__()
|
|
583
|
+
|
|
584
|
+
with patch("pycastle.docker_session.Path", PureWindowsPath):
|
|
585
|
+
session.write_file("token", "/home/agent/.claude.json")
|
|
586
|
+
|
|
587
|
+
mock_container = mock_client.containers.run.return_value
|
|
588
|
+
directory, _ = mock_container.put_archive.call_args[0]
|
|
589
|
+
assert "\\" not in directory
|
|
590
|
+
assert directory == "/home/agent"
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
name: Publish
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches:
|
|
6
|
-
- main
|
|
7
|
-
tags:
|
|
8
|
-
- 'v*.*.*'
|
|
9
|
-
pull_request:
|
|
10
|
-
branches:
|
|
11
|
-
- main
|
|
12
|
-
|
|
13
|
-
jobs:
|
|
14
|
-
test:
|
|
15
|
-
runs-on: ubuntu-latest
|
|
16
|
-
steps:
|
|
17
|
-
- uses: actions/checkout@v4
|
|
18
|
-
with:
|
|
19
|
-
fetch-depth: 0
|
|
20
|
-
|
|
21
|
-
- uses: actions/setup-python@v5
|
|
22
|
-
with:
|
|
23
|
-
python-version: "3.12"
|
|
24
|
-
|
|
25
|
-
- name: Install
|
|
26
|
-
run: pip install -e ".[dev]"
|
|
27
|
-
|
|
28
|
-
- name: Lint
|
|
29
|
-
run: ruff check
|
|
30
|
-
|
|
31
|
-
- name: Type-check
|
|
32
|
-
run: mypy src
|
|
33
|
-
|
|
34
|
-
- name: Test
|
|
35
|
-
run: pytest
|
|
36
|
-
|
|
37
|
-
publish-testpypi:
|
|
38
|
-
runs-on: ubuntu-latest
|
|
39
|
-
needs: test
|
|
40
|
-
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
41
|
-
environment: testpypi
|
|
42
|
-
permissions:
|
|
43
|
-
id-token: write
|
|
44
|
-
contents: read
|
|
45
|
-
steps:
|
|
46
|
-
- uses: actions/checkout@v4
|
|
47
|
-
with:
|
|
48
|
-
fetch-depth: 0
|
|
49
|
-
fetch-tags: true
|
|
50
|
-
|
|
51
|
-
- uses: actions/setup-python@v5
|
|
52
|
-
with:
|
|
53
|
-
python-version: "3.12"
|
|
54
|
-
|
|
55
|
-
- name: Install build
|
|
56
|
-
run: pip install build setuptools-scm
|
|
57
|
-
|
|
58
|
-
- name: Show computed version
|
|
59
|
-
run: python -m setuptools_scm
|
|
60
|
-
|
|
61
|
-
- name: Build
|
|
62
|
-
run: python -m build
|
|
63
|
-
|
|
64
|
-
- name: Publish to TestPyPI
|
|
65
|
-
uses: pypa/gh-action-pypi-publish@release/v1
|
|
66
|
-
with:
|
|
67
|
-
repository-url: https://test.pypi.org/legacy/
|
|
68
|
-
|
|
69
|
-
publish-pypi:
|
|
70
|
-
runs-on: ubuntu-latest
|
|
71
|
-
needs: test
|
|
72
|
-
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
73
|
-
environment: pypi
|
|
74
|
-
permissions:
|
|
75
|
-
id-token: write
|
|
76
|
-
contents: read
|
|
77
|
-
steps:
|
|
78
|
-
- uses: actions/checkout@v4
|
|
79
|
-
with:
|
|
80
|
-
fetch-depth: 0
|
|
81
|
-
fetch-tags: true
|
|
82
|
-
|
|
83
|
-
- uses: actions/setup-python@v5
|
|
84
|
-
with:
|
|
85
|
-
python-version: "3.12"
|
|
86
|
-
|
|
87
|
-
- name: Install build
|
|
88
|
-
run: pip install build setuptools-scm
|
|
89
|
-
|
|
90
|
-
- name: Verify tag matches HEAD and version is final
|
|
91
|
-
run: |
|
|
92
|
-
git describe --tags --exact-match HEAD
|
|
93
|
-
VERSION=$(python -m setuptools_scm)
|
|
94
|
-
echo "Computed version: $VERSION"
|
|
95
|
-
if [[ "$VERSION" == *".dev"* ]]; then
|
|
96
|
-
echo "ERROR: dev version on tag build — tag not visible to setuptools-scm" >&2
|
|
97
|
-
exit 1
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
- name: Build
|
|
101
|
-
run: python -m build
|
|
102
|
-
|
|
103
|
-
- name: Publish to PyPI
|
|
104
|
-
uses: pypa/gh-action-pypi-publish@release/v1
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/docs/adr/0002-cli-native-model-shorthand-resolution.md
RENAMED
|
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
|
{pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/coding-standards/mocking.md
RENAMED
|
File without changes
|
|
File without changes
|
{pycastle-0.2.0.2.dev0 → pycastle-0.2.0.5}/src/pycastle/defaults/prompts/coding-standards/tests.md
RENAMED
|
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
|
|
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
|