splent-cli 1.34.0__tar.gz → 1.34.1__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.
Files changed (281) hide show
  1. {splent_cli-1.34.0/src/splent_cli.egg-info → splent_cli-1.34.1}/PKG-INFO +1 -1
  2. {splent_cli-1.34.0 → splent_cli-1.34.1}/pyproject.toml +1 -1
  3. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_create.py +2 -5
  4. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_build.py +1 -20
  5. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_create.py +2 -5
  6. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/release/release_resume.py +19 -15
  7. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/marketplace.py +2 -6
  8. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/release.py +61 -16
  9. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_ci_upgrade.yml.j2 +7 -1
  10. splent_cli-1.34.1/src/splent_cli/utils/running_version.py +28 -0
  11. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/template_drift.py +2 -5
  12. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/upgrade_plan.py +3 -0
  13. {splent_cli-1.34.0 → splent_cli-1.34.1/src/splent_cli.egg-info}/PKG-INFO +1 -1
  14. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli.egg-info/SOURCES.txt +1 -0
  15. {splent_cli-1.34.0 → splent_cli-1.34.1}/COPYING +0 -0
  16. {splent_cli-1.34.0 → splent_cli-1.34.1}/COPYING.LESSER +0 -0
  17. {splent_cli-1.34.0 → splent_cli-1.34.1}/README.md +0 -0
  18. {splent_cli-1.34.0 → splent_cli-1.34.1}/setup.cfg +0 -0
  19. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/__init__.py +0 -0
  20. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/__main__.py +0 -0
  21. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/cli.py +0 -0
  22. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/__init__.py +0 -0
  23. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/cache/__init__.py +0 -0
  24. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/cache/cache_clear.py +0 -0
  25. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/cache/cache_orphans.py +0 -0
  26. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/cache/cache_outdated.py +0 -0
  27. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/cache/cache_prune.py +0 -0
  28. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/cache/cache_size.py +0 -0
  29. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/cache/cache_status.py +0 -0
  30. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/cache/cache_usage.py +0 -0
  31. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/cache/cache_versions.py +0 -0
  32. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/__init__.py +0 -0
  33. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_contracts.py +0 -0
  34. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_deps.py +0 -0
  35. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_docker.py +0 -0
  36. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_env.py +0 -0
  37. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_features.py +0 -0
  38. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_github.py +0 -0
  39. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_infra.py +0 -0
  40. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_product.py +0 -0
  41. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_pypi.py +0 -0
  42. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_pyproject.py +0 -0
  43. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/check/check_releases.py +0 -0
  44. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/clear/__init__.py +0 -0
  45. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/clear/clear_build.py +0 -0
  46. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/clear/clear_log.py +0 -0
  47. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/clear/clear_uploads.py +0 -0
  48. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/command/__init__.py +0 -0
  49. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/command/command_create.py +0 -0
  50. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/coverage.py +0 -0
  51. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/database/db_console.py +0 -0
  52. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/database/db_dump.py +0 -0
  53. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/database/db_migrate.py +0 -0
  54. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/database/db_reset.py +0 -0
  55. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/database/db_restore.py +0 -0
  56. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/database/db_rollback.py +0 -0
  57. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/database/db_seed.py +0 -0
  58. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/database/db_status.py +0 -0
  59. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/database/db_upgrade.py +0 -0
  60. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/doctor.py +0 -0
  61. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/env/env_list.py +0 -0
  62. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/env/env_set.py +0 -0
  63. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/env/env_show.py +0 -0
  64. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/export/__init__.py +0 -0
  65. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/export/export_puml.py +0 -0
  66. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_add.py +0 -0
  67. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_attach.py +0 -0
  68. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_clean.py +0 -0
  69. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_clone.py +0 -0
  70. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_compat.py +0 -0
  71. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_compile.py +0 -0
  72. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_contract.py +0 -0
  73. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_delete.py +0 -0
  74. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_detach.py +0 -0
  75. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_discard.py +0 -0
  76. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_drift.py +0 -0
  77. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_env.py +0 -0
  78. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_fork.py +0 -0
  79. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_git.py +0 -0
  80. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_hook_add.py +0 -0
  81. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_hook_remove.py +0 -0
  82. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_hooks.py +0 -0
  83. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_impact.py +0 -0
  84. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_info.py +0 -0
  85. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_inject_config.py +0 -0
  86. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_install.py +0 -0
  87. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_list.py +0 -0
  88. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_order.py +0 -0
  89. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_outdated.py +0 -0
  90. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_pin.py +0 -0
  91. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_pip_install.py +0 -0
  92. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_pull.py +0 -0
  93. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_refine.py +0 -0
  94. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_release.py +0 -0
  95. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_remove.py +0 -0
  96. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_rename.py +0 -0
  97. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_search.py +0 -0
  98. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_status.py +0 -0
  99. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_sync_template.py +0 -0
  100. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_test.py +0 -0
  101. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_translate.py +0 -0
  102. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_unlock.py +0 -0
  103. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_upgrade.py +0 -0
  104. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_versions.py +0 -0
  105. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/feature/feature_xray.py +0 -0
  106. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/lint.py +0 -0
  107. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/locust.py +0 -0
  108. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/marketplace/login.py +0 -0
  109. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/marketplace/logout.py +0 -0
  110. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/marketplace/marketplace_auth_utils.py +0 -0
  111. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/marketplace/marketplace_index.py +0 -0
  112. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/marketplace/whoami.py +0 -0
  113. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/__init__.py +0 -0
  114. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_auto_require.py +0 -0
  115. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_clean.py +0 -0
  116. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_commands.py +0 -0
  117. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_config.py +0 -0
  118. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_configure.py +0 -0
  119. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_console.py +0 -0
  120. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_containers.py +0 -0
  121. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_deploy.py +0 -0
  122. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_derive.py +0 -0
  123. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_deselect.py +0 -0
  124. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_down.py +0 -0
  125. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_drift.py +0 -0
  126. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_env.py +0 -0
  127. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_list.py +0 -0
  128. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_logs.py +0 -0
  129. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_missing.py +0 -0
  130. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_port.py +0 -0
  131. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_release.py +0 -0
  132. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_resolve.py +0 -0
  133. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_restart.py +0 -0
  134. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_routes.py +0 -0
  135. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_run.py +0 -0
  136. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_select.py +0 -0
  137. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_shell.py +0 -0
  138. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_signals.py +0 -0
  139. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_sync_template.py +0 -0
  140. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_test.py +0 -0
  141. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_up.py +0 -0
  142. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/product/product_validate.py +0 -0
  143. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/release/__init__.py +0 -0
  144. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/release/release_core.py +0 -0
  145. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/selenium.py +0 -0
  146. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/__init__.py +0 -0
  147. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_add_constraints.py +0 -0
  148. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_add_feature.py +0 -0
  149. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_compare.py +0 -0
  150. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_configurations.py +0 -0
  151. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_create.py +0 -0
  152. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_deps.py +0 -0
  153. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_features.py +0 -0
  154. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_fetch.py +0 -0
  155. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_info.py +0 -0
  156. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_list.py +0 -0
  157. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_outdated.py +0 -0
  158. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_pin.py +0 -0
  159. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_publish.py +0 -0
  160. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_remove_feature.py +0 -0
  161. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/spl/spl_utils.py +0 -0
  162. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/tokens_setup.py +0 -0
  163. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/uvl/uvl_utils.py +0 -0
  164. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/commands/version.py +0 -0
  165. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/__init__.py +0 -0
  166. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/compose.py +0 -0
  167. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/context.py +0 -0
  168. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/credentials.py +0 -0
  169. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/deploy_bundle.py +0 -0
  170. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/image_registry.py +0 -0
  171. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/index_refresh.py +0 -0
  172. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/marketplace_api.py +0 -0
  173. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/marketplace_url.py +0 -0
  174. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/preflight.py +0 -0
  175. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/pypi_quota.py +0 -0
  176. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/registry.py +0 -0
  177. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/release_dry_run.py +0 -0
  178. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/release_gate.py +0 -0
  179. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/services/spl_store.py +0 -0
  180. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_.gitignore.j2 +0 -0
  181. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_MANIFEST.in.j2 +0 -0
  182. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_README.md.j2 +0 -0
  183. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_commands.py.j2 +0 -0
  184. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_config.py.j2 +0 -0
  185. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_docker-compose.dev.yml.j2 +0 -0
  186. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_docker-compose.prod.yml.j2 +0 -0
  187. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_docker.env.example.j2 +0 -0
  188. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_forms.py.j2 +0 -0
  189. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_hooks.py.j2 +0 -0
  190. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_init.py.j2 +0 -0
  191. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_init_config.py.j2 +0 -0
  192. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_init_light.py.j2 +0 -0
  193. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_init_service.py.j2 +0 -0
  194. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_migrations_alembic.ini.j2 +0 -0
  195. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_migrations_env.py.j2 +0 -0
  196. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_migrations_script.py.mako.j2 +0 -0
  197. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_models.py.j2 +0 -0
  198. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_pyproject.toml.j2 +0 -0
  199. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_pyproject_minimal.toml.j2 +0 -0
  200. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_repositories.py.j2 +0 -0
  201. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_routes.py.j2 +0 -0
  202. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_scripts.js.j2 +0 -0
  203. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_seeders.py.j2 +0 -0
  204. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_services.py.j2 +0 -0
  205. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_signals.py.j2 +0 -0
  206. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_templates_index.html.j2 +0 -0
  207. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_tests_conftest.py.j2 +0 -0
  208. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_tests_e2e.py.j2 +0 -0
  209. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_tests_functional.py.j2 +0 -0
  210. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_tests_integration.py.j2 +0 -0
  211. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_tests_locustfile.py.j2 +0 -0
  212. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_tests_unit.py.j2 +0 -0
  213. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/feature/feature_webpack.config.js.j2 +0 -0
  214. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/licenses/COPYING +0 -0
  215. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/licenses/COPYING.LESSER +0 -0
  216. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_.env.dev.example.j2 +0 -0
  217. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_.env.prod.example.j2 +0 -0
  218. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_.gitignore.j2 +0 -0
  219. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_00_core_requirements_dev.sh.j2 +0 -0
  220. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_00_install_features.sh.j2 +0 -0
  221. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_01_compile_assets.sh.j2 +0 -0
  222. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_02_0_db_wait_connection.sh.j2 +0 -0
  223. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_02_1_db_create_db_test.sh.j2 +0 -0
  224. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_02_2_db_create_splent_migrations.sh.j2 +0 -0
  225. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_03_initialize_migrations.sh.j2 +0 -0
  226. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_04_handle_migrations.sh.j2 +0 -0
  227. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_05_0_start_app_dev.sh.j2 +0 -0
  228. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_05_1_start_app_prod.sh.j2 +0 -0
  229. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_400.html +0 -0
  230. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_401.html +0 -0
  231. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_404.html +0 -0
  232. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_500.html +0 -0
  233. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_Dockerfile.dev.dockerignore.j2 +0 -0
  234. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_Dockerfile.dev.j2 +0 -0
  235. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_Dockerfile.prod.dockerignore.j2 +0 -0
  236. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_Dockerfile.prod.j2 +0 -0
  237. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_README.md.j2 +0 -0
  238. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_app.css +0 -0
  239. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_app.js +0 -0
  240. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_base_template.html +0 -0
  241. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_ci_validate.yml.j2 +0 -0
  242. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_config.py.j2 +0 -0
  243. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_docker-compose.dev.yml.j2 +0 -0
  244. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_docker-compose.prod.yml.j2 +0 -0
  245. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_dropzone.css +0 -0
  246. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_entrypoint.dev.sh.j2 +0 -0
  247. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_entrypoint.prod.sh.j2 +0 -0
  248. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_errors.py.j2 +0 -0
  249. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_favicon.svg +0 -0
  250. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_init.py.j2 +0 -0
  251. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_logging.py.j2 +0 -0
  252. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_own.css +0 -0
  253. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_package.json.j2 +0 -0
  254. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_pyproject.toml.j2 +0 -0
  255. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/templates/product/product_uvl.j2 +0 -0
  256. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/__init__.py +0 -0
  257. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/archetype.py +0 -0
  258. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/cache_utils.py +0 -0
  259. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/command_loader.py +0 -0
  260. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/contract_freshness.py +0 -0
  261. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/db_client.py +0 -0
  262. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/db_utils.py +0 -0
  263. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/decorators.py +0 -0
  264. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/dynamic_imports.py +0 -0
  265. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/feature_installer.py +0 -0
  266. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/feature_utils.py +0 -0
  267. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/forge.py +0 -0
  268. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/git_url.py +0 -0
  269. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/integrity.py +0 -0
  270. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/io_utils.py +0 -0
  271. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/lifecycle.py +0 -0
  272. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/manifest.py +0 -0
  273. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/path_utils.py +0 -0
  274. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/proc.py +0 -0
  275. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/redact.py +0 -0
  276. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/refinement_facts.py +0 -0
  277. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli/utils/toml_edit.py +0 -0
  278. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli.egg-info/dependency_links.txt +0 -0
  279. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli.egg-info/entry_points.txt +0 -0
  280. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli.egg-info/requires.txt +0 -0
  281. {splent_cli-1.34.0 → splent_cli-1.34.1}/src/splent_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splent_cli
