Skip to content

feat: modernize release system and CI/CD with uv#6

Merged
josephjohncox merged 3 commits into
mainfrom
feature/release-system-uv
Oct 1, 2025
Merged

feat: modernize release system and CI/CD with uv#6
josephjohncox merged 3 commits into
mainfrom
feature/release-system-uv

Conversation

@josephjohncox

Copy link
Copy Markdown
Owner

🚀 Release System Modernization

This PR modernizes our release system and CI/CD pipeline with several key improvements:

Clean Release Scripts

  • Extracted complex bash logic from Justfile into dedicated scripts:
    • 🚀 Creating patch release...
      ⚠️ Warning: Not on main branch (currently on: feature/release-system-uv)
      Continue anyway? (y/N) - Main release workflow
    • ❌ Error: Version required
      Usage: scripts/generate-release-notes.sh [message] - Changelog & GitHub release creation
    • 🏷️ Creating patch tag only...
      📦 Current version: 0.2.1
      🔄 Bumping version: 0.2.1 → 0.2.2
      ✅ Version bumped to 0.2.2
      ============================= test session starts ==============================
      platform darwin -- Python 3.12.7, pytest-8.4.2, pluggy-1.6.0 -- /Users/joseph/dev/Tree-Mendous/.venv/bin/python3
      cachedir: .pytest_cache
      hypothesis profile 'default'
      rootdir: /Users/joseph/dev/Tree-Mendous
      configfile: pyproject.toml
      plugins: anyio-4.11.0, hypothesis-6.140.2
      collecting ... collected 197 items

