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.

@@ -424,17 +424,31 @@ class WorkflowPipeline:
424
424
  if self._is_publishing_workflow(options):
425
425
  return False
426
426
 
427
- if not await self._execute_publishing_workflow(options, workflow_id):
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
- if not await self._execute_commit_workflow(options, workflow_id):
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 or options.commit)
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 or options.commit)
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 result.returncode != 0:
419
- self._handle_publish_failure(result.stderr)
420
- return False
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
- self._handle_publish_success()
423
- return True
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}")
@@ -1 +1 @@
1
- """UI components for Crackerjack."""
1
+ """UI components for Crackerjack."""
@@ -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.35.1
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=NgvOn6pTVV8aULxe-bbwT6GeIELRc-KNXU7bYKroGV8,70162
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=-sHzSVMF6fSUXuPdWA47gBFkFCT8sIb4cPj3GJB-uX4,21370
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=seLTuIcCzZDvUNfCvm1xNkiw0814JqUxoaQKmocJPpU,36
226
- crackerjack/ui/server_panels.py,sha256=1MsCbKVPUD6EOONw7miovL_r5CDvllTxjnVU14dKtIE,4249
227
- crackerjack-0.35.1.dist-info/METADATA,sha256=s6RH3Wqup4CHvmsEcd3fTtqBnshDsrGM9-0cZJkDMgE,37942
228
- crackerjack-0.35.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
229
- crackerjack-0.35.1.dist-info/entry_points.txt,sha256=AJKNft0WXm9xoGUJ3Trl-iXHOWxRAYbagQiza3AILr4,57
230
- crackerjack-0.35.1.dist-info/licenses/LICENSE,sha256=fDt371P6_6sCu7RyqiZH_AhT1LdN3sN1zjBtqEhDYCk,1531
231
- crackerjack-0.35.1.dist-info/RECORD,,
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,,