3
- Version: 1.34.0
3
+ Version: 1.34.1
4
4
  Summary: SPLENT-CLI is a CLI to be able to work on your development more easily.
5
5
  Author-email: DiversoLab <diversolab@us.es>
6
6
  License-Expression: LGPL-3.0-or-later
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "splent_cli"
7
- version = "1.34.0"
7
+ version = "1.34.1"
8
8
  description = "SPLENT-CLI is a CLI to be able to work on your development more easily."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -10,12 +10,9 @@ from splent_cli.utils.feature_utils import (
10
10
  )
11
11
  from splent_cli.services import context
12
12
 
13
- try:
14
- from importlib.metadata import version as _pkg_version
13
+ from splent_cli.utils.running_version import cli_version as _running_cli_version
15
14
 
16
- _CLI_VERSION = _pkg_version("splent_cli")
17
- except Exception:
18
- _CLI_VERSION = "dev"
15
+ _CLI_VERSION = _running_cli_version()
19
16
 
20
17
 
21
18
  FEATURE_TYPES = ("full", "light", "config", "service")
@@ -9,6 +9,7 @@ import click
9
9
  from splent_cli.services import context, compose, deploy_bundle
10
10
  from splent_cli.services.preflight import run_preflight
11
11
  from splent_cli.utils.feature_utils import read_features_from_data
