artesian-sdk 4.3.1.dev2__tar.gz → 4.4.0b1__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 (182) hide show
  1. artesian_sdk-4.4.0b1/.github/workflows/python-tests.yml +586 -0
  2. artesian_sdk-4.4.0b1/.github/workflows/validate_branch.sh +24 -0
  3. artesian_sdk-4.4.0b1/.github/workflows/validate_tag.sh +41 -0
  4. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/PKG-INFO +672 -10
  5. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/README.md +671 -9
  6. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestActual.py +1 -1
  7. artesian_sdk-4.4.0b1/samples/TestDataQuality.py +93 -0
  8. artesian_sdk-4.4.0b1/samples/TestDataQualityAssignment.py +135 -0
  9. artesian_sdk-4.4.0b1/samples/TestDataQualityCheckResultCheckSummary.py +137 -0
  10. artesian_sdk-4.4.0b1/samples/TestDataQualityNotificationAlert.py +44 -0
  11. artesian_sdk-4.4.0b1/samples/TestDataQualityNotificationAlertAssignement.py +110 -0
  12. artesian_sdk-4.4.0b1/samples/TestMarketDataOverride.py +126 -0
  13. artesian_sdk-4.4.0b1/samples/TestQualityNotificationAlert.py +74 -0
  14. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestWriteDataAndQueryBidAsk.py +6 -6
  15. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/GMEPublicOfferQuery.py +5 -0
  16. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/_Enum/Market.py +4 -0
  17. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/_Enum/Status.py +1 -0
  18. artesian_sdk-4.4.0b1/src/Artesian/MarketData/MarketDataService.py +2184 -0
  19. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/ActualCompletenessAndFreshnessConfigDto.py +16 -0
  20. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/AlertScheduleEventsDto.py +22 -0
  21. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/ArtesianSearchResults.py +2 -2
  22. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/CheckResultCheckSummaryDto.py +40 -0
  23. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/CheckResultExtract.py +66 -0
  24. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/CompletenessAndFreshnessConfigDto.py +22 -0
  25. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/CronScheduleDefinitionDto.py +24 -0
  26. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/DataQualityRuleConfigDto.py +16 -0
  27. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/DataQualityRuleDtoInput.py +26 -0
  28. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/DataQualityRuleDtoOutput.py +21 -0
  29. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/DataQualityStatusSummaryDto.py +35 -0
  30. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/DqCheckChangeEventDto.py +55 -0
  31. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/DqRuleDqStatusSummaryDto.py +20 -0
  32. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/MailNotificationDto.py +14 -0
  33. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/MarketDataDqStatusSummaryDto.py +25 -0
  34. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/MarketDataEntityOutputEnriched.py +30 -0
  35. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/MarketDataQualityRuleAssignmentDto.py +48 -0
  36. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/OutlierAbsoluteBoundConfigDto.py +25 -0
  37. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/OutlierConfigDto.py +18 -0
  38. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/OutlierModelConfigDto.py +20 -0
  39. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/OutlierRefCurveConfigDto.py +25 -0
  40. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/OverrideMetadataEntry.py +42 -0
  41. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/PagedResult.py +65 -0
  42. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/PagedResultOverrideMetadataEntry.py +10 -0
  43. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/QualityNotificationAlertAssignmentDto.py +53 -0
  44. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/QualityNotificationAlertDto.py +33 -0
  45. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/RecordValidationConfigDto.py +26 -0
  46. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/ScheduleConfigDto.py +19 -0
  47. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/ScheduleDefinitionDto.py +16 -0
  48. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/TriggerConfigDto.py +35 -0
  49. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/UpsertCurveDataOverride.py +34 -0
  50. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/VersionedCompletenessAndFreshnessConfigDto.py +30 -0
  51. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Dto/__init__.py +139 -0
  52. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Enum/AlertType.py +8 -0
  53. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Enum/CheckAggregatedStatus.py +9 -0
  54. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Enum/OutlierModel.py +6 -0
  55. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Enum/OverrideKind.py +6 -0
  56. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Enum/PeriodPrecision.py +10 -0
  57. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Enum/RuleType.py +6 -0
  58. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Enum/ScheduleDefinitionType.py +5 -0
  59. artesian_sdk-4.4.0b1/src/Artesian/MarketData/_Enum/__init__.py +29 -0
  60. artesian_sdk-4.4.0b1/src/Artesian/MarketData/__init__.py +154 -0
  61. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/ActualQuery.py +1 -0
  62. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/AuctionQuery.py +1 -0
  63. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/BidAskQuery.py +1 -0
  64. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/MasQuery.py +1 -0
  65. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/QueryService.py +6 -2
  66. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/VersionedQuery.py +1 -0
  67. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_Query.py +42 -1
  68. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/QueryParameters.py +2 -0
  69. artesian_sdk-4.4.0b1/src/Artesian/_ClientsExecutor/ArtesianJsonSerializer.py +437 -0
  70. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/_version.py +3 -3
  71. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/artesian_sdk.egg-info/PKG-INFO +672 -10
  72. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/artesian_sdk.egg-info/SOURCES.txt +48 -2
  73. artesian_sdk-4.4.0b1/tests/TestDataQualitySerialization.py +163 -0
  74. artesian_sdk-4.4.0b1/tests/TestMarketDataService.py +1424 -0
  75. artesian_sdk-4.4.0b1/tests/TestQueryOverrides.py +118 -0
  76. artesian_sdk-4.3.1.dev2/.github/workflows/python-tests.yml +0 -102
  77. artesian_sdk-4.3.1.dev2/src/Artesian/MarketData/MarketDataService.py +0 -600
  78. artesian_sdk-4.3.1.dev2/src/Artesian/MarketData/_Dto/PagedResult.py +0 -31
  79. artesian_sdk-4.3.1.dev2/src/Artesian/MarketData/_Dto/__init__.py +0 -40
  80. artesian_sdk-4.3.1.dev2/src/Artesian/MarketData/_Enum/__init__.py +0 -15
  81. artesian_sdk-4.3.1.dev2/src/Artesian/MarketData/__init__.py +0 -54
  82. artesian_sdk-4.3.1.dev2/src/Artesian/_ClientsExecutor/ArtesianJsonSerializer.py +0 -136
  83. artesian_sdk-4.3.1.dev2/src/artesian_sdk.egg-info/scm_file_list.json +0 -120
  84. artesian_sdk-4.3.1.dev2/src/artesian_sdk.egg-info/scm_version.json +0 -8
  85. artesian_sdk-4.3.1.dev2/tests/TestMarketDataService.py +0 -384
  86. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/.flake8 +0 -0
  87. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/.github/dependabot.yml +0 -0
  88. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/.gitignore +0 -0
  89. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/.vscode/extensions.json +0 -0
  90. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/.vscode/launch.json +0 -0
  91. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/.vscode/settings.json +0 -0
  92. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/CODEOWNERS +0 -0
  93. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/CONTRIBUTING.md +0 -0
  94. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/LICENSE +0 -0
  95. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/pyproject.toml +0 -0
  96. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/renovate.json +0 -0
  97. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestAuction.py +0 -0
  98. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestBidAsk.py +0 -0
  99. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestDerivedCfg.py +0 -0
  100. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestDerivedCfgTransform.py +0 -0
  101. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestDerivedTransformQueryValidation.py +0 -0
  102. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestGMEOffers.py +0 -0
  103. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestMarketDataService.py +0 -0
  104. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestMas.py +0 -0
  105. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestSearchFacet.py +0 -0
  106. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestVersioned.py +0 -0
  107. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestWriteDataAndDeleteActual.py +0 -0
  108. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestWriteDataAndDeleteAuction.py +0 -0
  109. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestWriteDataAndDeleteBidAsk.py +0 -0
  110. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestWriteDataAndDeleteMas.py +0 -0
  111. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestWriteDataAndDeleteVersioned.py +0 -0
  112. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestWriteDataAndQueryActual.py +0 -0
  113. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestWriteDataAndQueryAuction.py +0 -0
  114. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/samples/TestWriteDataAndQueryMas.py +0 -0
  115. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/setup.cfg +0 -0
  116. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/.gitignore +0 -0
  117. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/ArtesianConfig.py +0 -0
  118. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/ArtesianPolicyConfig.py +0 -0
  119. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Exceptions.py +0 -0
  120. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/ExtractionRangeConfig.py +0 -0
  121. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/GMEPublicOfferQueryParameters.py +0 -0
  122. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/GMEPublicOfferService.py +0 -0
  123. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/_Enum/BaType.py +0 -0
  124. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/_Enum/GenerationType.py +0 -0
  125. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/_Enum/Purpose.py +0 -0
  126. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/_Enum/Scope.py +0 -0
  127. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/_Enum/UnitType.py +0 -0
  128. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/_Enum/Zone.py +0 -0
  129. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/_Enum/__init__.py +0 -0
  130. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/GMEPublicOffers/__init__.py +0 -0
  131. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Granularity.py +0 -0
  132. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/CommonUnitOfMeasure.py +0 -0
  133. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/ArtesianMetadataFacet.py +0 -0
  134. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/CheckConversionResult.py +0 -0
  135. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/CurveRangeEntity.py +0 -0
  136. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/DeleteData.py +0 -0
  137. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/DerivedCfg.py +0 -0
  138. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/DerivedTransformQueryValidation.py +0 -0
  139. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/DerivedTransformQueryValidationResponse.py +0 -0
  140. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/MarketDataEntityInput.py +0 -0
  141. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/MarketDataEntityOutput.py +0 -0
  142. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/MarketDataIdentifier.py +0 -0
  143. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/TimeSerieData.py +0 -0
  144. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/UnitOfMeasure.py +0 -0
  145. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Dto/UpsertData.py +0 -0
  146. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Enum/AggregationRule.py +0 -0
  147. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Enum/ArtesianMetadataFacetType.py +0 -0
  148. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Enum/DerivedAlgorithm.py +0 -0
  149. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Enum/MarketDataType.py +0 -0
  150. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/MarketData/_Enum/UpsertMode.py +0 -0
  151. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/DefaultPartitionStrategy.py +0 -0
  152. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/RelativeInterval.py +0 -0
  153. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/ActualQueryParameters.py +0 -0
  154. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/AuctionQueryParameters.py +0 -0
  155. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/BidAskQueryParameters.py +0 -0
  156. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/ExtractionRangeConfig.py +0 -0
  157. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/ExtractionRangeType.py +0 -0
  158. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/MasQueryParameters.py +0 -0
  159. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/MostRecentSelectionConfig.py +0 -0
  160. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/VersionSelectionConfig.py +0 -0
  161. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/VersionSelectionType.py +0 -0
  162. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/VersionedQueryParameters.py +0 -0
  163. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/VersionsRangeSelectionConfig.py +0 -0
  164. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/_QueryParameters/__init__.py +0 -0
  165. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/Query/__init__.py +0 -0
  166. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/_ClientsExecutor/Client.py +0 -0
  167. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/_ClientsExecutor/RequestExecutor.py +0 -0
  168. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/_ClientsExecutor/__init__.py +0 -0
  169. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/Artesian/__init__.py +0 -0
  170. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/artesian_sdk.egg-info/dependency_links.txt +0 -0
  171. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/artesian_sdk.egg-info/requires.txt +0 -0
  172. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/src/artesian_sdk.egg-info/top_level.txt +0 -0
  173. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/tests/TestActual.py +0 -0
  174. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/tests/TestBidAsk.py +0 -0
  175. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/tests/TestClientErrorHandling.py +0 -0
  176. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/tests/TestGMEPO.py +0 -0
  177. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/tests/TestMarketDataDeleteData.py +0 -0
  178. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/tests/TestMarketDataUpsertData.py +0 -0
  179. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/tests/TestMas.py +0 -0
  180. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/tests/TestVersioned.py +0 -0
  181. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/tests/__init__.py +0 -0
  182. {artesian_sdk-4.3.1.dev2 → artesian_sdk-4.4.0b1}/tests/helpers.py +0 -0