tests/test_boundary_summary_simple.py::test_basic_functionality PASSED [ 0%]
tests/test_boundary_summary_simple.py::test_summary_analytics PASSED [ 1%]
tests/test_boundary_summary_simple.py::test_best_fit_queries PASSED [ 1%]
tests/test_boundary_summary_simple.py::test_performance_characteristics PASSED [ 2%]
tests/test_boundary_summary_simple.py::test_py_cpp_equivalence PASSED [ 2%]
tests/test_boundary_summary_simple.py::test_caching_behavior PASSED [ 3%]
tests/test_summary_simple.py::test_basic_functionality PASSED [ 3%]
tests/test_summary_simple.py::test_best_fit_queries PASSED [ 4%]
tests/test_summary_simple.py::test_tree_summary_merging PASSED [ 4%]
tests/test_summary_simple.py::test_scheduling_scenario PASSED [ 5%]
tests/test_treap_simple.py::test_basic_treap_functionality PASSED [ 5%]
tests/test_treap_simple.py::test_treap_operations PASSED [ 6%]
tests/test_treap_simple.py::test_treap_probabilistic_balance PASSED [ 6%]
tests/test_treap_simple.py::test_treap_performance PASSED [ 7%]
tests/test_treap_simple.py::test_treap_correctness PASSED [ 7%]
tests/unit/hypothesis/test_avl_earliest.py::test_insert_and_delete_intervals PASSED [ 8%]
tests/unit/hypothesis/test_avl_earliest.py::test_find_interval PASSED [ 8%]
tests/unit/hypothesis/test_avl_earliest.py::test_total_available_length PASSED [ 9%]
tests/unit/hypothesis/test_avl_earliest.py::test_adjacent_intervals PASSED [ 9%]
tests/unit/hypothesis/test_avl_earliest.py::test_random_operations PASSED [ 10%]
tests/unit/hypothesis/test_avl_earliest.py::test_non_overlapping_reservations PASSED [ 10%]
tests/unit/hypothesis/test_avl_earliest.py::test_overlapping_reservations PASSED [ 11%]
tests/unit/hypothesis/test_boundary.py::test_reserve_and_release_intervals PASSED [ 11%]
tests/unit/hypothesis/test_boundary.py::test_find_interval PASSED [ 12%]
tests/unit/hypothesis/test_boundary.py::test_total_available_length PASSED [ 12%]
tests/unit/hypothesis/test_boundary.py::test_interval_merging PASSED [ 13%]
tests/unit/hypothesis/test_boundary.py::test_empty_manager PASSED [ 13%]
tests/unit/hypothesis/test_boundary.py::test_adjacent_intervals PASSED [ 14%]
tests/unit/hypothesis/test_boundary.py::test_overlapping_release PASSED [ 14%]
tests/unit/hypothesis/test_boundary.py::test_reserve_empty_interval PASSED [ 15%]
tests/unit/hypothesis/test_boundary.py::test_random_operations PASSED [ 15%]
tests/unit/hypothesis/test_boundary.py::test_full_reserve_and_release PASSED [ 16%]
tests/unit/hypothesis/test_boundary.py::test_single_point_reservations PASSED [ 16%]
tests/unit/hypothesis/test_boundary.py::test_non_overlapping_reservations PASSED [ 17%]
tests/unit/hypothesis/test_boundary.py::test_overlapping_reservations PASSED [ 17%]
tests/unit/hypothesis/test_boundary_cpp.py::test_reserve_and_release_intervals PASSED [ 18%]
tests/unit/hypothesis/test_boundary_cpp.py::test_find_interval PASSED [ 18%]
tests/unit/hypothesis/test_boundary_cpp.py::test_total_available_length PASSED [ 19%]
tests/unit/hypothesis/test_boundary_cpp.py::test_interval_merging PASSED [ 19%]
tests/unit/hypothesis/test_boundary_cpp.py::test_empty_manager PASSED [ 20%]
tests/unit/hypothesis/test_boundary_cpp.py::test_adjacent_intervals PASSED [ 20%]
tests/unit/hypothesis/test_boundary_cpp.py::test_overlapping_release PASSED [ 21%]
tests/unit/hypothesis/test_boundary_cpp.py::test_reserve_empty_interval PASSED [ 21%]
tests/unit/hypothesis/test_boundary_cpp.py::test_random_operations PASSED [ 22%]
tests/unit/hypothesis/test_boundary_cpp.py::test_full_reserve_and_release PASSED [ 22%]
tests/unit/hypothesis/test_boundary_cpp.py::test_single_point_reservations PASSED [ 23%]
tests/unit/hypothesis/test_boundary_cpp.py::test_non_overlapping_reservations PASSED [ 23%]
tests/unit/hypothesis/test_boundary_cpp.py::test_overlapping_reservations PASSED [ 24%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_reserve_and_release_intervals SKIPPED [ 24%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_find_interval SKIPPED [ 25%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_total_available_length SKIPPED [ 25%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_interval_merging SKIPPED [ 26%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_empty_manager SKIPPED [ 26%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_adjacent_intervals SKIPPED [ 27%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_overlapping_release SKIPPED [ 27%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_reserve_empty_interval SKIPPED [ 28%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_random_operations SKIPPED [ 28%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_full_reserve_and_release SKIPPED [ 29%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_single_point_reservations SKIPPED [ 29%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_non_overlapping_reservations SKIPPED [ 30%]
tests/unit/hypothesis/test_boundary_cpp_ic.py::test_overlapping_reservations SKIPPED [ 30%]
tests/unit/hypothesis/test_boundary_summary.py::test_py_boundary_summary_operations PASSED [ 31%]
tests/unit/hypothesis/test_boundary_summary.py::test_py_boundary_summary_mixed_operations PASSED [ 31%]
tests/unit/hypothesis/test_boundary_summary.py::test_cpp_boundary_summary_operations PASSED [ 32%]
tests/unit/hypothesis/test_boundary_summary.py::test_py_cpp_boundary_summary_equivalence PASSED [ 32%]
tests/unit/hypothesis/test_boundary_summary.py::test_boundary_summary_caching PASSED [ 33%]
tests/unit/hypothesis/test_boundary_summary.py::test_boundary_summary_advanced_queries PASSED [ 34%]
tests/unit/hypothesis/test_boundary_summary.py::test_boundary_summary_performance PASSED [ 34%]
tests/unit/hypothesis/test_boundary_summary.py::test_boundary_summary_vs_regular_boundary PASSED [ 35%]
tests/unit/hypothesis/test_summary.py::test_summary_statistics_consistency PASSED [ 35%]
tests/unit/hypothesis/test_summary.py::test_mixed_operations_invariants PASSED [ 36%]
tests/unit/hypothesis/test_summary.py::test_find_best_fit_correctness PASSED [ 36%]
tests/unit/hypothesis/test_summary.py::test_find_largest_available PASSED [ 37%]
tests/unit/hypothesis/test_summary.py::test_tree_summary_merging PASSED [ 37%]
tests/unit/hypothesis/test_summary.py::test_scheduling_scenario PASSED [ 38%]
tests/unit/hypothesis/test_summary.py::test_fragmentation_metrics PASSED [ 38%]
tests/unit/hypothesis/test_summary.py::test_find_interval_after_point PASSED [ 39%]
tests/unit/hypothesis/test_summary.py::test_empty_tree_operations PASSED [ 39%]
tests/unit/hypothesis/test_treap.py::test_treap_basic_operations PASSED [ 40%]
tests/unit/hypothesis/test_treap.py::test_treap_mixed_operations PASSED [ 40%]
tests/unit/hypothesis/test_treap.py::test_treap_find_operations PASSED [ 41%]
tests/unit/hypothesis/test_treap.py::test_treap_random_sampling PASSED [ 41%]
tests/unit/hypothesis/test_treap.py::test_treap_split_merge PASSED [ 42%]
tests/unit/hypothesis/test_treap.py::test_treap_probabilistic_balance PASSED [ 42%]
tests/unit/hypothesis/test_treap.py::test_treap_interval_merging PASSED [ 43%]
tests/unit/hypothesis/test_treap.py::test_treap_performance_characteristics PASSED [ 43%]
tests/unit/hypothesis/test_treap.py::test_treap_rank_operations PASSED [ 44%]
tests/unit/hypothesis/test_treap.py::test_treap_overlapping_operations PASSED [ 44%]
tests/unit/hypothesis/test_treap.py::test_treap_correctness_vs_simple_tree PASSED [ 45%]
tests/unit/hypothesis/test_treap.py::test_treap_edge_cases PASSED [ 45%]
tests/unit/hypothesis/test_treap.py::test_treap_stress_operations PASSED [ 46%]
tests/unit/hypothesis/test_treap.py::test_treap_probabilistic_properties PASSED [ 46%]
tests/unit/hypothesis/test_treap.py::test_treap_memory_efficiency PASSED [ 47%]
tests/unit/hypothesis/test_treap_cpp.py::test_cpp_treap_basic_operations PASSED [ 47%]
tests/unit/hypothesis/test_treap_cpp.py::test_cpp_treap_mixed_operations PASSED [ 48%]
tests/unit/hypothesis/test_treap_cpp.py::test_cpp_py_treap_equivalence PASSED [ 48%]
tests/unit/hypothesis/test_treap_cpp.py::test_cpp_treap_performance PASSED [ 49%]
tests/unit/hypothesis/test_treap_cpp.py::test_treap_random_operations PASSED [ 49%]
tests/unit/hypothesis/test_treap_cpp.py::test_cpp_treap_split_operations PASSED [ 50%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[py_avl] PASSED [ 50%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[py_boundary] PASSED [ 51%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[py_summary] PASSED [ 51%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[py_treap] PASSED [ 52%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[py_boundary_summary] PASSED [ 52%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[cpp_boundary] PASSED [ 53%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[cpp_treap] PASSED [ 53%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[cpp_boundary_summary] PASSED [ 54%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[py_avl] PASSED [ 54%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[py_boundary] PASSED [ 55%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[py_summary] PASSED [ 55%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[py_treap] PASSED [ 56%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[py_boundary_summary] PASSED [ 56%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[cpp_boundary] PASSED [ 57%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[cpp_treap] PASSED [ 57%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[cpp_boundary_summary] PASSED [ 58%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[py_avl] PASSED [ 58%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[py_boundary] PASSED [ 59%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[py_summary] PASSED [ 59%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[py_treap] PASSED [ 60%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[py_boundary_summary] PASSED [ 60%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[cpp_boundary] PASSED [ 61%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[cpp_treap] PASSED [ 61%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[cpp_boundary_summary] PASSED [ 62%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[py_avl] PASSED [ 62%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[py_boundary] PASSED [ 63%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[py_summary] PASSED [ 63%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[py_treap] PASSED [ 64%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[py_boundary_summary] PASSED [ 64%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[cpp_boundary] PASSED [ 65%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[cpp_treap] PASSED [ 65%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[cpp_boundary_summary] PASSED [ 66%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[py_avl] PASSED [ 67%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[py_boundary] PASSED [ 67%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[py_summary] PASSED [ 68%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[py_treap] PASSED [ 68%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[py_boundary_summary] PASSED [ 69%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[cpp_boundary] PASSED [ 69%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[cpp_treap] PASSED [ 70%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[cpp_boundary_summary] PASSED [ 70%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[py_avl] PASSED [ 71%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[py_boundary] PASSED [ 71%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[py_summary] PASSED [ 72%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[py_treap] PASSED [ 72%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[py_boundary_summary] PASSED [ 73%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[cpp_boundary] PASSED [ 73%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[cpp_treap] PASSED [ 74%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[cpp_boundary_summary] PASSED [ 74%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[py_avl] PASSED [ 75%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[py_boundary] PASSED [ 75%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[py_summary] PASSED [ 76%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[py_treap] PASSED [ 76%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[py_boundary_summary] PASSED [ 77%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[cpp_boundary] PASSED [ 77%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[cpp_treap] PASSED [ 78%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[cpp_boundary_summary] PASSED [ 78%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[py_avl] SKIPPED [ 79%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[py_boundary] SKIPPED [ 79%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[py_summary] PASSED [ 80%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[py_treap] SKIPPED [ 80%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[py_boundary_summary] PASSED [ 81%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[cpp_boundary] SKIPPED [ 81%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[cpp_treap] SKIPPED [ 82%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[cpp_boundary_summary] PASSED [ 82%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[py_avl] SKIPPED [ 83%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[py_boundary] SKIPPED [ 83%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[py_summary] PASSED [ 84%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[py_treap] SKIPPED [ 84%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[py_boundary_summary] SKIPPED [ 85%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[cpp_boundary] SKIPPED [ 85%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[cpp_treap] SKIPPED [ 86%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[cpp_boundary_summary] SKIPPED [ 86%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[py_avl] SKIPPED [ 87%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[py_boundary] SKIPPED [ 87%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[py_summary] SKIPPED [ 88%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[py_treap] PASSED [ 88%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[py_boundary_summary] SKIPPED [ 89%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[cpp_boundary] SKIPPED [ 89%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[cpp_treap] SKIPPED [ 90%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[cpp_boundary_summary] SKIPPED [ 90%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[py_avl] SKIPPED [ 91%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[py_boundary] SKIPPED [ 91%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[py_summary] SKIPPED [ 92%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[py_treap] PASSED [ 92%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[py_boundary_summary] SKIPPED [ 93%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[cpp_boundary] SKIPPED [ 93%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[cpp_treap] PASSED [ 94%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[cpp_boundary_summary] SKIPPED [ 94%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[py_avl] SKIPPED [ 95%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[py_boundary] SKIPPED [ 95%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[py_summary] SKIPPED [ 96%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[py_treap] SKIPPED [ 96%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[py_boundary_summary] PASSED [ 97%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[cpp_boundary] SKIPPED [ 97%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[cpp_treap] SKIPPED [ 98%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[cpp_boundary_summary] PASSED [ 98%]
tests/unit/test_unified_implementations.py::TestCrossImplementationEquivalence::test_python_cpp_equivalence PASSED [ 99%]
tests/unit/test_unified_implementations.py::test_implementation_discovery PASSED [100%]

======================= 153 passed, 44 skipped in 3.90s ========================
🔄 Running cross-implementation validation...
============================= test session starts ==============================
platform darwin -- Python 3.12.7, pytest-8.4.2, pluggy-1.6.0 -- /Users/joseph/dev/Tree-Mendous/.venv/bin/python3
cachedir: .pytest_cache
hypothesis profile 'default'
rootdir: /Users/joseph/dev/Tree-Mendous
configfile: pyproject.toml
plugins: anyio-4.11.0, hypothesis-6.140.2
collecting ... collected 98 items

tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[py_avl] PASSED [ 1%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[py_boundary] PASSED [ 2%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[py_summary] PASSED [ 3%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[py_treap] PASSED [ 4%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[py_boundary_summary] PASSED [ 5%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[cpp_boundary] PASSED [ 6%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[cpp_treap] PASSED [ 7%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_basic_interface_compliance[cpp_boundary_summary] PASSED [ 8%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[py_avl] PASSED [ 9%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[py_boundary] PASSED [ 10%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[py_summary] PASSED [ 11%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[py_treap] PASSED [ 12%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[py_boundary_summary] PASSED [ 13%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[cpp_boundary] PASSED [ 14%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[cpp_treap] PASSED [ 15%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_empty_manager[cpp_boundary_summary] PASSED [ 16%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[py_avl] PASSED [ 17%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[py_boundary] PASSED [ 18%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[py_summary] PASSED [ 19%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[py_treap] PASSED [ 20%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[py_boundary_summary] PASSED [ 21%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[cpp_boundary] PASSED [ 22%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[cpp_treap] PASSED [ 23%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_single_interval_release[cpp_boundary_summary] PASSED [ 24%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[py_avl] PASSED [ 25%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[py_boundary] PASSED [ 26%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[py_summary] PASSED [ 27%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[py_treap] PASSED [ 28%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[py_boundary_summary] PASSED [ 29%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[cpp_boundary] PASSED [ 30%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[cpp_treap] PASSED [ 31%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_reserve_and_release_cycle[cpp_boundary_summary] PASSED [ 32%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[py_avl] PASSED [ 33%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[py_boundary] PASSED [ 34%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[py_summary] PASSED [ 35%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[py_treap] PASSED [ 36%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[py_boundary_summary] PASSED [ 37%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[cpp_boundary] PASSED [ 38%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[cpp_treap] PASSED [ 39%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_multiple_releases[cpp_boundary_summary] PASSED [ 40%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[py_avl] PASSED [ 41%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[py_boundary] PASSED [ 42%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[py_summary] PASSED [ 43%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[py_treap] PASSED [ 44%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[py_boundary_summary] PASSED [ 45%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[cpp_boundary] PASSED [ 46%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[cpp_treap] PASSED [ 47%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_basic[cpp_boundary_summary] PASSED [ 48%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[py_avl] PASSED [ 50%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[py_boundary] PASSED [ 51%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[py_summary] PASSED [ 52%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[py_treap] PASSED [ 53%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[py_boundary_summary] PASSED [ 54%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[cpp_boundary] PASSED [ 55%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[cpp_treap] PASSED [ 56%]
tests/unit/test_unified_implementations.py::TestUniversalIntervalOperations::test_find_interval_insufficient_space[cpp_boundary_summary] PASSED [ 57%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[py_avl] SKIPPED [ 58%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[py_boundary] SKIPPED [ 59%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[py_summary] PASSED [ 60%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[py_treap] SKIPPED [ 61%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[py_boundary_summary] PASSED [ 62%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[cpp_boundary] SKIPPED [ 63%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[cpp_treap] SKIPPED [ 64%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_summary_statistics[cpp_boundary_summary] PASSED [ 65%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[py_avl] SKIPPED [ 66%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[py_boundary] SKIPPED [ 67%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[py_summary] PASSED [ 68%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[py_treap] SKIPPED [ 69%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[py_boundary_summary] SKIPPED [ 70%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[cpp_boundary] SKIPPED [ 71%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[cpp_treap] SKIPPED [ 72%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_best_fit_allocation[cpp_boundary_summary] SKIPPED [ 73%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[py_avl] SKIPPED [ 74%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[py_boundary] SKIPPED [ 75%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[py_summary] SKIPPED [ 76%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[py_treap] PASSED [ 77%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[py_boundary_summary] SKIPPED [ 78%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[cpp_boundary] SKIPPED [ 79%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[cpp_treap] SKIPPED [ 80%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_random_sampling[cpp_boundary_summary] SKIPPED [ 81%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[py_avl] SKIPPED [ 82%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[py_boundary] SKIPPED [ 83%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[py_summary] SKIPPED [ 84%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[py_treap] PASSED [ 85%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[py_boundary_summary] SKIPPED [ 86%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[cpp_boundary] SKIPPED [ 87%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[cpp_treap] PASSED [ 88%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_treap_properties[cpp_boundary_summary] SKIPPED [ 89%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[py_avl] SKIPPED [ 90%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[py_boundary] SKIPPED [ 91%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[py_summary] SKIPPED [ 92%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[py_treap] SKIPPED [ 93%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[py_boundary_summary] PASSED [ 94%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[cpp_boundary] SKIPPED [ 95%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[cpp_treap] SKIPPED [ 96%]
tests/unit/test_unified_implementations.py::TestImplementationSpecificFeatures::test_performance_tracking[cpp_boundary_summary] PASSED [ 97%]
tests/unit/test_unified_implementations.py::TestCrossImplementationEquivalence::test_python_cpp_equivalence PASSED [ 98%]
tests/unit/test_unified_implementations.py::test_implementation_discovery PASSED [100%]

======================== 67 passed, 31 skipped in 0.05s ========================
[feature/release-system-uv 96a640e] Release v0.2.2
3 files changed, 3 insertions(+), 3 deletions(-)
✅ Tag v0.2.2 created and pushed!
🔗 Manually create release at: https://github.com/josephjohncox/Tree-Mendous/releases/tag/v0.2.2 - Tag-only workflow for debugging

🧹 Simplified Justfile

  • Before: 100+ lines of complex inline bash with escaping issues
  • After: Clean 2-line commands calling focused scripts
  • No more quote/backtick escaping nightmares!

Modern CI/CD with uv

  • Multi-platform testing: Ubuntu, macOS, Windows
  • Faster dependency resolution with uv instead of poetry
  • Consistent tooling across local dev and CI
  • Proper C++ extension building in CI

🎯 Same Great UX

  • One command release: just release patch "Fix bugs"
  • Full automation: version bump → test → build → tag → GitHub release → PyPI
  • Troubleshooting: just tag-release patch "Debug" for tag-only

🔧 Technical Benefits

  • ✅ Scripts can be tested independently
  • ✅ Easy to maintain and debug
  • ✅ Clean separation of concerns
  • ✅ Can be reused outside of just
  • ✅ No more Justfile syntax issues

🧪 Testing

  • CI passes on all platforms
  • Release scripts work correctly
  • uv builds succeed

The release system is now production-ready with clean, maintainable code! 🎉

- Extract complex release logic into clean bash scripts:
  - scripts/create-release.sh: Main release workflow
  - scripts/generate-release-notes.sh: Changelog & GitHub release
  - scripts/create-tag.sh: Tag-only workflow for debugging
- Simplify Justfile release commands to use extracted scripts
- Update CI/CD to use uv instead of poetry:
  - Multi-platform testing (Ubuntu, macOS, Windows)
  - Faster dependency resolution with uv
  - Consistent tooling across local dev and CI
- Maintain full automation: just release patch 'message'
- Fix escaping issues by moving logic to proper bash files
- Add explicit venv creation with uv venv
- Use --all-extras flag to ensure all test dependencies are installed
- Apply same fix to both test and publish jobs
@josephjohncox
josephjohncox merged commit 0d055e9 into main Oct 1, 2025
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant