smart-tests-cli 2.3.1__tar.gz → 2.4.0__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 (420) hide show
  1. smart_tests_cli-2.4.0/CLAUDE.md +2 -0
  2. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/PKG-INFO +4 -1
  3. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/README.md +3 -0
  4. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/__main__.py +2 -0
  5. smart_tests_cli-2.4.0/smart_tests/commands/gate.py +70 -0
  6. smart_tests_cli-2.4.0/smart_tests/commands/record/attachment.py +151 -0
  7. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/record/commit.py +3 -0
  8. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/subset.py +10 -0
  9. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/jar/exe_deploy.jar +0 -0
  10. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/bazel.py +0 -1
  11. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/maven.py +25 -4
  12. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/commands.py +1 -0
  13. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests_cli.egg-info/PKG-INFO +4 -1
  14. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests_cli.egg-info/SOURCES.txt +15 -2
  15. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/BUILD +1 -0
  16. smart_tests_cli-2.4.0/src/main/java/com/launchableinc/ingest/commits/BackgroundWorkStatus.java +8 -0
  17. smart_tests_cli-2.4.0/src/main/java/com/launchableinc/ingest/commits/BoundedExecutorService.java +80 -0
  18. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/ChunkStreamer.java +8 -8
  19. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/CommitGraphCollector.java +298 -168
  20. smart_tests_cli-2.4.0/src/main/java/com/launchableinc/ingest/commits/ConcurrentConsumer.java +45 -0
  21. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/FileChunkStreamer.java +22 -7
  22. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/FlushableConsumer.java +8 -2
  23. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/GitFile.java +6 -5
  24. smart_tests_cli-2.4.0/src/main/java/com/launchableinc/ingest/commits/JSAsyncFileCollectionProgress.java +10 -0
  25. smart_tests_cli-2.4.0/src/main/java/com/launchableinc/ingest/commits/JSAsyncFileCollectionResponse.java +8 -0
  26. smart_tests_cli-2.4.0/src/main/java/com/launchableinc/ingest/commits/LaunchableHttpClient.java +67 -0
  27. smart_tests_cli-2.4.0/src/main/java/com/launchableinc/ingest/commits/ProgressReporter.java +101 -0
  28. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/test/java/com/launchableinc/ingest/commits/AllTests.java +4 -2
  29. smart_tests_cli-2.4.0/src/test/java/com/launchableinc/ingest/commits/BoundedExecutorServiceTest.java +93 -0
  30. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/test/java/com/launchableinc/ingest/commits/CommitGraphCollectorTest.java +15 -15
  31. smart_tests_cli-2.4.0/src/test/java/com/launchableinc/ingest/commits/ConcurrentConsumerTest.java +124 -0
  32. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/test/java/com/launchableinc/ingest/commits/FileChunkStreamerTest.java +5 -4
  33. smart_tests_cli-2.4.0/src/test/java/com/launchableinc/ingest/commits/ProgressReporterTest.java +95 -0
  34. smart_tests_cli-2.4.0/tests/commands/record/test_attachment.py +160 -0
  35. smart_tests_cli-2.4.0/tests/commands/test_gate.py +126 -0
  36. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/subset_by_absolute_time_result.json +4 -1
  37. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/subset_by_confidence_result.json +4 -1
  38. smart_tests_cli-2.4.0/tests/data/maven/subset_result.json +20 -0
  39. smart_tests_cli-2.3.1/tests/data/maven/subset_result.json → smart_tests_cli-2.4.0/tests/data/maven/subset_with_exclude_rules_result.json +1 -1
  40. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_maven.py +19 -0
  41. smart_tests_cli-2.4.0/tests/utils/__init__.py +0 -0
  42. smart_tests_cli-2.3.1/smart_tests/commands/record/attachment.py +0 -40
  43. smart_tests_cli-2.3.1/src/main/java/com/launchableinc/ingest/commits/ProgressReportingConsumer.java +0 -74
  44. smart_tests_cli-2.3.1/src/test/java/com/launchableinc/ingest/commits/ProgressReportingConsumerTest.java +0 -31
  45. smart_tests_cli-2.3.1/tests/commands/record/test_attachment.py +0 -43
  46. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.bazelrc +0 -0
  47. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.bazelversion +0 -0
  48. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.editorconfig +0 -0
  49. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.github/release.yml +0 -0
  50. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.github/workflows/bazel-test.yml +0 -0
  51. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.github/workflows/e2e.yml +0 -0
  52. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.github/workflows/publish.yml +0 -0
  53. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.github/workflows/test.yml +0 -0
  54. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.github/workflows/update_maven_install_json.yml +0 -0
  55. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.gitignore +0 -0
  56. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.pre-commit-config.yaml +0 -0
  57. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.python-version +0 -0
  58. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/.tagpr +0 -0
  59. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/CONTRIBUTING.md +0 -0
  60. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/Dockerfile +0 -0
  61. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/LICENSE.txt +0 -0
  62. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/WORKSPACE +0 -0
  63. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/build-java.sh +0 -0
  64. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/pyproject.toml +0 -0
  65. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/renovate.json +0 -0
  66. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/setup.cfg +0 -0
  67. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/setup.py +0 -0
  68. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/__init__.py +0 -0
  69. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/app.py +0 -0
  70. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/args4p/README.md +0 -0
  71. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/args4p/__init__.py +0 -0
  72. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/args4p/argument.py +0 -0
  73. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/args4p/command.py +0 -0
  74. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/args4p/converters/__init__.py +0 -0
  75. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/args4p/decorators.py +0 -0
  76. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/args4p/exceptions.py +0 -0
  77. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/args4p/option.py +0 -0
  78. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/args4p/parameter.py +0 -0
  79. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/args4p/typer/__init__.py +0 -0
  80. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/__init__.py +0 -0
  81. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/compare/__init__.py +0 -0
  82. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/compare/subsets.py +0 -0
  83. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/detect_flakes.py +0 -0
  84. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/inspect/__init__.py +0 -0
  85. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/inspect/model.py +0 -0
  86. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/inspect/subset.py +0 -0
  87. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/record/__init__.py +0 -0
  88. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/record/build.py +0 -0
  89. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/record/case_event.py +0 -0
  90. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/record/session.py +0 -0
  91. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/record/tests.py +0 -0
  92. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/stats/__init__.py +0 -0
  93. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/stats/test_sessions.py +0 -0
  94. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/test_path_writer.py +0 -0
  95. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/commands/verify.py +0 -0
  96. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/plugins/__init__.py +0 -0
  97. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/__init__.py +0 -0
  98. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/adb.py +0 -0
  99. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/ant.py +0 -0
  100. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/behave.py +0 -0
  101. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/codeceptjs.py +0 -0
  102. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/ctest.py +0 -0
  103. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/cts.py +0 -0
  104. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/cucumber.py +0 -0
  105. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/cypress.py +0 -0
  106. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/dotnet.py +0 -0
  107. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/file.py +0 -0
  108. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/flutter.py +0 -0
  109. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/go_test.py +0 -0
  110. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/googletest.py +0 -0
  111. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/gradle.py +0 -0
  112. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/jasmine.py +0 -0
  113. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/jest.py +0 -0
  114. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/karma.py +0 -0
  115. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/minitest.py +0 -0
  116. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/nunit.py +0 -0
  117. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/playwright.py +0 -0
  118. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/prove.py +0 -0
  119. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/pytest.py +0 -0
  120. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/raw.py +0 -0
  121. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/robot.py +0 -0
  122. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/rspec.py +0 -0
  123. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/smart_tests.py +0 -0
  124. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/vitest.py +0 -0
  125. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/test_runners/xctest.py +0 -0
  126. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/testpath.py +0 -0
  127. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/__init__.py +0 -0
  128. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/authentication.py +0 -0
  129. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/ci_provider.py +0 -0
  130. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/commit_ingester.py +0 -0
  131. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/common_tz.py +0 -0
  132. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/edit_distance.py +0 -0
  133. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/env_keys.py +0 -0
  134. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/exceptions.py +0 -0
  135. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/fail_fast_mode.py +0 -0
  136. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/file_name_pattern.py +0 -0
  137. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/git_log_parser.py +0 -0
  138. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/glob.py +0 -0
  139. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/gzipgen.py +0 -0
  140. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/http_client.py +0 -0
  141. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/input_snapshot.py +0 -0
  142. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/java.py +0 -0
  143. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/link.py +0 -0
  144. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/logger.py +0 -0
  145. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/no_build.py +0 -0
  146. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/sax.py +0 -0
  147. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/session.py +0 -0
  148. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/smart_tests_client.py +0 -0
  149. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/subprocess.py +0 -0
  150. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/tracking.py +0 -0
  151. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/utils/typer_types.py +0 -0
  152. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests/version.py +0 -0
  153. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests_cli.egg-info/dependency_links.txt +0 -0
  154. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests_cli.egg-info/entry_points.txt +0 -0
  155. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests_cli.egg-info/requires.txt +0 -0
  156. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/smart_tests_cli.egg-info/top_level.txt +0 -0
  157. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/BUILD +0 -0
  158. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/Authenticator.java +0 -0
  159. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/CommitChunkStreamer.java +0 -0
  160. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/CountingDiffFormatter.java +0 -0
  161. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/GitHubActionsAuthenticator.java +0 -0
  162. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/GitHubIdTokenAuthenticator.java +0 -0
  163. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/IOConsumer.java +0 -0
  164. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/JSCommit.java +0 -0
  165. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/JSFileChange.java +0 -0
  166. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/Main.java +0 -0
  167. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/ObjectRevFilter.java +0 -0
  168. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/SSLBypass.java +0 -0
  169. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/TokenAuthenticator.java +0 -0
  170. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/TreeReceiver.java +0 -0
  171. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/main/java/com/launchableinc/ingest/commits/VirtualFile.java +0 -0
  172. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/maven_install.json +0 -0
  173. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/test/java/com/launchableinc/ingest/commits/BUILD +0 -0
  174. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/test/java/com/launchableinc/ingest/commits/MainTest.java +0 -0
  175. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/test/java/com/launchableinc/ingest/commits/PassThroughTreeReceiverImpl.java +0 -0
  176. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/test/java/com/launchableinc/ingest/commits/SSLBypassTest.java +0 -0
  177. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/src/test/java/com/launchableinc/ingest/commits/java8-compat.sh +0 -0
  178. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/test-runner/__main__.py +0 -0
  179. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/__init__.py +0 -0
  180. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/args4p/__init__.py +0 -0
  181. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/args4p/converters/__init__.py +0 -0
  182. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/args4p/converters/test_converters.py +0 -0
  183. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/args4p/test_badcode.py +0 -0
  184. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/args4p/test_badinput.py +0 -0
  185. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/args4p/test_command.py +0 -0
  186. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/args4p/test_decorators.py +0 -0
  187. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/args4p/test_help.py +0 -0
  188. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/args4p/test_parameter.py +0 -0
  189. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/args4p/test_typer.py +0 -0
  190. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/cli_test_case.py +0 -0
  191. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/__init__.py +0 -0
  192. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/compare/__init__.py +0 -0
  193. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/compare/test_subsets.py +0 -0
  194. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/inspect/test_model.py +0 -0
  195. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/inspect/test_subset.py +0 -0
  196. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/record/__init__.py +0 -0
  197. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/record/test_build.py +0 -0
  198. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/record/test_case_event.py +0 -0
  199. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/record/test_commit.py +0 -0
  200. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/record/test_session.py +0 -0
  201. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/record/test_tests.py +0 -0
  202. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/test_api_error.py +0 -0
  203. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/test_detect_flakes.py +0 -0
  204. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/test_subset.py +0 -0
  205. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/commands/test_verify.py +0 -0
  206. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/adb/subset_result.json +0 -0
  207. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ant/junitreport/TEST-com.example.HelloWorldTest.xml +0 -0
  208. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ant/junitreport/TEST-com.example.library.CacheTest.xml +0 -0
  209. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ant/junitreport/TESTS-TestSuites.xml +0 -0
  210. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ant/record_test_result.json +0 -0
  211. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ant/src/com/example/HelloWorld.java +0 -0
  212. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ant/src/com/example/HelloWorldTest.java +0 -0
  213. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ant/src/com/example/library/Cache.java +0 -0
  214. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ant/src/com/example/library/CacheTest.java +0 -0
  215. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ant/subset_result.json +0 -0
  216. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test1/test.cache_status +0 -0
  217. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test1/test.log +0 -0
  218. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test1/test.xml +0 -0
  219. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test2/test.cache_status +0 -0
  220. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test2/test.xml +0 -0
  221. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test3/test.cache_status +0 -0
  222. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test3/test.xml +0 -0
  223. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test4/test.cache_status +0 -0
  224. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test4/test.xml +0 -0
  225. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test5/test.cache_status +0 -0
  226. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test5/test.xml +0 -0
  227. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test6/test.cache_status +0 -0
  228. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test6/test.xml +0 -0
  229. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test7/test.cache_status +0 -0
  230. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test7/test.xml +0 -0
  231. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test8/test.cache_status +0 -0
  232. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test8/test.xml +0 -0
  233. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test9/test.cache_status +0 -0
  234. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/bazel-testlogs/src/test/java/com/ninjinkun/mylib_test9/test.xml +0 -0
  235. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/build_event.json +0 -0
  236. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/build_event_rest.json +0 -0
  237. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/record_test_result.json +0 -0
  238. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/record_test_with_build_event_json_result.json +0 -0
  239. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/record_test_with_multiple_build_event_json_result.json +0 -0
  240. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/bazel/subset_result.json +0 -0
  241. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/behave/record_test_result.json +0 -0
  242. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/behave/reports/report.xml +0 -0
  243. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/behave/subset_result.json +0 -0
  244. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/broken_xml/broken.xml +0 -0
  245. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/broken_xml/normal.xml +0 -0
  246. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/codeceptjs/codeceptjs-result.xml +0 -0
  247. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/codeceptjs/record_test_result.json +0 -0
  248. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ctest/Testing/latest/Test.xml +0 -0
  249. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ctest/ctest_list.json +0 -0
  250. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ctest/record_test_result.json +0 -0
  251. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/ctest/subset_result.json +0 -0
  252. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cts/record_test_result.json +0 -0
  253. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cts/subset_result.json +0 -0
  254. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cts/test_result.xml +0 -0
  255. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/features/foo/bar.feature +0 -0
  256. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/features/foo/is_it_friday_yet.feature +0 -0
  257. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/features/foo-bar.feature +0 -0
  258. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/features/is_it_friday_yet.feature +0 -0
  259. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/record_test_json_result.json +0 -0
  260. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/record_test_result.json +0 -0
  261. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/report/TEST-features-foo-bar.xml +0 -0
  262. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/report/TEST-features-foo-is_it_friday_yet.xml +0 -0
  263. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/report/TEST-features-is_it_friday_yet.xml +0 -0
  264. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/report/dummy.xml +0 -0
  265. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cucumber/report/result.json +0 -0
  266. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cypress/empty.json +0 -0
  267. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cypress/empty.xml +0 -0
  268. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cypress/record_test_result.json +0 -0
  269. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cypress/subset_result.json +0 -0
  270. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/cypress/test-result.xml +0 -0
  271. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/dotnet/record_test_result.json +0 -0
  272. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/dotnet/test-result.xml +0 -0
  273. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/flutter/record_test_result.json +0 -0
  274. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/flutter/report.json +0 -0
  275. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/git_log_ingest/sample.out +0 -0
  276. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/go_test/record_test_result.json +0 -0
  277. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/go_test/reportv1/reportv1.xml +0 -0
  278. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/go_test/reportv2/reportv2.xml +0 -0
  279. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/go_test/subset_result.json +0 -0
  280. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/googletest/fail/output.xml +0 -0
  281. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/googletest/fail/record_test_result.json +0 -0
  282. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/googletest/output_a.xml +0 -0
  283. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/googletest/output_b.xml +0 -0
  284. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/googletest/record_test_result.json +0 -0
  285. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/googletest/subset_result.json +0 -0
  286. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/gradle/java/app/src/test/java/com/example/sample_app_gradle/App2Test.java +0 -0
  287. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/gradle/java/app/src/test/java/com/example/sample_app_gradle/AppTest.java +0 -0
  288. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/gradle/java/app/src/test/java/com/example/sample_app_gradle/sub/App3Test.java +0 -0
  289. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/gradle/recursion/expected.json +0 -0
  290. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/gradle/recursion/foo/bar/reports/1.xml +0 -0
  291. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/jasmine/README.md +0 -0
  292. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/jasmine/jasmine-test-results-v3.99.0.json +0 -0
  293. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/jasmine/jasmine-test-results.json +0 -0
  294. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/jasmine/record_test_result.json +0 -0
  295. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/jasmine/subset_payload.json +0 -0
  296. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/jest/junit.xml +0 -0
  297. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/jest/record_test_result.json +0 -0
  298. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/jest/subset_result.json +0 -0
  299. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/karma/README.md +0 -0
  300. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/karma/record_test_result.json +0 -0
  301. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/karma/sample-report.json +0 -0
  302. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/karma/subset_payload.json +0 -0
  303. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/karma/subset_result.json +0 -0
  304. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/createdFile_1.lst +0 -0
  305. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/createdFile_2.lst +0 -0
  306. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/java/test/src/java/com/example/sample_app_maven/App2Test.java +0 -0
  307. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/java/test/src/java/com/example/sample_app_maven/AppTest.java +0 -0
  308. /smart_tests_cli-2.3.1/tests/data/pytest/tests/fooo/__init__.py → /smart_tests_cli-2.4.0/tests/data/maven/java/test/src/java/com/launchableinc/rocket_car_maven/e2e/E2ETest.java +0 -0
  309. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/list.lst +0 -0
  310. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/record_test_result.json +0 -0
  311. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/reports/TEST-1.xml +0 -0
  312. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/reports/TEST-2.xml +0 -0
  313. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/reports/TEST-nested.xml +0 -0
  314. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/reports/dummy.xml +0 -0
  315. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/subset_from_file_result.json +0 -0
  316. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/maven/subset_scan_test_compile_lst_result.json +0 -0
  317. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/minitest/TEST-Admin_UserTest.xml +0 -0
  318. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/minitest/TEST-Admin_UserTest_ChildlenTest.xml +0 -0
  319. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/minitest/TEST-UserControllerTest.xml +0 -0
  320. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/minitest/TEST-UserCopyTest.xml +0 -0
  321. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/minitest/TEST-UserTest.xml +0 -0
  322. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/minitest/record_test_result.json +0 -0
  323. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/minitest/record_test_result_chunk1.json +0 -0
  324. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/minitest/record_test_result_chunk2.json +0 -0
  325. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/minitest/subset_result.json +0 -0
  326. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/minitest/test/example_test.rb +0 -0
  327. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/list.xml +0 -0
  328. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/nunit-reporter-bug-with-nested-type.json +0 -0
  329. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/nunit-reporter-bug-with-nested-type.xml +0 -0
  330. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/output-linux.xml +0 -0
  331. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/output-windows.xml +0 -0
  332. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/record_test_result-linux.json +0 -0
  333. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/record_test_result-windows.json +0 -0
  334. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/src/.gitignore +0 -0
  335. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/src/Program.cs +0 -0
  336. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/src/README.md +0 -0
  337. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/src/Test.cs +0 -0
  338. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/src/calc.csproj +0 -0
  339. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/nunit/subset_result.json +0 -0
  340. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/playwright/record_test_result.json +0 -0
  341. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/playwright/record_test_result_with_json.json +0 -0
  342. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/playwright/report.json +0 -0
  343. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/playwright/report.xml +0 -0
  344. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/prove/record_test_result.json +0 -0
  345. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/prove/report.xml +0 -0
  346. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/pytest.ini +0 -0
  347. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/record_test_result.json +0 -0
  348. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/record_test_result_json.json +0 -0
  349. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/report.json +0 -0
  350. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/report.xml +0 -0
  351. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/subset_result.json +0 -0
  352. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/tests/conftest.py +0 -0
  353. {smart_tests_cli-2.3.1/tests/test_runners → smart_tests_cli-2.4.0/tests/data/pytest/tests/fooo}/__init__.py +0 -0
  354. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/tests/fooo/filenameonly_test.py +0 -0
  355. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/tests/fooo/func4_test.py +0 -0
  356. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/tests/funcs3_test.py +0 -0
  357. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/tests/test_funcs1.py +0 -0
  358. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/pytest/tests/test_funcs2.py +0 -0
  359. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/robot/dryrun.xml +0 -0
  360. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/robot/output.xml +0 -0
  361. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/robot/record_test_executed_only_one_file_result.json +0 -0
  362. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/robot/record_test_result.json +0 -0
  363. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/robot/single-output.xml +0 -0
  364. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/robot/subset_result.json +0 -0
  365. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/rspec/record_test_result.json +0 -0
  366. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/rspec/rspec.xml +0 -0
  367. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/vitest/record_test_result.json +0 -0
  368. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/vitest/report.xml +0 -0
  369. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/xctest/junit.xml +0 -0
  370. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/xctest/record_test_result.json +0 -0
  371. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/data/xctest/subset_result.json +0 -0
  372. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/helper.py +0 -0
  373. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/plugins/foo.py +0 -0
  374. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_cli_test_case.py +0 -0
  375. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_plugin.py +0 -0
  376. {smart_tests_cli-2.3.1/tests/utils → smart_tests_cli-2.4.0/tests/test_runners}/__init__.py +0 -0
  377. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_adb.py +0 -0
  378. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_ant.py +0 -0
  379. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_bazel.py +0 -0
  380. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_behave.py +0 -0
  381. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_codeceptjs.py +0 -0
  382. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_ctest.py +0 -0
  383. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_cts.py +0 -0
  384. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_cucumber.py +0 -0
  385. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_cypress.py +0 -0
  386. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_dotnet.py +0 -0
  387. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_go_test.py +0 -0
  388. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_googletest.py +0 -0
  389. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_gradle.py +0 -0
  390. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_jasmine.py +0 -0
  391. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_jest.py +0 -0
  392. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_karma.py +0 -0
  393. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_minitest.py +0 -0
  394. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_nunit.py +0 -0
  395. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_playwright.py +0 -0
  396. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_prove.py +0 -0
  397. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_pytest.py +0 -0
  398. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_raw.py +0 -0
  399. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_robot.py +0 -0
  400. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_rspec.py +0 -0
  401. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_vitest.py +0 -0
  402. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_runners/test_xctest.py +0 -0
  403. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_testpath.py +0 -0
  404. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/test_version.py +0 -0
  405. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_authentication.py +0 -0
  406. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_edit_distance.py +0 -0
  407. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_fail_fast_mode.py +0 -0
  408. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_file_name_pattern.py +0 -0
  409. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_git_log_parser.py +0 -0
  410. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_glob.py +0 -0
  411. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_gzipgen.py +0 -0
  412. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_http_client.py +0 -0
  413. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_link.py +0 -0
  414. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_logger.py +0 -0
  415. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_session.py +0 -0
  416. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_typer.py +0 -0
  417. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tests/utils/test_typer_types.py +0 -0
  418. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tools/README.md +0 -0
  419. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/tools/generate_reference.py +0 -0
  420. {smart_tests_cli-2.3.1 → smart_tests_cli-2.4.0}/uv.lock +0 -0