12
+ from splent_cli.utils.running_version import cli_version
12
13
  from splent_cli.utils.io_utils import (
13
14
  atomic_write,
14
15
  env_line,
@@ -406,26 +407,6 @@ def framework_version(workspace: str) -> str:
406
407
  )
407
408
 
408
409
 
409
- def cli_version() -> str:
410
- """The version of the CLI that is running, the one the image installs too.
411
-
412
- Read from the source tree it runs from when that is a checkout: an
413
- editable install records its version once, when it is installed, and the
414
- checkout moves on with every release.
415
- """
416
- from importlib.metadata import version
417
- from pathlib import Path
418
-
419
- import splent_cli
420
-
421
- pyproject = Path(splent_cli.__file__).resolve().parents[2] / "pyproject.toml"
422
- if pyproject.is_file():
423
- project = load_toml(str(pyproject)).get("project", {})
424
- if project.get("name") == "splent_cli" and project.get("version"):
425
- return str(project["version"])
426
- return version("splent_cli")
427
-
428
-
429
410
  def runtime_pins(workspace: str) -> dict:
430
411
  """{package: version} the production image installs from PyPI."""
431
412
  return {
@@ -20,12 +20,9 @@ from splent_cli.utils.template_drift import (
20
20
  )
21
21
  from splent_cli.utils.template_drift import _forge_host as _template_forge_host
22
22
 
23
- try:
24
- from importlib.metadata import version as _pkg_version
23
+ from splent_cli.utils.running_version import cli_version as _running_cli_version
25
24
 
26
- _CLI_VERSION = _pkg_version("splent_cli")
27
- except Exception:
28
- _CLI_VERSION = "dev"
25
+ _CLI_VERSION = _running_cli_version()
29
26
 
30
27
 
31
28
  PRODUCT_NAME_RE = re.compile(r"^[a-z_][a-z0-9_]*$")
@@ -21,7 +21,7 @@ something is already wrong:
21
21
 
22
22
  and two more keep what it publishes equal to what the tag says:
23
23
 
24
- * origin/main only ever receives the commit the tag describes, as a
24
+ * the release branch on origin only ever receives the commit the tag describes, as a
25
25
  fast-forward. A divergence leaves the forge half stuck, never a tag on a
26
26
  commit no remote branch contains
27
27
  * nothing is built from uncommitted changes, and the Docker image, whose
@@ -153,25 +153,26 @@ def _is_ancestor(path: str, ancestor: str, descendant: str) -> bool:
153
153
 
154
154
 
155
155
  def plan_main_push(path: str, tag: str) -> tuple[str, str | None]:
156
- """How origin/main comes to carry the commit *tag* describes.
156
+ """How the release branch on origin comes to carry the commit *tag* describes.
157
157
 
158
158
  Returns ``(state, sha)``, where *sha* is the commit that is or will be
159
159
  tagged: the tag's commit when the tag exists locally, otherwise HEAD,
160
160
  because that is where the tag will be created. Never HEAD when a tag
161
161
  exists, since the operator may have committed more work since.
162
162
 
163
- ``contained`` origin/main already has it, nothing to push
164
- ``push`` pushing it is a fast-forward of origin/main
163
+ ``contained`` origin already has it on the branch, nothing to push
164
+ ``push`` pushing it is a fast-forward of that branch
165
165
  ``diverged`` it is neither, so no tag can be published on it
166
- ``unknown`` there is no origin/main to compare with, nothing is pushed
166
+ ``unknown`` origin has no such branch to compare with, nothing is pushed
167
167
  ``timeout`` origin did not answer in time, so nothing can be compared
168
168
  """
169
+ branch = release.release_branch(path)
169
170
  ref = (
170
171
  f"refs/tags/{tag}^{{commit}}" if release.local_tag_exists(path, tag) else "HEAD"
171
172
  )
172
173
  try:
173
174
  subprocess.run(
174
- ["git", "fetch", "origin", "main"],
175
+ ["git", "fetch", "origin", branch],
175
176
  cwd=path,
176
177
  capture_output=True,
177
178
  env=_non_interactive_env(),
@@ -180,7 +181,7 @@ def plan_main_push(path: str, tag: str) -> tuple[str, str | None]:
180
181
  except subprocess.TimeoutExpired:
181
182
  return "timeout", _git_out(path, ["rev-parse", "--verify", ref])
182
183
  sha = _git_out(path, ["rev-parse", "--verify", ref])
183
- remote = _git_out(path, ["rev-parse", "--verify", "refs/remotes/origin/main"])
184
+ remote = _git_out(path, ["rev-parse", "--verify", f"refs/remotes/origin/{branch}"])
184
185
  if not sha or not remote:
185
186
  return "unknown", sha
186
187
  if sha == remote or _is_ancestor(path, sha, remote):
@@ -191,10 +192,11 @@ def plan_main_push(path: str, tag: str) -> tuple[str, str | None]:
191
192
 
192
193
 
193
194
  def push_commit_to_main(path: str, sha: str) -> str | None:
194
- """Fast-forward origin/main to *sha*. None on success, else the reason."""
195
+ """Fast-forward the release branch on origin to *sha*. None on success, else the reason."""
196
+ branch = release.release_branch(path)
195
197
  try:
196
198
  r = subprocess.run(
197
- ["git", "push", "origin", f"{sha}:refs/heads/main"],
199
+ ["git", "push", "origin", f"{sha}:refs/heads/{branch}"],
198
200
  cwd=path,
199
201
  capture_output=True,
200
202
  text=True,
@@ -207,7 +209,7 @@ def push_commit_to_main(path: str, sha: str) -> str | None:
207
209
  )
208
210
  if r.returncode != 0:
209
211
  return (r.stderr or "").strip() or f"git push exited {r.returncode}"
210
- click.echo(f" push origin/main updated to {sha[:12]}")
212
+ click.echo(f" push origin/{branch} updated to {sha[:12]}")
211
213
  return None
212
214
 
213
215
 
@@ -419,7 +421,7 @@ def release_resume(target, assume_yes, no_pypi, no_forge, no_github, no_docker,
419
421
  push_tag = make_release = False
420
422
  main_sha = None
421
423
  summary = (
422
- f"origin/main and the commit {tag} describes have diverged, so "
424
+ f"origin/{release.release_branch(path)} and the commit {tag} describes have diverged, so "
423
425
  "the tag was not pushed"
424
426
  if main_state == "diverged"
425
427
  else "origin did not answer 'git fetch' within "
@@ -522,7 +524,9 @@ def release_resume(target, assume_yes, no_pypi, no_forge, no_github, no_docker,
522
524
 
523
525
  steps = []
524
526
  if main_sha:
525
- steps.append(f"push {main_sha[:12]} to origin/main, the commit {tag} describes")
527
+ steps.append(
528
+ f"push {main_sha[:12]} to origin/{release.release_branch(path)}, the commit {tag} describes"
529
+ )
526
530
  if upload:
527
531
  steps.append(f"build and upload {package} {normalized} to PyPI")
528
532
  if push_tag:
@@ -590,9 +594,9 @@ def release_resume(target, assume_yes, no_pypi, no_forge, no_github, no_docker,
590
594
  stuck.append(
591
595
  release_gate.ChannelStatus(
592
596
  release_gate.FORGE,
593
- summary=f"could not push {main_sha[:12]} to origin/main, {failure}",
597
+ summary=f"could not push {main_sha[:12]} to origin/{release.release_branch(path)}, {failure}",
594
598
  hints=[
595
- "Fix the push to origin/main, then run "
599
+ f"Fix the push to origin/{release.release_branch(path)}, then run "
596
600
  f"'splent release:resume {hint_target}' again.",
597
601
  ],
598
602
  )
@@ -604,7 +608,7 @@ def release_resume(target, assume_yes, no_pypi, no_forge, no_github, no_docker,
604
608
  push_image=push_image,
605
609
  summary=f"not built, there is no {tag} to build it from",
606
610
  hint=f"Nothing is built before {tag} exists. Fix the push "
607
- f"to origin/main, then run 'splent release:resume "
611
+ f"to origin/{release.release_branch(path)}, then run 'splent release:resume "
608
612
  f"{hint_target}' again.",
609
613
  )
610
614
  upload = push_image = False
@@ -568,16 +568,12 @@ def build_published_spls(workspace: str, lines: list[dict]) -> list[dict]:
568
568
  def assemble_index(features: list[dict], spls: list[dict], sources: dict) -> dict:
569
569
  compute_used_by(features)
570
570
  features = sorted(features, key=lambda e: e["short"])
571
- try:
572
- import importlib.metadata
571
+ from splent_cli.utils.running_version import cli_version
573
572
 
574
- cli_version = importlib.metadata.version("splent_cli")
575
- except Exception:
576
- cli_version = "unknown"
577
573
  return {
578
574
  "schema": INDEX_SCHEMA,
579
575
  "generated_at": datetime.now(timezone.utc).isoformat(timespec="seconds"),
580
- "generator": f"splent_cli/{cli_version}",
576
+ "generator": f"splent_cli/{cli_version()}",
581
577
  "sources": sources,
582
578
  "features": features,
583
579
  "spls": spls,
@@ -302,17 +302,61 @@ def _git_out(cwd: str, args: list[str]) -> str | None:
302
302
  return r.stdout.strip() if r.returncode == 0 else None
303
303
 
304
304
 
305
+ _RELEASE_BRANCHES: dict[str, str] = {}
306
+
307
+
308
+ def release_branch(cwd: str) -> str:
309
+ """The branch a release pushes to: the one origin calls its default.
310
+
311
+ A repository whose default branch is master would otherwise get a second
312
+ branch called main that no clone checks out, and a server pulling master
313
+ would never see the release. Origin's HEAD as this clone recorded it,
314
+ else as origin reports it, else the branch checked out here, else main.
315
+ """
316
+ key = os.path.realpath(cwd)
317
+ if key in _RELEASE_BRANCHES:
318
+ return _RELEASE_BRANCHES[key]
319
+ branch = None
320
+ ref = _git_out(
321
+ cwd, ["symbolic-ref", "--quiet", "--short", "refs/remotes/origin/HEAD"]
322
+ )
323
+ if ref and ref.startswith("origin/"):
324
+ branch = ref[len("origin/") :]
325
+ if not branch:
326
+ try:
327
+ r = subprocess.run(
328
+ ["git", "ls-remote", "--symref", "origin", "HEAD"],
329
+ cwd=cwd,
330
+ capture_output=True,
331
+ text=True,
332
+ env=_non_interactive_env(),
333
+ timeout=GIT_NETWORK_TIMEOUT,
334
+ )
335
+ out = r.stdout if isinstance(r.stdout, str) else ""
336
+ m = re.search(r"^ref: refs/heads/(\S+)\s+HEAD", out, re.M)
337
+ branch = m.group(1) if m else None
338
+ except subprocess.TimeoutExpired:
339
+ branch = None
340
+ if not branch:
341
+ current = _git_out(cwd, ["rev-parse", "--abbrev-ref", "HEAD"])
342
+ if current and current != "HEAD":
343
+ branch = current
344
+ _RELEASE_BRANCHES[key] = branch or "main"
345
+ return _RELEASE_BRANCHES[key]
346
+
347
+
305
348
  def push_main(cwd: str) -> None:
306
- """Push HEAD to origin/main and verify that origin/main really carries it.
349
+ """Push HEAD to the release branch and verify that origin really carries it.
307
350
 
308
351
  Pushing is not the same as having pushed. A tag whose commit is on no remote
309
352
  branch shows up on the git host as a release of source nobody can find, and
310
353
  that is what happens when a clean working tree is read as "nothing to do".
311
354
  """
312
355
  env = _non_interactive_env()
356
+ branch = release_branch(cwd)
313
357
  try:
314
358
  subprocess.run(
315
- ["git", "push", "origin", "HEAD:main"],
359
+ ["git", "push", "origin", f"HEAD:{branch}"],
316
360
  cwd=cwd,
317
361
  check=True,
318
362
  capture_output=True,
@@ -322,11 +366,11 @@ def push_main(cwd: str) -> None:
322
366
  )
323
367
  except subprocess.CalledProcessError as e:
324
368
  stderr = e.stderr.strip() if e.stderr else str(e)
325
- click.secho(f" error: could not push to origin/main: {stderr}", fg="red")
369
+ click.secho(f" error: could not push to origin/{branch}: {stderr}", fg="red")
326
370
  raise SystemExit(1)
327
371
  except subprocess.TimeoutExpired:
328
372
  click.secho(
329
- " error: the push to origin/main did not finish within "
373
+ f" error: the push to origin/{branch} did not finish within "
330
374
  f"{GIT_NETWORK_TIMEOUT // 60} minutes.",
331
375
  fg="red",
332
376
  )
@@ -335,7 +379,7 @@ def push_main(cwd: str) -> None:
335
379
  head = _git_out(cwd, ["rev-parse", "HEAD"])
336
380
  try:
337
381
  subprocess.run(
338
- ["git", "fetch", "origin", "main"],
382
+ ["git", "fetch", "origin", branch],
339
383
  cwd=cwd,
340
384
  capture_output=True,
341
385
  text=True,
@@ -343,21 +387,21 @@ def push_main(cwd: str) -> None:
343
387
  timeout=GIT_NETWORK_TIMEOUT,
344
388
  )
345
389
  except subprocess.TimeoutExpired:
346
- # The push itself moved origin/main in this clone, which is what the
390
+ # The push itself moved the remote branch in this clone, which is what the
347
391
  # check below reads.
348
392
  pass
349
- remote = _git_out(cwd, ["rev-parse", "origin/main"])
393
+ remote = _git_out(cwd, ["rev-parse", f"origin/{branch}"])
350
394
  if head and remote and head != remote:
351
395
  # Not necessarily wrong (someone else may have pushed on top), but the
352
396
  # tag must describe a commit the remote branch contains.
353
397
  contains = subprocess.run(
354
- ["git", "merge-base", "--is-ancestor", head, "origin/main"],
398
+ ["git", "merge-base", "--is-ancestor", head, f"origin/{branch}"],
355
399
  cwd=cwd,
356
400
  capture_output=True,
357
401
  )
358
402
  if contains.returncode != 0:
359
403
  click.secho(
360
- " error: origin/main does not contain the commit being released.",
404
+ f" error: origin/{branch} does not contain the commit being released.",
361
405
  fg="red",
362
406
  )
363
407
  click.secho(
@@ -366,7 +410,7 @@ def push_main(cwd: str) -> None:
366
410
  fg="yellow",
367
411
  )
368
412
  raise SystemExit(1)
369
- click.echo(" push origin/main updated")
413
+ click.echo(f" push origin/{branch} updated")
370
414
 
371
415
 
372
416
  def git_is_clean(cwd: str) -> bool:
@@ -420,7 +464,7 @@ def read_project_version(pyproject_path: str) -> str | None:
420
464
 
421
465
 
422
466
  def sync_main_if_needed(cwd: str) -> None:
423
- """Make sure origin/main carries the commit that is about to be tagged.
467
+ """Make sure the release branch on origin carries the commit about to be tagged.
424
468
 
425
469
  A resume can run on a repository where the release commit was made and
426
470
  never pushed, which is exactly the state a failed upload leaves behind.
@@ -429,9 +473,10 @@ def sync_main_if_needed(cwd: str) -> None:
429
473
  left alone, because a recovery command must not resolve a divergence in
430
474
  someone's branch on its own.
431
475
  """
476
+ branch = release_branch(cwd)
432
477
  try:
433
478
  subprocess.run(
434
- ["git", "fetch", "origin", "main"],
479
+ ["git", "fetch", "origin", branch],
435
480
  cwd=cwd,
436
481
  capture_output=True,
437
482
  text=True,
@@ -441,7 +486,7 @@ def sync_main_if_needed(cwd: str) -> None:
441
486
  except subprocess.TimeoutExpired:
442
487
  pass
443
488
  head = _git_out(cwd, ["rev-parse", "HEAD"])
444
- remote = _git_out(cwd, ["rev-parse", "origin/main"])
489
+ remote = _git_out(cwd, ["rev-parse", f"origin/{branch}"])
445
490
  if not head or not remote or head == remote:
446
491
  return
447
492
 
@@ -455,13 +500,13 @@ def sync_main_if_needed(cwd: str) -> None:
455
500
  == 0
456
501
  )
457
502
 
458
- if _is_ancestor(head, "origin/main"):
503
+ if _is_ancestor(head, f"origin/{branch}"):
459
504
  return
460
505
  if _is_ancestor(remote, "HEAD"):
461
506
  push_main(cwd)
462
507
  return
463
508
  click.secho(
464
- " warn: origin/main and this checkout have diverged, so the commit "
509
+ f" warn: origin/{branch} and this checkout have diverged, so the commit "
465
510
  "being tagged was not pushed. Reconcile the branch yourself.",
466
511
  fg="yellow",
467
512
  )
@@ -1698,7 +1743,7 @@ def run_release_pipeline(
1698
1743
  try:
1699
1744
  if to_forge:
1700
1745
  push_main(path)
1701
- accepted.append("origin/main")
1746
+ accepted.append(f"origin/{release_branch(path)}")
1702
1747
  create_and_push_tag(path, tag)
1703
1748
  accepted.append(f"the {tag} tag on the forge")
1704
1749
  failure = create_github_release(
@@ -60,15 +60,21 @@ jobs:
60
60
  git add pyproject.toml
61
61
  git commit -m "Upgrade the pinned features"
62
62
  git push --force "https://x-access-token:${FORGE_TOKEN}@{{ forge_host }}/${GITHUB_REPOSITORY}.git" "$BRANCH"
63
+ # The pull request goes to the branch the repository calls its default.
64
+ export BASE=$(curl --silent -H "Authorization: token ${FORGE_TOKEN}" \
65
+ "https://{{ forge_host }}/api/v1/repos/${GITHUB_REPOSITORY}" \
66
+ | python3 -c 'import json, sys; print(json.load(sys.stdin).get("default_branch") or "main")' \
67
+ || echo main)
63
68
  python3 - <<'PY' > pr.json
64
69
  import json
70
+ import os
65
71
  log = open("../upgrade.log", encoding="utf-8", errors="replace").read()
66
72
  body = (
67
73
  "The pinned features have newer releases that install together and "
68
74
  "keep the product valid in its line. Review the plan below, merge, "
69
75
  "and publish with splent product:release.\n\n```\n" + log[-60000:] + "\n```\n"
70
76
  )
71
- print(json.dumps({"head": "splent/feature-upgrades", "base": "main",
77
+ print(json.dumps({"head": "splent/feature-upgrades", "base": os.environ.get("BASE") or "main",
72
78
  "title": "Upgrade the pinned features", "body": body}))
73
79
  PY
74
80
  curl --silent --show-error --fail -X POST \
@@ -0,0 +1,28 @@
1
+ """The version of the CLI that is running.
2
+
3
+ An editable install records its version once, when it is installed, and the
4
+ checkout moves on with every release. So when the CLI runs from a checkout,
5
+ the checkout's pyproject.toml is the version; an installed wheel answers
6
+ through its metadata.
7
+ """
8
+
9
+ import tomllib
10
+ from importlib.metadata import PackageNotFoundError, version
11
+ from pathlib import Path
12
+
13
+
14
+ def cli_version() -> str:
15
+ import splent_cli
16
+
17
+ pyproject = Path(splent_cli.__file__).resolve().parents[2] / "pyproject.toml"
18
+ if pyproject.is_file():
19
+ try:
20
+ project = tomllib.loads(pyproject.read_text()).get("project", {})
21
+ except (OSError, tomllib.TOMLDecodeError):
22
+ project = {}
23
+ if project.get("name") == "splent_cli" and project.get("version"):
24
+ return str(project["version"])
25
+ try:
26
+ return version("splent_cli")
27
+ except PackageNotFoundError:
28
+ return "dev"
@@ -10,12 +10,9 @@ from pathlib import Path
10
10
 
11
11
  from jinja2 import Environment, FileSystemLoader, select_autoescape
12
12
 
13
- try:
14
- from importlib.metadata import version as _pkg_version
13
+ from splent_cli.utils.running_version import cli_version
15
14
 
16
- CLI_VERSION = _pkg_version("splent_cli")
17
- except Exception:
18
- CLI_VERSION = "dev"
15
+ CLI_VERSION = cli_version()
19
16
 
20
17
 
21
18
  # ── Jinja helpers ─────────────────────────────────────────────────────────────
@@ -399,6 +399,9 @@ def resolve_with_pip(
399
399
  "install",
400
400
  "--dry-run",
401
401
  "--ignore-installed",
402
+ # pip's HTTP cache keeps PyPI's index for minutes, so a version
403
+ # released moments ago would be missing from the plan.
404
+ "--no-cache-dir",
402
405
  "--quiet",
403
406
  "--disable-pip-version-check",
404
407
  "--no-input",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splent_cli
3
- Version: 1.34.0
3
+ Version: 1.34.1
4
4
  Summary: SPLENT-CLI is a CLI to be able to work on your development more easily.
5
5
  Author-email: DiversoLab <diversolab@us.es>
6
6
  License-Expression: LGPL-3.0-or-later
@@ -273,6 +273,7 @@ src/splent_cli/utils/path_utils.py
273
273
  src/splent_cli/utils/proc.py
274
274
  src/splent_cli/utils/redact.py
275
275
  src/splent_cli/utils/refinement_facts.py
276
+ src/splent_cli/utils/running_version.py
276
277
  src/splent_cli/utils/template_drift.py
277
278
  src/splent_cli/utils/toml_edit.py
278
279
  src/splent_cli/utils/upgrade_plan.py
File without changes
File without changes
File without changes
File without changes