@@ -0,0 +1,586 @@
1
+ name: "Artesian SDK Python"
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ tags:
7
+ - "v[0-9]*.[0-9]*.[0-9]*"
8
+ pull_request:
9
+ branches: [master]
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ id-token: write
14
+ contents: write
15
+ statuses: write
16
+ checks: write
17
+
18
+ jobs:
19
+ # ---------------------------------------------------------------------------
20
+ # Pyright
21
+ # ---------------------------------------------------------------------------
22
+
23
+ pyright:
24
+ name: pyright
25
+ runs-on: ubuntu-latest
26
+
27
+ permissions:
28
+ contents: read
29
+ checks: write
30
+
31
+ steps:
32
+ - name: Checkout
33
+ uses: actions/checkout@v7
34
+ with:
35
+ fetch-depth: 0
36
+
37
+ - name: Set up Python 3.11
38
+ uses: actions/setup-python@v7
39
+ with:
40
+ python-version: "3.11"
41
+
42
+ - name: Install dependencies
43
+ shell: bash
44
+ run: |
45
+ python -m pip install --upgrade pip
46
+
47
+ export SETUPTOOLS_SCM_PRETEND_VERSION="0.0.0"
48
+
49
+ echo "SETUPTOOLS_SCM_PRETEND_VERSION=$SETUPTOOLS_SCM_PRETEND_VERSION"
50
+
51
+ pip install --no-build-isolation -e ".[dev]"
52
+
53
+ - name: Run Pyright
54
+ uses: jordemort/action-pyright@v1
55
+ with:
56
+ github_token: ${{ secrets.GITHUB_TOKEN }}
57
+ reporter: github-check
58
+ lib:
59
+ level: warning
60
+ filter_mode: file
61
+
62
+ # ---------------------------------------------------------------------------
63
+ # Build / Test
64
+ # ---------------------------------------------------------------------------
65
+
66
+ build:
67
+ name: "build"
68
+ runs-on: ${{ matrix.os }}
69
+
70
+ permissions:
71
+ contents: read
72
+
73
+ strategy:
74
+ matrix:
75
+ python-version: ["3.8", "3.9", "3.10", "3.11"]
76
+ os: ["ubuntu-latest", "windows-latest", "macos-latest"]
77
+
78
+ steps:
79
+ - name: "Checkout"
80
+ uses: actions/checkout@v7
81
+ with:
82
+ fetch-depth: 0
83
+
84
+ - name: Set up Python ${{ matrix.python-version }}
85
+ uses: actions/setup-python@v7
86
+ with:
87
+ python-version: ${{ matrix.python-version }}
88
+
89
+ - name: Install dependencies
90
+ shell: bash
91
+ run: |
92
+ python -m pip install --upgrade pip
93
+
94
+ TAG="${GITHUB_REF_NAME}"
95
+
96
+ export SETUPTOOLS_SCM_PRETEND_VERSION="0.0.0"
97
+
98
+ if [[ "$TAG" =~ ^v([0-9]+\.[0-9]+\.[0-9]+)a([0-9]+)\.([0-9]+)$ ]]; then
99
+ export SETUPTOOLS_SCM_PRETEND_VERSION="${BASH_REMATCH[1]}a${BASH_REMATCH[2]}.post${BASH_REMATCH[3]}"
100
+ elif [[ "$TAG" =~ ^v([0-9]+\.[0-9]+\.[0-9]+)b([0-9]+)$ ]]; then
101
+ export SETUPTOOLS_SCM_PRETEND_VERSION="${BASH_REMATCH[1]}b${BASH_REMATCH[2]}"
102
+ elif [[ "$TAG" =~ ^v([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then
103
+ export SETUPTOOLS_SCM_PRETEND_VERSION="${BASH_REMATCH[1]}"
104
+ fi
105
+
106
+ echo "SETUPTOOLS_SCM_PRETEND_VERSION=${SETUPTOOLS_SCM_PRETEND_VERSION}"
107
+
108
+ pip install -e ".[dev]"
109
+
110
+ - name: Run flake8
111
+ run: |
112
+ flake8 .
113
+
114
+ - name: Test Pytest
115
+ run: |
116
+ pytest --junitxml=junit/test-results-${{ matrix.python-version }}-${{ matrix.os }}.xml
117
+
118
+ - name: Upload pytest test results
119
+ uses: actions/upload-artifact@v7
120
+ if: always()
121
+ with:
122
+ name: test-results-build-${{ matrix.python-version }}-${{ matrix.os }}
123
+ path: junit/test-results-${{ matrix.python-version }}-${{ matrix.os }}.xml
124
+
125
+ - name: Upload build coverage
126
+ uses: actions/upload-artifact@v7
127
+ if: always()
128
+ with:
129
+ name: coverage-build-${{ matrix.python-version }}-${{ matrix.os }}
130
+ path: coverage.xml
131
+
132
+ # ---------------------------------------------------------------------------
133
+ # Test Report
134
+ #
135
+ # Consolidates test results from all jobs (build and publish-preview)
136
+ # into a single report.
137
+ # ---------------------------------------------------------------------------
138
+
139
+ test-report:
140
+ name: "Test Report"
141
+ runs-on: ubuntu-latest
142
+ needs:
143
+ - build
144
+ - publish-preview
145
+
146
+ if: always()
147
+
148
+ permissions:
149
+ contents: read
150
+ checks: write
151
+
152
+ steps:
153
+ - name: "Checkout"
154
+ uses: actions/checkout@v7
155
+
156
+ - name: "Download test result artifacts"
157
+ uses: actions/download-artifact@v8
158
+ if: always()
159
+ with:
160
+ pattern: test-results-*
161
+ path: test-results
162
+ merge-multiple: true
163
+
164
+ - name: "Test Report"
165
+ uses: dorny/test-reporter@v3
166
+ if: always()
167
+ with:
168
+ name: Python Tests
169
+ path: "test-results/**/*.xml"
170
+ reporter: java-junit
171
+ fail-on-error: "true"
172
+ use-actions-summary: "false"
173
+
174
+ # ---------------------------------------------------------------------------
175
+ # Code Coverage
176
+ #
177
+ # Coverage from all Python/OS combinations and the PR preview merged state
178
+ # is merged into a single report.
179
+ # ---------------------------------------------------------------------------
180
+
181
+ coverage-report:
182
+ name: "Code Coverage"
183
+ runs-on: ubuntu-latest
184
+ needs:
185
+ - build
186
+ - publish-preview
187
+
188
+ if: always()
189
+
190
+ permissions:
191
+ contents: read
192
+ checks: write
193
+
194
+ steps:
195
+ - name: "Download coverage artifacts"
196
+ uses: actions/download-artifact@v8
197
+ if: always()
198
+ with:
199
+ pattern: coverage-*
200
+ path: coverage
201
+
202
+ - name: "Install dotnet"
203
+ uses: actions/setup-dotnet@v6
204
+ with:
205
+ dotnet-version: 10.x
206
+
207
+ - name: "Install reportgenerator"
208
+ shell: bash
209
+ run: dotnet tool install -g dotnet-reportgenerator-globaltool
210
+
211
+ - name: "Create code coverage report"
212
+ shell: bash
213
+ run: |
214
+ export PATH="$PATH:$HOME/.dotnet/tools"
215
+ reportgenerator \
216
+ -reports:"coverage/**/*.xml" \
217
+ -targetdir:CodeCoverage \
218
+ -reporttypes:'MarkdownSummaryGithub;Cobertura'
219
+
220
+ - name: "Write to Job Summary"
221
+ if: always()
222
+ run: cat CodeCoverage/SummaryGithub.md >> "$GITHUB_STEP_SUMMARY"
223
+
224
+ # ---------------------------------------------------------------------------
225
+ # Publish Stable
226
+ #
227
+ # Tag:
228
+ # v4.3.0
229
+ #
230
+ # Python package version:
231
+ # 4.3.0
232
+ #
233
+ # Must originate from:
234
+ # master
235
+ # ---------------------------------------------------------------------------
236
+
237
+ publish-stable:
238
+ name: "Publish Stable"
239
+ runs-on: ubuntu-latest
240
+ needs:
241
+ - pyright
242
+ - build
243
+
244
+ if: >
245
+ github.event_name == 'push' &&
246
+ startsWith(github.ref, 'refs/tags/v') &&
247
+ !contains(github.ref_name, 'a') &&
248
+ !contains(github.ref_name, 'b')
249
+
250
+ steps:
251
+ - name: "Checkout"
252
+ uses: actions/checkout@v7
253
+ with:
254
+ fetch-depth: 0
255
+
256
+ - name: "Validate GA release tag"
257
+ shell: bash
258
+ run: bash .github/workflows/validate_tag.sh "$GITHUB_REF_NAME" ga
259
+
260
+ - name: "Validate release commit is contained in master"
261
+ shell: bash
262
+ run: bash .github/workflows/validate_branch.sh "master"
263
+
264
+ - name: "Set up Python 3.11"
265
+ uses: actions/setup-python@v7
266
+ with:
267
+ python-version: "3.11"
268
+
269
+ - name: "Install dependencies"
270
+ shell: bash
271
+ run: |
272
+ python -m pip install --upgrade pip
273
+ python -m pip install build
274
+
275
+ - name: "Build package"
276
+ shell: bash
277
+ run: |
278
+ echo "Building GA package: ${GITHUB_REF_NAME#v}"
279
+ python -m build
280
+
281
+ - name: "Publish package"
282
+ uses: pypa/gh-action-pypi-publish@release/v1
283
+ with:
284
+ user: __token__
285
+ password: ${{ secrets.PYPI_API_TOKEN }}
286
+
287
+ # ---------------------------------------------------------------------------
288
+ # Publish Beta
289
+ #
290
+ # Tag:
291
+ # v4.3.0b1
292
+ # v4.3.0b2
293
+ #
294
+ # Python package version:
295
+ # 4.3.0b1
296
+ # 4.3.0b2
297
+ #
298
+ # Must originate from:
299
+ # develop-beta
300
+ #
301
+ # Beta version MUST be the next minor version after
302
+ # the latest GA version on master.
303
+ #
304
+ # Example:
305
+ #
306
+ # master = v4.2.0
307
+ # develop-beta = v4.3.0b1
308
+ #
309
+ # ---------------------------------------------------------------------------
310
+
311
+ publish-beta:
312
+ name: "Publish Beta"
313
+ runs-on: ubuntu-latest
314
+ needs:
315
+ - pyright
316
+ - build
317
+
318
+ if: >
319
+ github.event_name == 'push' &&
320
+ startsWith(github.ref, 'refs/tags/v') &&
321
+ contains(github.ref_name, 'b')
322
+
323
+ steps:
324
+ - name: "Checkout"
325
+ uses: actions/checkout@v7
326
+ with:
327
+ fetch-depth: 0
328
+
329
+ - name: "Validate Beta release tag"
330
+ shell: bash
331
+ run: bash .github/workflows/validate_tag.sh "$GITHUB_REF_NAME" beta
332
+
333
+ - name: "Validate release commit is contained in develop-beta"
334
+ shell: bash
335
+ run: bash .github/workflows/validate_branch.sh "develop-beta"
336
+
337
+ - name: "Validate next minor version"
338
+ shell: bash
339
+ run: |
340
+ TAG="${GITHUB_REF_NAME}"
341
+
342
+ git fetch origin master --tags
343
+
344
+ MASTER_VERSION=$(
345
+ git tag --merged origin/master --sort=-version:refname |
346
+ grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' |
347
+ head -n 1 |
348
+ sed 's/^v//'
349
+ )
350
+
351
+ BETA_VERSION=$(echo "$TAG" | sed -E 's/^v([0-9]+\.[0-9]+\.[0-9]+)b[0-9]+$/\1/')
352
+
353
+ echo "Master GA version: $MASTER_VERSION"
354
+ echo "Beta version: $BETA_VERSION"
355
+
356
+ if [[ -z "$MASTER_VERSION" ]]; then
357
+ echo "::error::Could not determine the latest GA version on master."
358
+ exit 1
359
+ fi
360
+
361
+ MASTER_MAJOR=$(echo "$MASTER_VERSION" | cut -d. -f1)
362
+ MASTER_MINOR=$(echo "$MASTER_VERSION" | cut -d. -f2)
363
+
364
+ BETA_MAJOR=$(echo "$BETA_VERSION" | cut -d. -f1)
365
+ BETA_MINOR=$(echo "$BETA_VERSION" | cut -d. -f2)
366
+
367
+ EXPECTED_MAJOR="$MASTER_MAJOR"
368
+ EXPECTED_MINOR="$((MASTER_MINOR + 1))"
369
+
370
+ if [[ "$BETA_MAJOR" != "$EXPECTED_MAJOR" ||
371
+ "$BETA_MINOR" != "$EXPECTED_MINOR" ]]; then
372
+ echo "::error::Beta version $BETA_VERSION is not the next minor version after master GA $MASTER_VERSION."
373
+ echo "::error::Expected: ${EXPECTED_MAJOR}.${EXPECTED_MINOR}.0bN"
374
+ exit 1
375
+ fi
376
+
377
+ echo "Beta version $BETA_VERSION is the next minor version after master GA $MASTER_VERSION."
378
+
379
+ - name: "Set up Python 3.11"
380
+ uses: actions/setup-python@v7
381
+ with:
382
+ python-version: "3.11"
383
+
384
+ - name: "Install dependencies"
385
+ shell: bash
386
+ run: |
387
+ python -m pip install --upgrade pip
388
+ python -m pip install build
389
+
390
+ - name: "Build package"
391
+ shell: bash
392
+ run: |
393
+ TAG="${GITHUB_REF_NAME}"
394
+
395
+ if [[ "$TAG" =~ ^v([0-9]+\.[0-9]+\.[0-9]+)b([0-9]+)$ ]]; then
396
+ export SETUPTOOLS_SCM_PRETEND_VERSION="${BASH_REMATCH[1]}b${BASH_REMATCH[2]}"
397
+ fi
398
+
399
+ echo "SETUPTOOLS_SCM_PRETEND_VERSION=${SETUPTOOLS_SCM_PRETEND_VERSION}"
400
+
401
+ python -m build
402
+
403
+ - name: "Publish package"
404
+ uses: pypa/gh-action-pypi-publish@release/v1
405
+ with:
406
+ user: __token__
407
+ password: ${{ secrets.PYPI_API_TOKEN }}
408
+
409
+ # ---------------------------------------------------------------------------
410
+ # Publish PR Preview
411
+ #
412
+ # Tag:
413
+ # v4.3.0a69.1
414
+ # v4.3.0a69.2
415
+ #
416
+ # Python package version:
417
+ # 4.3.0a69.post1
418
+ # 4.3.0a69.post2
419
+ #
420
+ # Where:
421
+ # 4.3.0 = latest GA version on master
422
+ # 69 = PR number
423
+ # 1 / 2 = preview iteration
424
+ #
425
+ # The PR Preview version MUST match the latest GA version on master.
426
+ # The PR must be based on the current master.
427
+ # ---------------------------------------------------------------------------
428
+
429
+ publish-preview:
430
+ name: "Publish PR Preview"
431
+ runs-on: ubuntu-latest
432
+
433
+ permissions:
434
+ contents: read
435
+ checks: write
436
+
437
+ needs:
438
+ - pyright
439
+ - build
440
+
441
+ if: >
442
+ github.event_name == 'push' &&
443
+ startsWith(github.ref, 'refs/tags/v') &&
444
+ contains(github.ref_name, 'a')
445
+
446
+ steps:
447
+ - name: "Extract PR number"
448
+ id: pr
449
+ shell: bash
450
+ run: |
451
+ TAG="${GITHUB_REF_NAME}"
452
+
453
+ if [[ ! "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+a([0-9]+)\.([0-9]+)$ ]]; then
454
+ echo "::error::Invalid PR preview tag: $TAG"
455
+ exit 1
456
+ fi
457
+
458
+ PR_NUMBER="${BASH_REMATCH[1]}"
459
+ ITERATION="${BASH_REMATCH[2]}"
460
+
461
+ echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
462
+ echo "iteration=$ITERATION" >> "$GITHUB_OUTPUT"
463
+
464
+ echo "PR number: $PR_NUMBER"
465
+ echo "Iteration: $ITERATION"
466
+
467
+ - name: "Checkout merged PR head"
468
+ uses: actions/checkout@v7
469
+ with:
470
+ ref: refs/pull/${{ steps.pr.outputs.number }}/merge
471
+ fetch-depth: 0
472
+
473
+ - name: "Validate PR Preview tag"
474
+ shell: bash
475
+ run: bash .github/workflows/validate_tag.sh "$GITHUB_REF_NAME" preview
476
+
477
+ - name: "Validate PR is based on current master"
478
+ shell: bash
479
+ run: |
480
+ git fetch origin master
481
+
482
+ CURRENT_MASTER=$(git rev-parse origin/master)
483
+ MERGE_PARENT=$(git rev-parse HEAD^1)
484
+
485
+ echo "Current master: $CURRENT_MASTER"
486
+ echo "Merge parent: $MERGE_PARENT"
487
+
488
+ if [[ "$MERGE_PARENT" != "$CURRENT_MASTER" ]]; then
489
+ echo "::error::PR Preview is not based on the current master."
490
+ exit 1
491
+ fi
492
+
493
+ echo "PR Preview is based on master."
494
+
495
+ - name: "Validate preview version"
496
+ shell: bash
497
+ run: |
498
+ TAG="${GITHUB_REF_NAME}"
499
+
500
+ git fetch origin master --tags
501
+
502
+ MASTER_VERSION=$(
503
+ git tag --merged origin/master --sort=-version:refname |
504
+ grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' |
505
+ head -n 1 |
506
+ sed 's/^v//'
507
+ )
508
+
509
+ PREVIEW_VERSION=$(echo "$TAG" | sed -E 's/^v([0-9]+\.[0-9]+\.[0-9]+)a[0-9]+\.[0-9]+$/\1/')
510
+
511
+ echo "Master GA version: $MASTER_VERSION"
512
+ echo "Preview version: $PREVIEW_VERSION"
513
+
514
+ if [[ -z "$MASTER_VERSION" ]]; then
515
+ echo "::error::Could not determine the latest GA version on master."
516
+ exit 1
517
+ fi
518
+
519
+ if [[ "$PREVIEW_VERSION" != "$MASTER_VERSION" ]]; then
520
+ echo "::error::PR Preview version $PREVIEW_VERSION does not match current master GA version $MASTER_VERSION."
521
+ exit 1
522
+ fi
523
+
524
+ echo "PR Preview version matches current master GA version: $MASTER_VERSION"
525
+
526
+ - name: "Set up Python 3.11"
527
+ uses: actions/setup-python@v7
528
+ with:
529
+ python-version: "3.11"
530
+
531
+ - name: "Install dependencies"
532
+ shell: bash
533
+ run: |
534
+ python -m pip install --upgrade pip
535
+
536
+ TAG="${GITHUB_REF_NAME}"
537
+
538
+ if [[ "$TAG" =~ ^v([0-9]+\.[0-9]+\.[0-9]+)a([0-9]+)\.([0-9]+)$ ]]; then
539
+ export SETUPTOOLS_SCM_PRETEND_VERSION="${BASH_REMATCH[1]}a${BASH_REMATCH[2]}.post${BASH_REMATCH[3]}"
540
+ fi
541
+
542
+ echo "SETUPTOOLS_SCM_PRETEND_VERSION=${SETUPTOOLS_SCM_PRETEND_VERSION:-not-set}"
543
+
544
+ pip install -e ".[dev]"
545
+ python -m pip install build
546
+
547
+ - name: "Run flake8"
548
+ run: |
549
+ flake8 .
550
+
551
+ - name: "Test Pytest"
552
+ run: |
553
+ pytest --junitxml=junit/test-results-preview.xml
554
+
555
+ - name: "Upload pytest test results"
556
+ uses: actions/upload-artifact@v7
557
+ if: always()
558
+ with:
559
+ name: test-results-preview
560
+ path: junit/test-results-preview.xml
561
+
562
+ - name: "Upload preview coverage"
563
+ uses: actions/upload-artifact@v7
564
+ if: always()
565
+ with:
566
+ name: coverage-preview
567
+ path: coverage.xml
568
+
569
+ - name: "Build package"
570
+ shell: bash
571
+ run: |
572
+ TAG="${GITHUB_REF_NAME}"
573
+
574
+ if [[ "$TAG" =~ ^v([0-9]+\.[0-9]+\.[0-9]+)a([0-9]+)\.([0-9]+)$ ]]; then
575
+ export SETUPTOOLS_SCM_PRETEND_VERSION="${BASH_REMATCH[1]}a${BASH_REMATCH[2]}.post${BASH_REMATCH[3]}"
576
+ fi
577
+
578
+ echo "SETUPTOOLS_SCM_PRETEND_VERSION=${SETUPTOOLS_SCM_PRETEND_VERSION}"
579
+
580
+ python -m build
581
+
582
+ - name: "Publish package"
583
+ uses: pypa/gh-action-pypi-publish@release/v1
584
+ with:
585
+ user: __token__
586
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ if [[ $# -ne 1 ]]; then
6
+ echo "::error::Usage: $0 <expected-branch>"
7
+ exit 2
8
+ fi
9
+
10
+ EXPECTED_BRANCH="$1"
11
+
12
+ git fetch origin "$EXPECTED_BRANCH"
13
+
14
+ COMMIT_SHA="$GITHUB_SHA"
15
+ if [[ "${GITHUB_REF:-}" == refs/tags/* ]]; then
16
+ COMMIT_SHA="$(git rev-parse "${GITHUB_REF}^{commit}")"
17
+ fi
18
+
19
+ if ! git merge-base --is-ancestor "$COMMIT_SHA" "origin/$EXPECTED_BRANCH"; then
20
+ echo "::error::Release tag does not point to a commit contained in $EXPECTED_BRANCH."
21
+ exit 1
22
+ fi
23
+
24
+ echo "Release commit is contained in $EXPECTED_BRANCH."
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ if [[ $# -ne 2 ]]; then
6
+ echo "::error::Usage: $0 <tag> <ga|beta|preview>"
7
+ exit 2
8
+ fi
9
+
10
+ TAG="$1"
11
+ TYPE="$2"
12
+
13
+ case "$TYPE" in
14
+ ga)
15
+ PATTERN='^v[0-9]+\.[0-9]+\.[0-9]+$'
16
+ EXPECTED='vX.Y.Z'
17
+ ;;
18
+
19
+ beta)
20
+ PATTERN='^v[0-9]+\.[0-9]+\.[0-9]+b[0-9]+$'
21
+ EXPECTED='vX.Y.ZbN'
22
+ ;;
23
+
24
+ preview)
25
+ PATTERN='^v[0-9]+\.[0-9]+\.[0-9]+a[0-9]+\.[0-9]+$'
26
+ EXPECTED='vX.Y.Za{PR_NUMBER}.{ITERATION}'
27
+ ;;
28
+
29
+ *)
30
+ echo "::error::Unknown tag type: $TYPE"
31
+ exit 1
32
+ ;;
33
+ esac
34
+
35
+ if [[ ! "$TAG" =~ $PATTERN ]]; then
36
+ echo "::error::Invalid $TYPE release tag: $TAG"
37
+ echo "Expected format: $EXPECTED"
38
+ exit 1
39
+ fi
40
+
41
+ echo "Valid $TYPE release tag: $TAG"