@@ -0,0 +1,2 @@
1
+ - In Java code, use JUnit 4 & Google truth. Test needs to be added to AllTests.java or else it won't run.
2
+ - See README.md & CONTRIBUTING.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smart-tests-cli
3
- Version: 2.3.1
3
+ Version: 2.4.0
4
4
  Summary: Smart Tests CLI
5
5
  Author-email: CloudBees <support@cloudbees.com>
6
6
  License: Apache Software License v2
@@ -53,6 +53,9 @@ source .venv/bin/activate
53
53
  uv run <command>
54
54
  ```
55
55
 
56
+ From this shell, run `pip install -e .` to create `launchable` wrapper script from the workspace.
57
+ This is useful to test the CLI with real/local server.
58
+
56
59
  ## Run tests cli
57
60
 
58
61
  ```shell
@@ -30,6 +30,9 @@ source .venv/bin/activate
30
30
  uv run <command>
31
31
  ```
32
32
 
33
+ From this shell, run `pip install -e .` to create `launchable` wrapper script from the workspace.
34
+ This is useful to test the CLI with real/local server.
35
+
33
36
  ## Run tests cli
34
37
 
35
38
  ```shell
@@ -8,6 +8,7 @@ from smart_tests.app import Application
8
8
  from smart_tests.args4p.command import Group
