crackerjack 0.35.1__py3-none-any.whl → 0.36.0__py3-none-any.whl
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.
Potentially problematic release.
This version of crackerjack might be problematic. Click here for more details.
- crackerjack/core/workflow_orchestrator.py +19 -5
- crackerjack/managers/publish_manager.py +21 -5
- crackerjack/ui/__init__.py +1 -1
- crackerjack/ui/server_panels.py +2 -3
- {crackerjack-0.35.1.dist-info → crackerjack-0.36.0.dist-info}/METADATA +1 -1
- {crackerjack-0.35.1.dist-info → crackerjack-0.36.0.dist-info}/RECORD +9 -9
- {crackerjack-0.35.1.dist-info → crackerjack-0.36.0.dist-info}/WHEEL +0 -0
- {crackerjack-0.35.1.dist-info → crackerjack-0.36.0.dist-info}/entry_points.txt +0 -0
- {crackerjack-0.35.1.dist-info → crackerjack-0.36.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -424,17 +424,31 @@ class WorkflowPipeline:
|
|
|
424
424
|
if self._is_publishing_workflow(options):
|
|
425
425
|
return False
|
|
426
426
|
|
|
427
|
-
|
|
427
|
+
# Execute publishing workflow if requested
|
|
428
|
+
publishing_success = await self._execute_publishing_workflow(
|
|
429
|
+
options, workflow_id
|
|
430
|
+
)
|
|
431
|
+
if not publishing_success:
|
|
428
432
|
success = False
|
|
429
|
-
return False
|
|
430
433
|
|
|
431
|
-
|
|
434
|
+
# Execute commit workflow independently if requested
|
|
435
|
+
# Note: Commit workflow runs regardless of publish success to ensure
|
|
436
|
+
# version bump changes are always committed when requested
|
|
437
|
+
commit_success = await self._execute_commit_workflow(options, workflow_id)
|
|
438
|
+
if not commit_success:
|
|
432
439
|
success = False
|
|
433
440
|
|
|
441
|
+
# Only fail the overall workflow if publishing was explicitly requested and failed
|
|
442
|
+
if not publishing_success and (options.publish or options.all):
|
|
443
|
+
self.console.print(
|
|
444
|
+
"[red]❌ Publishing failed - overall workflow marked as failed[/red]"
|
|
445
|
+
)
|
|
446
|
+
return False
|
|
447
|
+
|
|
434
448
|
return success
|
|
435
449
|
|
|
436
450
|
def _is_publishing_workflow(self, options: OptionsProtocol) -> bool:
|
|
437
|
-
return bool(options.publish or options.all
|
|
451
|
+
return bool(options.publish or options.all)
|
|
438
452
|
|
|
439
453
|
async def _execute_publishing_workflow(
|
|
440
454
|
self, options: OptionsProtocol, workflow_id: str
|
|
@@ -1457,7 +1471,7 @@ class WorkflowPipeline:
|
|
|
1457
1471
|
def _check_security_gates_for_publishing(
|
|
1458
1472
|
self, options: OptionsProtocol
|
|
1459
1473
|
) -> tuple[bool, bool]:
|
|
1460
|
-
publishing_requested = bool(options.publish or options.all
|
|
1474
|
+
publishing_requested = bool(options.publish or options.all)
|
|
1461
1475
|
|
|
1462
1476
|
if not publishing_requested:
|
|
1463
1477
|
return False, False
|
|
@@ -415,12 +415,28 @@ class PublishManagerImpl:
|
|
|
415
415
|
def _execute_publish(self) -> bool:
|
|
416
416
|
result = self._run_command(["uv", "publish"])
|
|
417
417
|
|
|
418
|
-
if
|
|
419
|
-
|
|
420
|
-
|
|
418
|
+
# Check for success indicators in output even if return code is non-zero
|
|
419
|
+
# UV can return non-zero codes for warnings while still succeeding
|
|
420
|
+
success_indicators = [
|
|
421
|
+
"Successfully uploaded",
|
|
422
|
+
"Package uploaded successfully",
|
|
423
|
+
"Upload successful",
|
|
424
|
+
"Successfully published",
|
|
425
|
+
]
|
|
426
|
+
|
|
427
|
+
has_success_indicator = (
|
|
428
|
+
any(indicator in result.stdout for indicator in success_indicators)
|
|
429
|
+
if result.stdout
|
|
430
|
+
else False
|
|
431
|
+
)
|
|
421
432
|
|
|
422
|
-
|
|
423
|
-
|
|
433
|
+
# Consider it successful if either return code is 0 OR we find success indicators
|
|
434
|
+
if result.returncode == 0 or has_success_indicator:
|
|
435
|
+
self._handle_publish_success()
|
|
436
|
+
return True
|
|
437
|
+
|
|
438
|
+
self._handle_publish_failure(result.stderr)
|
|
439
|
+
return False
|
|
424
440
|
|
|
425
441
|
def _handle_publish_failure(self, error_msg: str) -> None:
|
|
426
442
|
self.console.print(f"[red]❌[/ red] Publish failed: {error_msg}")
|
crackerjack/ui/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"""UI components for Crackerjack."""
|
|
1
|
+
"""UI components for Crackerjack."""
|
crackerjack/ui/server_panels.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"""Rich panel utilities for MCP server operations with consistent styling."""
|
|
2
2
|
|
|
3
|
-
import typing as t
|
|
4
3
|
from pathlib import Path
|
|
5
4
|
|
|
6
5
|
from rich.console import Console
|
|
@@ -60,7 +59,7 @@ class ServerPanels:
|
|
|
60
59
|
self,
|
|
61
60
|
http_endpoint: str | None = None,
|
|
62
61
|
websocket_monitor: str | None = None,
|
|
63
|
-
process_id: int | None = None
|
|
62
|
+
process_id: int | None = None,
|
|
64
63
|
) -> None:
|
|
65
64
|
"""Display success panel with server details."""
|
|
66
65
|
content = Text()
|
|
@@ -123,4 +122,4 @@ class ServerPanels:
|
|
|
123
122
|
|
|
124
123
|
def create_server_panels(console: Console | None = None) -> ServerPanels:
|
|
125
124
|
"""Factory function to create ServerPanels instance."""
|
|
126
|
-
return ServerPanels(console)
|
|
125
|
+
return ServerPanels(console)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crackerjack
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.36.0
|
|
4
4
|
Summary: Crackerjack Python project management tool
|
|
5
5
|
Project-URL: documentation, https://github.com/lesleslie/crackerjack
|
|
6
6
|
Project-URL: homepage, https://github.com/lesleslie/crackerjack
|
|
@@ -54,7 +54,7 @@ crackerjack/core/service_watchdog.py,sha256=Ttj1imOxvUea4Tkf5JO1e2dQtGIK7D-bX1xO
|
|
|
54
54
|
crackerjack/core/session_coordinator.py,sha256=TgoGE9DfXe2x-OkH93Ld9dX9ROjx2_mZFkGXen-z5YI,15680
|
|
55
55
|
crackerjack/core/timeout_manager.py,sha256=_sbEsfYDwWx7y0Pn89QCoAZ5DpWIbCdtR9qkG_Kqj5E,15013
|
|
56
56
|
crackerjack/core/websocket_lifecycle.py,sha256=74kn6ugu6FLlDQhCNSPgqguCFwRoT1WFOvtl8G2OyFc,12860
|
|
57
|
-
crackerjack/core/workflow_orchestrator.py,sha256=
|
|
57
|
+
crackerjack/core/workflow_orchestrator.py,sha256=jh8G1xKqxXwD0yGaFHgdESRjm23-kUZt4qriMJltowM,70789
|
|
58
58
|
crackerjack/docs/INDEX.md,sha256=a6CGFEeL5DX_FRft_JFWd0nOxoBmCSSp-QHIC3B7ato,342
|
|
59
59
|
crackerjack/docs/generated/api/API_REFERENCE.md,sha256=mWoqImZA7AhDvRqqF1MhUo70g_pnZr3NoBeZQRotqN8,155816
|
|
60
60
|
crackerjack/docs/generated/api/CLI_REFERENCE.md,sha256=ikuG0hO5EjIiQlJtAUnvEuAhXDa-JHPULPXNNmUwvk4,2805
|
|
@@ -84,7 +84,7 @@ crackerjack/intelligence/integration.py,sha256=vVaC2Fp5RbbABpaohCePzGw1XANuRztGl
|
|
|
84
84
|
crackerjack/managers/__init__.py,sha256=PFWccXx4hDQA76T02idAViOLVD-aPeVpgjdfSkh_Dmk,298
|
|
85
85
|
crackerjack/managers/async_hook_manager.py,sha256=c0HFR98sFwfk0uZ3NmAe_6OVZpBrq9I570V8A2DoIxw,5129
|
|
86
86
|
crackerjack/managers/hook_manager.py,sha256=_FT0ngwPwujqg0KZGpLz-pP07mwDmptJ5pVkiy5yS8k,7820
|
|
87
|
-
crackerjack/managers/publish_manager.py,sha256
|
|
87
|
+
crackerjack/managers/publish_manager.py,sha256=rcdKYgN2c4Nwj1JtG1HkaoSQxuN2ZM0_YVvUf9yx1U0,22013
|
|
88
88
|
crackerjack/managers/test_command_builder.py,sha256=1TlPzddNcDDxRORH6UvAudcbRc6hKwFyknSEVLkiWAo,3459
|
|
89
89
|
crackerjack/managers/test_executor.py,sha256=2837Ti4OaNsmLxnmELjbQ18hmfL0-Z2EW-W2UeFSDcE,13871
|
|
90
90
|
crackerjack/managers/test_manager.py,sha256=BRPBWXx4flPDK0w96xyHhg-9dmUca1vpKQRM2VofSlI,13158
|
|
@@ -222,10 +222,10 @@ crackerjack/slash_commands/status.md,sha256=U3qqppVLtIIm2lEiMYaKagaHYLI9UplL7OH1
|
|
|
222
222
|
crackerjack/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
223
223
|
crackerjack/tools/validate_input_validator_patterns.py,sha256=NN7smYlXWrHLQXTb-81gRam2vjW-cJav92f1klPA0qA,8234
|
|
224
224
|
crackerjack/tools/validate_regex_patterns.py,sha256=9ejFb7Tw1js_oydzuEeeeXvrU5ipHUEX9ATBfkLCCE8,5811
|
|
225
|
-
crackerjack/ui/__init__.py,sha256=
|
|
226
|
-
crackerjack/ui/server_panels.py,sha256=
|
|
227
|
-
crackerjack-0.
|
|
228
|
-
crackerjack-0.
|
|
229
|
-
crackerjack-0.
|
|
230
|
-
crackerjack-0.
|
|
231
|
-
crackerjack-0.
|
|
225
|
+
crackerjack/ui/__init__.py,sha256=eMb1OeTU-dSLICAACn0YdYB4Amdr8wHckjKfn0wOIZE,37
|
|
226
|
+
crackerjack/ui/server_panels.py,sha256=F5IH6SNN06BaZQMsFx_D-OA286aojmaFPJ5kvvSRv_c,4232
|
|
227
|
+
crackerjack-0.36.0.dist-info/METADATA,sha256=hWG3NeOyHJk16ZRz9ZMZ7HMxPGYm18YVW_RYfKPrzAc,37942
|
|
228
|
+
crackerjack-0.36.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
229
|
+
crackerjack-0.36.0.dist-info/entry_points.txt,sha256=AJKNft0WXm9xoGUJ3Trl-iXHOWxRAYbagQiza3AILr4,57
|
|
230
|
+
crackerjack-0.36.0.dist-info/licenses/LICENSE,sha256=fDt371P6_6sCu7RyqiZH_AhT1LdN3sN1zjBtqEhDYCk,1531
|
|
231
|
+
crackerjack-0.36.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|