9
9
  from smart_tests.commands.compare import compare
10
10
  from smart_tests.commands.detect_flakes import detect_flakes
11
+ from smart_tests.commands.gate import gate
11
12
  from smart_tests.commands.inspect import inspect
12
13
  from smart_tests.commands.record import record
13
14
  from smart_tests.commands.stats import stats
@@ -23,6 +24,7 @@ cli.add_command(inspect)
23
24
  cli.add_command(stats)
24
25
  cli.add_command(compare)
25
26
  cli.add_command(detect_flakes)
27
+ cli.add_command(gate)
26
28
 
27
29
 
28
30
  def _load_test_runners():
@@ -0,0 +1,70 @@
1
+ import json
2
+ import sys
3
+ from http import HTTPStatus
4
+ from typing import Annotated
5
+
6
+ import click
7
+ from requests import Response
8
+ from tabulate import tabulate
9
+
10
+ from smart_tests.utils.tracking import TrackingClient
11
+ from .. import args4p
12
+ from ..app import Application
13
+ from ..args4p import typer
14
+
15
+ from ..utils.commands import Command
16
+ from ..utils.session import SessionId
17
+ from ..utils.smart_tests_client import SmartTestsClient
18
+
19
+
20
+ @args4p.command()
21
+ def gate(app_instance: Application,
22
+ session: Annotated[SessionId, SessionId.as_option()],
23
+ is_json_format: Annotated[bool, typer.Option(
24
+ "--json",
25
+ help="display JSON format")] = False):
26
+ tracking_client = TrackingClient(Command.GATE, app=app_instance)
27
+ client = SmartTestsClient(tracking_client=tracking_client, app=app_instance)
28
+ try:
29
+ res: Response = client.request("get", "gate", params={"session-id": session.test_part})
30
+
31
+ if res.status_code == HTTPStatus.NOT_FOUND:
32
+ click.echo(click.style(
33
+ "Gate data currently not available for this workspace.", 'yellow'), err=True)
34
+ sys.exit()
35
+
36
+ res.raise_for_status()
37
+
38
+ res_json = res.json()
39
+
40
+ if is_json_format:
41
+ display_as_json(res)
42
+ else:
43
+ display_as_table(res)
44
+
45
+ # Exit with failure status if gate failed
46
+ if res_json.get('status') == 'FAILED':
47
+ sys.exit(1)
48
+
49
+ except Exception as e:
50
+ client.print_exception_and_recover(e, "Warning: failed to fetch gate status")
51
+
52
+
53
+ def display_as_json(res: Response):
54
+ res_json = res.json()
55
+ click.echo(json.dumps(res_json, indent=2))
56
+
57
+
58
+ def display_as_table(res: Response):
59
+ headers = ["Status", "Quarantined (Ignored)", "Actionable Failures"]
60
+ res_json = res.json()
61
+
62
+ status_icon = "PASSED" if res_json.get('status') == 'PASSED' else "FAILED"
63
+
64
+ rows = [[
65
+ status_icon,
66
+ res_json.get('quarantinedFailures', 0),
67
+ res_json.get('actionableFailures', 0)
68
+ ]]
69
+
70
+ click.echo(tabulate(rows, headers, tablefmt="github"))
@@ -0,0 +1,151 @@
1
+ import fnmatch
2
+ import tarfile
3
+ import zipfile
4
+ from io import BytesIO
5
+ from typing import Annotated, List, Tuple
6
+
7
+ import click
8
+
9
+ import smart_tests.args4p.typer as typer
10
+ from smart_tests.utils.session import SessionId, get_session
11
+
12
+ from ... import args4p
13
+ from ...app import Application
14
+ from ...utils.fail_fast_mode import warn_and_exit_if_fail_fast_mode
15
+ from ...utils.smart_tests_client import SmartTestsClient
16
+ from tabulate import tabulate
17
+
18
+
19
+ class AttachmentStatus:
20
+ SUCCESS = "✓ Recorded successfully"
21
+ FAILED = "⚠ Failed to record"
22
+ SKIPPED_NON_TEXT = "⚠ Skipped: not a valid text file"
23
+
24
+
25
+ @args4p.command(help="Record attachment information")
26
+ def attachment(
27
+ app: Application,
28
+ session: Annotated[SessionId, SessionId.as_option()],
29
+ attachments: Annotated[List[str], typer.Argument(
30
+ multiple=True,
31
+ help="Attachment files to upload"
32
+ )],
33
+ include_patterns: Annotated[List[str], typer.Option(
34
+ '--include',
35
+ help='Include only files matching pattern (e.g., "*.log"). Can be specified multiple times.',
36
+ type=str,
37
+ multiple=True,
38
+ )] = []
39
+ ):
40
+ client = SmartTestsClient(app=app)
41
+ summary_rows = []
42
+ try:
43
+ # Note: Call get_session method to check test session exists
44
+ _ = get_session(session, client)
45
+ for a in attachments:
46
+ # If zip file
47
+ if zipfile.is_zipfile(a):
48
+ with zipfile.ZipFile(a, 'r') as zip_file:
49
+ for zip_info in zip_file.infolist():
50
+ if zip_info.is_dir():
51
+ continue
52
+
53
+ if not matches_include_patterns(zip_info.filename, include_patterns):
54
+ continue
55
+
56
+ file_content = zip_file.read(zip_info.filename)
57
+
58
+ if not valid_utf8_file(file_content):
59
+ summary_rows.append(
60
+ [zip_info.filename, AttachmentStatus.SKIPPED_NON_TEXT])
61
+ continue
62
+
63
+ status = post_attachment(
64
+ client, session, file_content, zip_info.filename)
65
+ summary_rows.append([zip_info.filename, status])
66
+
67
+ # If tar file (tar, tar.gz, tar.bz2, tgz, etc.)
68
+ elif tarfile.is_tarfile(a):
69
+ with tarfile.open(a, 'r:*') as tar_file:
70
+ for tar_info in tar_file:
71
+ if tar_info.isdir():
72
+ continue
73
+
74
+ if not matches_include_patterns(tar_info.name, include_patterns):
75
+ continue
76
+
77
+ file_obj = tar_file.extractfile(tar_info)
78
+ if file_obj is None:
79
+ continue
80
+
81
+ file_content = file_obj.read()
82
+
83
+ if not valid_utf8_file(file_content):
84
+ summary_rows.append(
85
+ [tar_info.name, AttachmentStatus.SKIPPED_NON_TEXT])
86
+ continue
87
+
88
+ status = post_attachment(
89
+ client, session, file_content, tar_info.name)
90
+ summary_rows.append([tar_info.name, status])
91
+
92
+ else:
93
+ with open(a, mode='rb') as f:
94
+ file_content = f.read()
95
+
96
+ if not valid_utf8_file(file_content):
97
+ summary_rows.append(
98
+ [a, AttachmentStatus.SKIPPED_NON_TEXT])
99
+ continue
100
+
101
+ status = post_attachment(client, session, file_content, a)
102
+ summary_rows.append([a, status])
103
+ except Exception as e:
104
+ client.print_exception_and_recover(e)
105
+
106
+ display_summary_as_table(summary_rows)
107
+
108
+
109
+ def matches_include_patterns(filename: str, include_patterns: List[str]) -> bool:
110
+ """
111
+ Check if a file should be included based on the include patterns.
112
+ If no patterns are specified, all files are included.
113
+ """
114
+ if not include_patterns:
115
+ return True
116
+
117
+ for pattern in include_patterns:
118
+ if fnmatch.fnmatch(filename, pattern):
119
+ return True
120
+
121
+ return False
122
+
123
+
124
+ def valid_utf8_file(file_content: bytes) -> bool:
125
+ # Check for null bytes (binary files)
126
+ if b'\x00' in file_content:
127
+ return False
128
+
129
+ try:
130
+ file_content.decode('utf-8')
131
+ return True
132
+ except UnicodeDecodeError:
133
+ return False
134
+
135
+
136
+ def post_attachment(client: SmartTestsClient, session: SessionId, file_content: bytes, filename: str) -> str:
137
+ try:
138
+ res = client.request(
139
+ "post", session.subpath("attachment"), compress=True, payload=BytesIO(file_content),
140
+ additional_headers={"Content-Disposition": "attachment;filename=\"{}\"".format(filename)})
141
+ res.raise_for_status()
142
+ return AttachmentStatus.SUCCESS
143
+ except Exception as e:
144
+ click.echo("Failed to upload {}: {}".format(
145
+ filename, str(e)), err=True)
146
+ return AttachmentStatus.FAILED
147
+
148
+
149
+ def display_summary_as_table(rows):
150
+ headers = ["File", "Status"]
151
+ click.echo(tabulate(rows, headers, tablefmt="github"))
@@ -101,6 +101,9 @@ def exec_jar(name: str, source: str, max_days: int, app: Application, is_collect
101
101
  # using subprocess.check_out with shell=False and a list of command to prevent vulnerability
102
102
  # https://knowledge-base.secureflag.com/vulnerabilities/code_injection/os_command_injection_python.html
103
103
  command = [java]
104
+ debug_opts = os.getenv("LAUNCHABLE_JAVA_DEBUG")
105
+ if debug_opts:
106
+ command.extend(debug_opts.split())
104
107
  command.extend(_build_proxy_option(os.getenv("HTTPS_PROXY")))
105
108
  command.extend([
106
109
  "-jar",
@@ -115,6 +115,10 @@ class Subset(TestPathWriter):
115
115
  help="Subsetting by confidence from 0% to 100%",
116
116
  metavar="PERCENTAGE"
117
117
  )] = None,
118
+ similarity: Annotated[float | None, typer.Option(
119
+ type=floatType(min=0.0, max=1.0),
120
+ help='subsetting by similarity from 0 to 1.0. Tests scoring above this value are included in the subset.',
121
+ )] = None,
118
122
  goal_spec: Annotated[str | None, typer.Option(
119
123
  help="Subsetting by programmatic goal definition",
120
124
  metavar="GOAL_SPEC"
@@ -262,6 +266,7 @@ class Subset(TestPathWriter):
262
266
  self.target = target
263
267
  self.time = time
264
268
  self.confidence = confidence
269
+ self.similarity = similarity
265
270
  self.goal_spec = goal_spec
266
271
  self.base_path = base_path
267
272
  self.base_path_explicitly_set = (base_path is not None)
@@ -413,6 +418,11 @@ class Subset(TestPathWriter):
413
418
  "type": "subset-by-goal-spec",
414
419
  "goal": self.goal_spec
415
420
  }
421
+ elif self.similarity is not None:
422
+ payload["goal"] = {
423
+ "type": "subset-by-similarity",
424
+ "similarity": self.similarity
425
+ }
416
426
  else:
417
427
  payload['useServerSideOptimizationTarget'] = True
418
428
 
@@ -89,7 +89,6 @@ def record_tests(
89
89
  if ts.findtext('system-out', '') == "" and ts.findtext('system-err', '') == "":
90
90
  logfile = path.join(path.dirname(report), 'test.log')
91
91
  if path.exists(logfile):
92
- print("Found {}".format(logfile))
93
92
  for x in ts.findall('system-out'):
94
93
  ts.remove(x)
95
94
  with open(logfile, 'r', encoding='utf-8', errors='replace') as log_file:
@@ -1,16 +1,18 @@
1
1
  import glob
2
2
  import os
3
- from typing import Annotated, Dict, List
3
+ import re
4
+ from typing import Annotated
5
+ from typing import Dict, List, Tuple
4
6
 
5
7
  import click
6
8
 
7
9
  import smart_tests.args4p.typer as typer
8
10
  from smart_tests.utils import glob as uglob
9
11
  from smart_tests.utils.java import junit5_nested_class_path_builder
10
-
12
+ from . import smart_tests
13
+ from ..args4p.exceptions import BadCmdLineException
11
14
  from ..commands.record.tests import RecordTests
12
15
  from ..commands.subset import Subset
13
- from . import smart_tests
14
16
 
15
17
  # Surefire has the default inclusion pattern
16
18
  # https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#includes
@@ -66,8 +68,21 @@ def subset(
66
68
  help="Scan testCompile/default-testCompile/createdFiles.lst for *.lst files generated by `mvn compile` and "
67
69
  "use them as test inputs."
68
70
  )] = False,
71
+ exclude_rules: Annotated[List[str], typer.Option(
72
+ "--exclude",
73
+ multiple=True,
74
+ help="Exclude tests matching the given Python regular expression pattern. Can be specified multiple times."
75
+ )] = [],
69
76
  ):
70
77
 
78
+ # Compile exclude rules
79
+ compiled_exclude_rules = []
80
+ for rule in exclude_rules:
81
+ try:
82
+ compiled_exclude_rules.append(re.compile(rule))
83
+ except re.error as e:
84
+ raise BadCmdLineException("Invalid regular expression '{}': {}".format(rule, e))
85
+
71
86
  def file2class_test_path(f: str) -> List[Dict[str, str]]:
72
87
  # remove extension
73
88
  f, _ = os.path.splitext(f)
@@ -78,7 +93,13 @@ def subset(
78
93
 
79
94
  def file2test(f: str) -> List | None:
80
95
  if is_file(f):
81
- return file2class_test_path(f)
96
+ test_path = file2class_test_path(f)
97
+
98
+ for pattern in compiled_exclude_rules:
99
+ if pattern.search(test_path[0]["name"]):
100
+ return None
101
+
102
+ return test_path
82
103
  else:
83
104
  return None
84
105
 
@@ -9,6 +9,7 @@ class Command(Enum):
9
9
  SUBSET = 'SUBSET'
10
10
  COMMIT = 'COMMIT'
11
11
  DETECT_FLAKE = 'DETECT_FLAKE'
12
+ GATE = 'GATE'
12
13
 
13
14
  def display_name(self):
14
15
  return self.value.lower().replace('_', ' ')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smart-tests-cli
3
- Version: 2.3.1
3
+ Version: 2.4.0
4
4
  Summary: Smart Tests CLI
5
5
  Author-email: CloudBees <support@cloudbees.com>
6
6
  License: Apache Software License v2
@@ -53,6 +53,9 @@ source .venv/bin/activate
53
53
  uv run <command>
54
54
  ```
55
55
 
56
+ From this shell, run `pip install -e .` to create `launchable` wrapper script from the workspace.
57
+ This is useful to test the CLI with real/local server.
58
+
56
59
  ## Run tests cli
57
60
 
58
61
  ```shell
@@ -5,6 +5,7 @@
5
5
  .pre-commit-config.yaml
6
6
  .python-version
7
7
  .tagpr
8
+ CLAUDE.md
8
9
  CONTRIBUTING.md
9
10
  Dockerfile
10
11
  LICENSE.txt
@@ -38,6 +39,7 @@ smart_tests/args4p/converters/__init__.py
38
39
  smart_tests/args4p/typer/__init__.py
39
40
  smart_tests/commands/__init__.py
40
41
  smart_tests/commands/detect_flakes.py
42
+ smart_tests/commands/gate.py
41
43
  smart_tests/commands/subset.py
42
44
  smart_tests/commands/test_path_writer.py
43
45
  smart_tests/commands/verify.py
@@ -124,9 +126,12 @@ src/BUILD
124
126
  src/maven_install.json
125
127
  src/main/java/com/launchableinc/ingest/commits/Authenticator.java
126
128
  src/main/java/com/launchableinc/ingest/commits/BUILD
129
+ src/main/java/com/launchableinc/ingest/commits/BackgroundWorkStatus.java
130
+ src/main/java/com/launchableinc/ingest/commits/BoundedExecutorService.java
127
131
  src/main/java/com/launchableinc/ingest/commits/ChunkStreamer.java
128
132
  src/main/java/com/launchableinc/ingest/commits/CommitChunkStreamer.java
129
133
  src/main/java/com/launchableinc/ingest/commits/CommitGraphCollector.java
134
+ src/main/java/com/launchableinc/ingest/commits/ConcurrentConsumer.java
130
135
  src/main/java/com/launchableinc/ingest/commits/CountingDiffFormatter.java
131
136
  src/main/java/com/launchableinc/ingest/commits/FileChunkStreamer.java
132
137
  src/main/java/com/launchableinc/ingest/commits/FlushableConsumer.java
@@ -134,22 +139,27 @@ src/main/java/com/launchableinc/ingest/commits/GitFile.java
134
139
  src/main/java/com/launchableinc/ingest/commits/GitHubActionsAuthenticator.java
135
140
  src/main/java/com/launchableinc/ingest/commits/GitHubIdTokenAuthenticator.java
136
141
  src/main/java/com/launchableinc/ingest/commits/IOConsumer.java
142
+ src/main/java/com/launchableinc/ingest/commits/JSAsyncFileCollectionProgress.java
143
+ src/main/java/com/launchableinc/ingest/commits/JSAsyncFileCollectionResponse.java
137
144
  src/main/java/com/launchableinc/ingest/commits/JSCommit.java
138
145
  src/main/java/com/launchableinc/ingest/commits/JSFileChange.java
146
+ src/main/java/com/launchableinc/ingest/commits/LaunchableHttpClient.java
139
147
  src/main/java/com/launchableinc/ingest/commits/Main.java
140
148
  src/main/java/com/launchableinc/ingest/commits/ObjectRevFilter.java
141
- src/main/java/com/launchableinc/ingest/commits/ProgressReportingConsumer.java
149
+ src/main/java/com/launchableinc/ingest/commits/ProgressReporter.java
142
150
  src/main/java/com/launchableinc/ingest/commits/SSLBypass.java
143
151
  src/main/java/com/launchableinc/ingest/commits/TokenAuthenticator.java
144
152
  src/main/java/com/launchableinc/ingest/commits/TreeReceiver.java
145
153
  src/main/java/com/launchableinc/ingest/commits/VirtualFile.java
146
154
  src/test/java/com/launchableinc/ingest/commits/AllTests.java
147
155
  src/test/java/com/launchableinc/ingest/commits/BUILD
156
+ src/test/java/com/launchableinc/ingest/commits/BoundedExecutorServiceTest.java
148
157
  src/test/java/com/launchableinc/ingest/commits/CommitGraphCollectorTest.java
158
+ src/test/java/com/launchableinc/ingest/commits/ConcurrentConsumerTest.java
149
159
  src/test/java/com/launchableinc/ingest/commits/FileChunkStreamerTest.java
150
160
  src/test/java/com/launchableinc/ingest/commits/MainTest.java
151
161
  src/test/java/com/launchableinc/ingest/commits/PassThroughTreeReceiverImpl.java
152
- src/test/java/com/launchableinc/ingest/commits/ProgressReportingConsumerTest.java
162
+ src/test/java/com/launchableinc/ingest/commits/ProgressReporterTest.java
153
163
  src/test/java/com/launchableinc/ingest/commits/SSLBypassTest.java
154
164
  src/test/java/com/launchableinc/ingest/commits/java8-compat.sh
155
165
  test-runner/__main__.py
@@ -173,6 +183,7 @@ tests/args4p/converters/test_converters.py
173
183
  tests/commands/__init__.py
174
184
  tests/commands/test_api_error.py
175
185
  tests/commands/test_detect_flakes.py
186
+ tests/commands/test_gate.py
176
187
  tests/commands/test_subset.py
177
188
  tests/commands/test_verify.py
178
189
  tests/commands/compare/__init__.py
@@ -293,8 +304,10 @@ tests/data/maven/subset_by_confidence_result.json
293
304
  tests/data/maven/subset_from_file_result.json
294
305
  tests/data/maven/subset_result.json
295
306
  tests/data/maven/subset_scan_test_compile_lst_result.json
307
+ tests/data/maven/subset_with_exclude_rules_result.json
296
308
  tests/data/maven/java/test/src/java/com/example/sample_app_maven/App2Test.java
297
309
  tests/data/maven/java/test/src/java/com/example/sample_app_maven/AppTest.java
310
+ tests/data/maven/java/test/src/java/com/launchableinc/rocket_car_maven/e2e/E2ETest.java
298
311
  tests/data/maven/reports/TEST-1.xml
299
312
  tests/data/maven/reports/TEST-2.xml
300
313
  tests/data/maven/reports/TEST-nested.xml
@@ -11,6 +11,7 @@ java_library(
11
11
  "@maven//:com_fasterxml_jackson_core_jackson_core",
12
12
  "@maven//:com_fasterxml_jackson_core_jackson_databind",
13
13
  "@maven//:com_google_guava_guava",
14
+ "@maven//:commons_io_commons_io",
14
15
  "@maven//:org_apache_commons_commons_compress",
15
16
  "@maven//:org_apache_httpcomponents_httpclient",
16
17
  "@maven//:org_apache_httpcomponents_httpcore",
@@ -0,0 +1,8 @@
1
+ package com.launchableinc.ingest.commits;
2
+
3
+ public enum BackgroundWorkStatus {
4
+ IN_PROGRESS,
5
+ SUCCEEDED,
6
+ FAILED,
7
+ ABANDONED
8
+ }
@@ -0,0 +1,80 @@
1
+ package com.launchableinc.ingest.commits;
2
+
3
+ import java.util.List;
4
+ import java.util.concurrent.AbstractExecutorService;
5
+ import java.util.concurrent.ExecutorService;
6
+ import java.util.concurrent.Executors;
7
+ import java.util.concurrent.RejectedExecutionException;
8
+ import java.util.concurrent.Semaphore;
9
+ import java.util.concurrent.TimeUnit;
10
+ import java.util.concurrent.atomic.AtomicInteger;
11
+
12
+ /**
13
+ * {@link ExecutorService} decorator that limits the number of concurrent tasks,
14
+ * and make the caller block when the limit is reached.
15
+ */
16
+ class BoundedExecutorService extends AbstractExecutorService {
17
+ private final ExecutorService delegate;
18
+ private final Semaphore semaphore;
19
+ /** # of threads that are blocked trying to {@link #execute(Runnable)}. Just for diagnostics. */
20
+ private final AtomicInteger blockCount = new AtomicInteger(0);
21
+
22
+ BoundedExecutorService(int limit) {
23
+ this(Executors.newFixedThreadPool(limit), limit);
24
+ }
25
+
26
+ BoundedExecutorService(ExecutorService delegate, int limit) {
27
+ this.delegate = delegate;
28
+ this.semaphore = new Semaphore(limit);
29
+ }
30
+
31
+ @Override
32
+ public void execute(Runnable command) {
33
+ try {
34
+ blockCount.incrementAndGet();
35
+ semaphore.acquire();
36
+ } catch (InterruptedException e) {
37
+ throw new RejectedExecutionException(e);
38
+ } finally {
39
+ blockCount.decrementAndGet();
40
+ }
41
+
42
+ try {
43
+ delegate.execute(() -> {
44
+ try {
45
+ command.run();
46
+ } finally {
47
+ semaphore.release();
48
+ }
49
+ });
50
+ } catch (RejectedExecutionException e) {
51
+ semaphore.release();
52
+ throw e;
53
+ }
54
+ }
55
+
56
+ @Override
57
+ public void shutdown() {
58
+ delegate.shutdown();
59
+ }
60
+
61
+ @Override
62
+ public List<Runnable> shutdownNow() {
63
+ return delegate.shutdownNow();
64
+ }
65
+
66
+ @Override
67
+ public boolean isShutdown() {
68
+ return delegate.isShutdown();
69
+ }
70
+
71
+ @Override
72
+ public boolean isTerminated() {
73
+ return delegate.isTerminated();
74
+ }
75
+
76
+ @Override
77
+ public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
78
+ return delegate.awaitTermination(timeout, unit);
79
+ }
80
+ }
@@ -2,7 +2,6 @@ package com.launchableinc.ingest.commits;
2
2
 
3
3
  import org.apache.http.entity.ContentProducer;
4
4
 
5
- import java.io.Closeable;
6
5
  import java.io.IOException;
7
6
  import java.io.OutputStream;
8
7
  import java.io.UncheckedIOException;
@@ -12,13 +11,13 @@ import java.util.List;
12
11
  /**
13
12
  * Accepts T, buffers them, and writes them out as a batch.
14
13
  */
15
- abstract class ChunkStreamer<T> implements FlushableConsumer<T>, Closeable {
14
+ abstract class ChunkStreamer<T> implements FlushableConsumer<T> {
16
15
  /**
17
16
  * Encapsulation of how batches are sent.
18
17
  */
19
18
  private final IOConsumer<ContentProducer> sender;
20
19
  private final int chunkSize;
21
- private final List<T> spool = new ArrayList<>();
20
+ private List<T> spool = new ArrayList<>();
22
21
 
23
22
  ChunkStreamer(IOConsumer<ContentProducer> sender, int chunkSize) {
24
23
  this.sender = sender;
@@ -48,11 +47,12 @@ abstract class ChunkStreamer<T> implements FlushableConsumer<T>, Closeable {
48
47
  return;
49
48
  }
50
49
 
51
- try {
52
- sender.accept(os -> writeTo(spool,os));
53
- } finally {
54
- spool.clear();
55
- }
50
+ // let sender own the list -- do not reuse
51
+ // for this to work, we need to resolve `this.spool` here, not in the lambda
52
+ List<T> ref = this.spool;
53
+ this.spool = new ArrayList<>();
54
+
55
+ sender.accept(os -> writeTo(ref,os));
56
56
  }
57
57
 
58
58
  protected abstract void writeTo(List<T> spool, OutputStream os) throws IOException;