dataenginex 0.8.6__tar.gz → 0.10.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 (287) hide show
  1. {dataenginex-0.8.6 → dataenginex-0.10.0}/.claude/commands/new-feature.md +1 -1
  2. {dataenginex-0.8.6 → dataenginex-0.10.0}/.claude/commands/validate.md +4 -4
  3. dataenginex-0.10.0/.claude/settings.json +71 -0
  4. {dataenginex-0.8.6 → dataenginex-0.10.0}/.env.template +72 -72
  5. {dataenginex-0.8.6 → dataenginex-0.10.0}/.github/ISSUE_TEMPLATE/config.yml +5 -5
  6. {dataenginex-0.8.6 → dataenginex-0.10.0}/.github/dependabot.yml +12 -12
  7. {dataenginex-0.8.6/docs → dataenginex-0.10.0/.github}/release-pr-template.md +3 -3
  8. dataenginex-0.10.0/.github/workflows/auto-pr-dev-to-main.yml +15 -0
  9. dataenginex-0.10.0/.github/workflows/auto-pr-to-dev.yml +16 -0
  10. dataenginex-0.10.0/.github/workflows/ci.yml +47 -0
  11. dataenginex-0.10.0/.github/workflows/claude.yml +23 -0
  12. {dataenginex-0.8.6 → dataenginex-0.10.0}/.github/workflows/docker-build-push.yml +6 -6
  13. dataenginex-0.10.0/.github/workflows/docs-notify.yml +18 -0
  14. dataenginex-0.10.0/.github/workflows/enforce-dev-to-main.yml +11 -0
  15. {dataenginex-0.8.6 → dataenginex-0.10.0}/.github/workflows/pypi-publish.yml +9 -9
  16. dataenginex-0.10.0/.github/workflows/release-dex.yml +150 -0
  17. dataenginex-0.10.0/.github/workflows/release-please.yml +16 -0
  18. dataenginex-0.10.0/.github/workflows/security.yml +17 -0
  19. {dataenginex-0.8.6 → dataenginex-0.10.0}/.gitignore +8 -0
  20. dataenginex-0.10.0/.python-version +1 -0
  21. dataenginex-0.10.0/.release-please-manifest.json +3 -0
  22. {dataenginex-0.8.6 → dataenginex-0.10.0}/CHANGELOG.md +21 -0
  23. dataenginex-0.10.0/CLAUDE.md +59 -0
  24. {dataenginex-0.8.6 → dataenginex-0.10.0}/Dockerfile +6 -13
  25. dataenginex-0.10.0/PKG-INFO +116 -0
  26. dataenginex-0.10.0/README.md +157 -0
  27. dataenginex-0.10.0/docs/architecture.md +150 -0
  28. dataenginex-0.8.6/docs/CI_CD.md → dataenginex-0.10.0/docs/ci-cd.md +36 -37
  29. dataenginex-0.8.6/docs/CONTRIBUTING.md → dataenginex-0.10.0/docs/contributing.md +11 -9
  30. dataenginex-0.8.6/docs/DEVELOPMENT.md → dataenginex-0.10.0/docs/development.md +13 -15
  31. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/index.md +3 -3
  32. dataenginex-0.8.6/docs/OBSERVABILITY.md → dataenginex-0.10.0/docs/observability.md +19 -19
  33. dataenginex-0.10.0/docs/quickstart.md +85 -0
  34. dataenginex-0.8.6/docs/SDLC.md → dataenginex-0.10.0/docs/sdlc.md +4 -4
  35. dataenginex-0.10.0/docs/superpowers/plans/2026-03-21-phase-0-foundation.md +2242 -0
  36. dataenginex-0.10.0/docs/superpowers/plans/2026-03-22-dataenginex-1.0-master-plan.md +490 -0
  37. dataenginex-0.10.0/docs/superpowers/plans/2026-03-22-phase-1-data-layer.md +2016 -0
  38. dataenginex-0.10.0/docs/superpowers/plans/2026-03-22-phase-6a-dex-engine-integration.md +2235 -0
  39. dataenginex-0.10.0/docs/superpowers/plans/2026-03-22-phase-6b-dex-studio-redesign.md +2050 -0
  40. dataenginex-0.10.0/docs/superpowers/plans/2026-03-23-careerdex-example.md +1006 -0
  41. dataenginex-0.10.0/docs/superpowers/plans/2026-03-23-dex-studio-direct-import.md +1645 -0
  42. dataenginex-0.10.0/docs/superpowers/plans/2026-03-24-dex-naming-architecture-dry.md +1093 -0
  43. dataenginex-0.10.0/docs/superpowers/plans/2026-03-28-unified-docs-and-tooling.md +2137 -0
  44. dataenginex-0.10.0/docs/superpowers/specs/2026-03-21-dataenginex-v2-system-redesign.md +853 -0
  45. dataenginex-0.10.0/docs/superpowers/specs/2026-03-22-phase-6-integration-design.md +596 -0
  46. dataenginex-0.10.0/docs/superpowers/specs/2026-03-23-dex-studio-direct-import-design.md +469 -0
  47. dataenginex-0.10.0/docs/superpowers/specs/2026-03-24-dex-naming-architecture-dry-design.md +412 -0
  48. dataenginex-0.10.0/docs/superpowers/specs/2026-03-28-unified-docs-and-tooling-design.md +683 -0
  49. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/02_api_quickstart.py +28 -10
  50. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/07_api_ingestion.py +2 -1
  51. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/08_spark_ml.py +3 -1
  52. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/09_feature_engineering.py +3 -1
  53. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/10_model_analysis.py +3 -1
  54. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/dashboard/dashboard_config.yaml +1 -1
  55. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/dashboard/run_dashboard.py +1 -1
  56. dataenginex-0.10.0/examples/dex.yaml +82 -0
  57. dataenginex-0.10.0/examples/movies.csv +9 -0
  58. dataenginex-0.10.0/poe_tasks.toml +168 -0
  59. {dataenginex-0.8.6 → dataenginex-0.10.0}/pyproject.toml +21 -6
  60. dataenginex-0.10.0/release-please-config.json +23 -0
  61. dataenginex-0.10.0/src/dataenginex/README.md +63 -0
  62. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/__init__.py +1 -1
  63. dataenginex-0.10.0/src/dataenginex/ai/__init__.py +13 -0
  64. dataenginex-0.10.0/src/dataenginex/ai/agents/__init__.py +12 -0
  65. dataenginex-0.10.0/src/dataenginex/ai/agents/builtin.py +159 -0
  66. dataenginex-0.10.0/src/dataenginex/ai/retrieval/__init__.py +11 -0
  67. dataenginex-0.10.0/src/dataenginex/ai/retrieval/builtin.py +184 -0
  68. dataenginex-0.10.0/src/dataenginex/ai/tools/__init__.py +57 -0
  69. dataenginex-0.10.0/src/dataenginex/ai/tools/builtin.py +64 -0
  70. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/api/auth.py +182 -181
  71. dataenginex-0.10.0/src/dataenginex/api/factory.py +228 -0
  72. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/api/rate_limit.py +131 -130
  73. dataenginex-0.10.0/src/dataenginex/api/routers/ai.py +121 -0
  74. dataenginex-0.10.0/src/dataenginex/api/routers/data.py +130 -0
  75. dataenginex-0.10.0/src/dataenginex/api/routers/health.py +26 -0
  76. dataenginex-0.10.0/src/dataenginex/api/routers/ml.py +149 -0
  77. dataenginex-0.10.0/src/dataenginex/api/routers/pipelines.py +64 -0
  78. dataenginex-0.10.0/src/dataenginex/api/routers/root.py +25 -0
  79. dataenginex-0.10.0/src/dataenginex/api/routers/system.py +48 -0
  80. dataenginex-0.10.0/src/dataenginex/api/schemas.py +141 -0
  81. dataenginex-0.10.0/src/dataenginex/cli/__init__.py +3 -0
  82. dataenginex-0.10.0/src/dataenginex/cli/main.py +101 -0
  83. dataenginex-0.10.0/src/dataenginex/cli/run.py +72 -0
  84. dataenginex-0.10.0/src/dataenginex/cli/serve.py +48 -0
  85. dataenginex-0.10.0/src/dataenginex/cli/train.py +181 -0
  86. dataenginex-0.10.0/src/dataenginex/config/__init__.py +13 -0
  87. dataenginex-0.10.0/src/dataenginex/config/defaults.py +30 -0
  88. dataenginex-0.10.0/src/dataenginex/config/loader.py +196 -0
  89. dataenginex-0.10.0/src/dataenginex/config/schema.py +280 -0
  90. dataenginex-0.10.0/src/dataenginex/core/exceptions.py +101 -0
  91. dataenginex-0.10.0/src/dataenginex/core/interfaces.py +232 -0
  92. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/core/medallion_architecture.py +485 -484
  93. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/core/quality.py +3 -1
  94. dataenginex-0.10.0/src/dataenginex/core/registry.py +109 -0
  95. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/dashboard/app.py +7 -5
  96. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/dashboard/panels.py +7 -5
  97. dataenginex-0.10.0/src/dataenginex/data/__init__.py +61 -0
  98. dataenginex-0.10.0/src/dataenginex/data/connectors/__init__.py +30 -0
  99. dataenginex-0.10.0/src/dataenginex/data/connectors/csv.py +92 -0
  100. dataenginex-0.10.0/src/dataenginex/data/connectors/duckdb.py +98 -0
  101. dataenginex-0.8.6/src/dataenginex/data/connectors.py → dataenginex-0.10.0/src/dataenginex/data/connectors/legacy.py +364 -363
  102. dataenginex-0.10.0/src/dataenginex/data/pipeline/__init__.py +15 -0
  103. dataenginex-0.10.0/src/dataenginex/data/pipeline/dag.py +67 -0
  104. dataenginex-0.10.0/src/dataenginex/data/pipeline/run_history.py +88 -0
  105. dataenginex-0.10.0/src/dataenginex/data/pipeline/runner.py +287 -0
  106. dataenginex-0.10.0/src/dataenginex/data/quality/__init__.py +7 -0
  107. dataenginex-0.10.0/src/dataenginex/data/quality/gates.py +192 -0
  108. dataenginex-0.10.0/src/dataenginex/data/quality/spark.py +90 -0
  109. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/data/registry.py +161 -160
  110. dataenginex-0.10.0/src/dataenginex/data/transforms/__init__.py +10 -0
  111. dataenginex-0.10.0/src/dataenginex/data/transforms/sql.py +146 -0
  112. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/lakehouse/catalog.py +172 -169
  113. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/lakehouse/storage.py +57 -56
  114. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/middleware/logging_config.py +35 -56
  115. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/ml/drift.py +1 -1
  116. dataenginex-0.10.0/src/dataenginex/ml/features/__init__.py +11 -0
  117. dataenginex-0.10.0/src/dataenginex/ml/features/builtin.py +116 -0
  118. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/ml/llm.py +13 -21
  119. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/ml/mlflow_registry.py +5 -3
  120. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/ml/registry.py +187 -182
  121. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/ml/scheduler.py +21 -19
  122. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/ml/serving.py +164 -163
  123. dataenginex-0.10.0/src/dataenginex/ml/serving_engine/__init__.py +12 -0
  124. dataenginex-0.10.0/src/dataenginex/ml/serving_engine/builtin.py +83 -0
  125. dataenginex-0.10.0/src/dataenginex/ml/tracking/__init__.py +11 -0
  126. dataenginex-0.10.0/src/dataenginex/ml/tracking/builtin.py +146 -0
  127. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/ml/training.py +365 -364
  128. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/ml/vectorstore.py +13 -11
  129. dataenginex-0.10.0/src/dataenginex/orchestration/__init__.py +10 -0
  130. dataenginex-0.10.0/src/dataenginex/orchestration/builtin.py +101 -0
  131. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/plugins/__init__.py +7 -1
  132. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/plugins/registry.py +20 -8
  133. dataenginex-0.10.0/src/dataenginex/secops/audit.py +258 -0
  134. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/warehouse/lineage.py +204 -188
  135. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/warehouse/transforms.py +244 -243
  136. dataenginex-0.10.0/tests/conformance/test_connector.py +38 -0
  137. dataenginex-0.10.0/tests/conformance/test_feature_store.py +42 -0
  138. dataenginex-0.10.0/tests/conformance/test_tracker.py +57 -0
  139. dataenginex-0.10.0/tests/conformance/test_transform.py +23 -0
  140. dataenginex-0.10.0/tests/integration/test_cli_run.py +102 -0
  141. dataenginex-0.10.0/tests/integration/test_config_cli.py +108 -0
  142. dataenginex-0.10.0/tests/integration/test_full_app.py +89 -0
  143. dataenginex-0.10.0/tests/integration/test_pipeline_e2e.py +63 -0
  144. dataenginex-0.10.0/tests/load/__init__.py +0 -0
  145. dataenginex-0.10.0/tests/unit/test_agent_runtime.py +73 -0
  146. dataenginex-0.10.0/tests/unit/test_ai_router.py +96 -0
  147. dataenginex-0.10.0/tests/unit/test_api_auth.py +100 -0
  148. dataenginex-0.10.0/tests/unit/test_api_factory.py +167 -0
  149. dataenginex-0.10.0/tests/unit/test_api_pagination.py +83 -0
  150. dataenginex-0.10.0/tests/unit/test_api_rate_limit.py +86 -0
  151. dataenginex-0.10.0/tests/unit/test_api_schemas.py +53 -0
  152. dataenginex-0.10.0/tests/unit/test_api_validators.py +110 -0
  153. dataenginex-0.10.0/tests/unit/test_builtin_agent.py +41 -0
  154. dataenginex-0.10.0/tests/unit/test_builtin_feature_store.py +60 -0
  155. dataenginex-0.10.0/tests/unit/test_builtin_serving.py +95 -0
  156. dataenginex-0.10.0/tests/unit/test_builtin_tracker.py +75 -0
  157. dataenginex-0.10.0/tests/unit/test_cli_train.py +96 -0
  158. dataenginex-0.10.0/tests/unit/test_config_loader.py +152 -0
  159. dataenginex-0.10.0/tests/unit/test_config_schema.py +99 -0
  160. dataenginex-0.10.0/tests/unit/test_core_exceptions.py +47 -0
  161. dataenginex-0.10.0/tests/unit/test_core_interfaces.py +127 -0
  162. dataenginex-0.10.0/tests/unit/test_core_registry.py +78 -0
  163. dataenginex-0.10.0/tests/unit/test_csv_connector.py +32 -0
  164. dataenginex-0.10.0/tests/unit/test_data_router.py +95 -0
  165. dataenginex-0.10.0/tests/unit/test_duckdb_connector.py +39 -0
  166. dataenginex-0.10.0/tests/unit/test_ml_router.py +122 -0
  167. dataenginex-0.10.0/tests/unit/test_pipeline_dag.py +45 -0
  168. dataenginex-0.10.0/tests/unit/test_pipeline_runner.py +104 -0
  169. dataenginex-0.10.0/tests/unit/test_quality_gates.py +105 -0
  170. dataenginex-0.10.0/tests/unit/test_quality_spark.py +93 -0
  171. dataenginex-0.10.0/tests/unit/test_retriever.py +81 -0
  172. dataenginex-0.10.0/tests/unit/test_run_history.py +56 -0
  173. dataenginex-0.10.0/tests/unit/test_scheduler.py +56 -0
  174. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_secops.py +53 -0
  175. dataenginex-0.10.0/tests/unit/test_sql_transforms.py +90 -0
  176. dataenginex-0.10.0/tests/unit/test_system_router.py +65 -0
  177. {dataenginex-0.8.6 → dataenginex-0.10.0}/uv.lock +302 -1474
  178. dataenginex-0.8.6/.claude/settings.json +0 -8
  179. dataenginex-0.8.6/.github/workflows/ci.yml +0 -71
  180. dataenginex-0.8.6/.github/workflows/claude.yml +0 -49
  181. dataenginex-0.8.6/.github/workflows/enforce-dev-to-main.yml +0 -20
  182. dataenginex-0.8.6/.github/workflows/release-dataenginex.yml +0 -233
  183. dataenginex-0.8.6/.github/workflows/security.yml +0 -169
  184. dataenginex-0.8.6/CLAUDE.md +0 -119
  185. dataenginex-0.8.6/PKG-INFO +0 -122
  186. dataenginex-0.8.6/README.md +0 -208
  187. dataenginex-0.8.6/docs/ARCHITECTURE.md +0 -305
  188. dataenginex-0.8.6/docs/docs-hub.md +0 -103
  189. dataenginex-0.8.6/docs/quickstart.md +0 -62
  190. dataenginex-0.8.6/mkdocs.yml +0 -61
  191. dataenginex-0.8.6/netlify.toml +0 -11
  192. dataenginex-0.8.6/poe_tasks.toml +0 -165
  193. dataenginex-0.8.6/src/dataenginex/README.md +0 -72
  194. dataenginex-0.8.6/src/dataenginex/data/__init__.py +0 -33
  195. dataenginex-0.8.6/src/dataenginex/secops/audit.py +0 -154
  196. {dataenginex-0.8.6 → dataenginex-0.10.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  197. {dataenginex-0.8.6 → dataenginex-0.10.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  198. {dataenginex-0.8.6 → dataenginex-0.10.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  199. {dataenginex-0.8.6 → dataenginex-0.10.0}/.github/labels.yml +0 -0
  200. {dataenginex-0.8.6 → dataenginex-0.10.0}/.github/workflows/label-sync.yml +0 -0
  201. {dataenginex-0.8.6 → dataenginex-0.10.0}/.gitleaks.toml +0 -0
  202. {dataenginex-0.8.6 → dataenginex-0.10.0}/.pre-commit-config.yaml +0 -0
  203. {dataenginex-0.8.6 → dataenginex-0.10.0}/CODEOWNERS +0 -0
  204. {dataenginex-0.8.6 → dataenginex-0.10.0}/CONTRIBUTING.md +0 -0
  205. {dataenginex-0.8.6 → dataenginex-0.10.0}/LICENSE +0 -0
  206. {dataenginex-0.8.6 → dataenginex-0.10.0}/docker-compose.test.yml +0 -0
  207. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/adr/0000-template.md +0 -0
  208. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/adr/0001-medallion-architecture.md +0 -0
  209. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/api-reference/api.md +0 -0
  210. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/api-reference/core.md +0 -0
  211. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/api-reference/dashboard.md +0 -0
  212. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/api-reference/data.md +0 -0
  213. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/api-reference/index.md +0 -0
  214. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/api-reference/lakehouse.md +0 -0
  215. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/api-reference/middleware.md +0 -0
  216. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/api-reference/ml.md +0 -0
  217. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/api-reference/plugins.md +0 -0
  218. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/api-reference/warehouse.md +0 -0
  219. /dataenginex-0.8.6/docs/RELEASE_NOTES.md → /dataenginex-0.10.0/docs/release-notes.md +0 -0
  220. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/roadmap/project-roadmap.csv +0 -0
  221. {dataenginex-0.8.6 → dataenginex-0.10.0}/docs/roadmap/project-roadmap.json +0 -0
  222. /dataenginex-0.8.6/docs/SECURITY_SCANNING.md → /dataenginex-0.10.0/docs/security-scanning.md +0 -0
  223. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/01_hello_pipeline.py +0 -0
  224. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/03_quality_gate.py +0 -0
  225. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/04_ml_training.py +0 -0
  226. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/05_rag_demo.py +0 -0
  227. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/06_llm_quickstart.py +0 -0
  228. {dataenginex-0.8.6 → dataenginex-0.10.0}/examples/GUIDE.md +0 -0
  229. {dataenginex-0.8.6 → dataenginex-0.10.0}/scripts/GUIDE.md +0 -0
  230. {dataenginex-0.8.6 → dataenginex-0.10.0}/scripts/localstack/create-buckets.sh +0 -0
  231. {dataenginex-0.8.6 → dataenginex-0.10.0}/scripts/promote.sh +0 -0
  232. {dataenginex-0.8.6 → dataenginex-0.10.0}/sonar-project.properties +0 -0
  233. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/RELEASE_NOTES.md +0 -0
  234. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/api/__init__.py +0 -0
  235. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/api/errors.py +0 -0
  236. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/api/health.py +0 -0
  237. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/api/pagination.py +0 -0
  238. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/api/routers/__init__.py +0 -0
  239. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/core/__init__.py +0 -0
  240. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/core/schemas.py +0 -0
  241. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/core/validators.py +0 -0
  242. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/dashboard/__init__.py +0 -0
  243. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/data/profiler.py +0 -0
  244. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/lakehouse/__init__.py +0 -0
  245. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/lakehouse/partitioning.py +0 -0
  246. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/middleware/__init__.py +0 -0
  247. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/middleware/metrics.py +0 -0
  248. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/middleware/metrics_middleware.py +0 -0
  249. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/middleware/request_logging.py +0 -0
  250. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/middleware/tracing.py +0 -0
  251. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/ml/__init__.py +0 -0
  252. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/ml/metrics.py +0 -0
  253. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/py.typed +0 -0
  254. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/secops/__init__.py +0 -0
  255. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/secops/gate.py +0 -0
  256. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/secops/masking.py +0 -0
  257. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/secops/pii.py +0 -0
  258. {dataenginex-0.8.6 → dataenginex-0.10.0}/src/dataenginex/warehouse/__init__.py +0 -0
  259. {dataenginex-0.8.6 → dataenginex-0.10.0}/tasks/findings.md +0 -0
  260. {dataenginex-0.8.6 → dataenginex-0.10.0}/tasks/lessons.md +0 -0
  261. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/__init__.py +0 -0
  262. {dataenginex-0.8.6/tests/load → dataenginex-0.10.0/tests/conformance}/__init__.py +0 -0
  263. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/conftest.py +0 -0
  264. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/fixtures/__init__.py +0 -0
  265. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/fixtures/sample_data.py +0 -0
  266. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/fixtures/sample_jobs.csv +0 -0
  267. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/fixtures/sample_jobs.json +0 -0
  268. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/integration/__init__.py +0 -0
  269. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/integration/test_storage_real.py +0 -0
  270. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/__init__.py +0 -0
  271. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_data.py +0 -0
  272. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_drift_scheduler.py +0 -0
  273. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_errors.py +0 -0
  274. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_health.py +0 -0
  275. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_lakehouse.py +0 -0
  276. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_llm.py +0 -0
  277. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_logging.py +0 -0
  278. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_medallion.py +0 -0
  279. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_metrics.py +0 -0
  280. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_middleware.py +0 -0
  281. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_ml.py +0 -0
  282. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_plugins.py +0 -0
  283. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_spark_fixtures.py +0 -0
  284. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_storage_abstraction.py +0 -0
  285. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_tracing.py +0 -0
  286. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_vectorstore.py +0 -0
  287. {dataenginex-0.8.6 → dataenginex-0.10.0}/tests/unit/test_warehouse.py +0 -0
@@ -14,7 +14,7 @@ Steps:
14
14
  - Quality gate → `src/dataenginex/quality/`
15
15
  - Plugin hook → `src/dataenginex/plugins/` — entry-point based discovery
16
16
  - Framework util → `src/dataenginex/core/`
17
- 1. **Implement** — Follow existing patterns. `from __future__ import annotations` at top. structlog for API/middleware, loguru for ML/backend. No `print()`.
17
+ 1. **Implement** — Follow existing patterns. `from __future__ import annotations` at top. `structlog` only (no loguru, no print). Use `BackendRegistry` for new pluggable subsystems.
18
18
  1. **Test** — Unit tests in `tests/unit/`, integration tests in `tests/integration/` (live uvicorn). `asyncio_mode = "auto"` — no `@pytest.mark.asyncio` needed.
19
19
  1. **Validate** — Run `/validate` (dex version — includes real server step)
20
20
  1. **Update** — Mark complete in `tasks/todo.md`; update `TODO.md` if relevant
@@ -25,10 +25,10 @@ Run the full DEX validation pipeline in order. Stop and report on first failure.
25
25
  ```bash
26
26
  uv run python examples/02_api_quickstart.py &
27
27
  sleep 2
28
- curl -sf http://localhost:8000/health | python -m json.tool
29
- curl -sf http://localhost:8000/ | python -m json.tool
30
- curl -sf http://localhost:8000/metrics | head -20
31
- curl -sf -X POST http://localhost:8000/echo -H "Content-Type: application/json" -d '{"message":"test"}' | python -m json.tool
28
+ curl -sf http://localhost:17000/health | python -m json.tool
29
+ curl -sf http://localhost:17000/ | python -m json.tool
30
+ curl -sf http://localhost:17000/metrics | head -20
31
+ curl -sf -X POST http://localhost:17000/echo -H "Content-Type: application/json" -d '{"message":"test"}' | python -m json.tool
32
32
  ```
33
33
 
34
34
  Check response **bodies** — not just status codes. Kill the server after.
@@ -0,0 +1,71 @@
1
+ {
2
+ "autoUpdatesChannel": "latest",
3
+ "statusLine": {
4
+ "type": "command",
5
+ "command": "b=$(git branch --show-current 2>/dev/null); [ -n \"$b\" ] && echo \"[$b]\" || echo \"\"",
6
+ "padding": 2
7
+ },
8
+ "permissions": {
9
+ "defaultMode": "default",
10
+ "allow": [
11
+ "Read",
12
+ "Edit",
13
+ "Bash(uv run poe *)",
14
+ "Bash(uv run uvicorn *)",
15
+ "Bash(uv run python *)",
16
+ "Bash(uv run *)",
17
+ "Bash(uv lock *)",
18
+ "Bash(uv sync *)",
19
+ "Bash(curl *)",
20
+ "Bash(git status)",
21
+ "Bash(git status *)",
22
+ "Bash(git diff *)",
23
+ "Bash(git log *)",
24
+ "Bash(git branch *)",
25
+ "Bash(git add *)",
26
+ "Bash(git fetch *)",
27
+ "Bash(ls *)",
28
+ "Bash(pwd)",
29
+ "Bash(which *)",
30
+ "Bash(wc *)",
31
+ "Bash(echo *)",
32
+ "Bash(python -c *)",
33
+ "Bash(python3 *)",
34
+ "Bash(gh pr *)",
35
+ "Bash(gh issue *)",
36
+ "Bash(gh release *)",
37
+ "Bash(gh run *)",
38
+ "Bash(gh api *)",
39
+ "Bash(llmfit *)",
40
+ "Bash(npx -y @upstash/context7-mcp*)"
41
+ ],
42
+ "deny": [
43
+ "Bash(git commit *)",
44
+ "Bash(git push *)",
45
+ "Bash(rm -rf *)",
46
+ "Bash(git push --force*)",
47
+ "Bash(git reset --hard*)",
48
+ "Bash(pip install*)",
49
+ "Bash(sudo *)",
50
+ "Bash(chmod 777*)",
51
+ "Bash(curl * | bash*)"
52
+ ]
53
+ },
54
+ "hooks": {
55
+ "UserPromptSubmit": [
56
+ {
57
+ "matcher": "",
58
+ "hooks": [
59
+ {
60
+ "type": "prompt",
61
+ "prompt": "Classify this task as 'simple' (data lookup, quick questions, simple edits — use haiku for speed/cost), 'moderate' (implementation, debugging, refactoring — use sonnet for balance), or 'complex' (architecture, multi-file design, research — use opus for reasoning). Based on the user message below, respond with ONLY the word: haiku, sonnet, or opus. User message: $ARGUMENTS",
62
+ "statusMessage": "Analyzing task complexity...",
63
+ "model": "claude-haiku-4-5-20251001"
64
+ }
65
+ ]
66
+ }
67
+ ]
68
+ },
69
+ "alwaysThinkingEnabled": false,
70
+ "cleanupPeriodDays": 7
71
+ }
@@ -1,73 +1,73 @@
1
- # =============================================================================
2
- # DataEngineX — Environment Configuration Template
3
- # =============================================================================
4
- # Copy to .env and fill in values for your environment.
5
- # NEVER commit secrets to version control — use a secret manager in production.
6
- # =============================================================================
7
-
8
- # -- Application -------------------------------------------------------------
9
- APP_NAME=dataenginex
10
- ENVIRONMENT=dev
11
-
12
- # -- Logging -----------------------------------------------------------------
13
- LOG_LEVEL=INFO
14
- # "json" for structured JSON output, "console" for human-readable
15
- LOG_FORMAT=console
16
-
17
- # -- API Server --------------------------------------------------------------
18
- HOST=0.0.0.0
19
- PORT=8000
20
-
21
- # -- Authentication (JWT) ----------------------------------------------------
22
- # Set to "true" to enforce Bearer-token auth on protected endpoints
23
- DEX_AUTH_ENABLED=false
24
- # HMAC-SHA256 secret — generate with: python -c "import secrets; print(secrets.token_urlsafe(64))"
25
- DEX_JWT_SECRET=
26
- DEX_JWT_ALGORITHM=HS256
27
- # Token TTL in minutes
28
- DEX_JWT_TTL_MINUTES=60
29
-
30
- # -- Rate Limiting -----------------------------------------------------------
31
- # Set to "true" to enable per-IP token-bucket rate limiting
32
- DEX_RATE_LIMIT_ENABLED=false
33
- DEX_RATE_LIMIT_RPM=60
34
- DEX_RATE_LIMIT_BURST=10
35
-
36
- # -- Observability / Tracing ------------------------------------------------
37
- # OpenTelemetry collector endpoint (leave blank to disable OTLP export)
38
- OTLP_ENDPOINT=
39
- ENABLE_CONSOLE_TRACES=false
40
-
41
- # -- Database ----------------------------------------------------------------
42
- DB_DRIVER=
43
- DB_SERVER=
44
- DB_NAME=
45
- DB_USER=
46
- DB_PASSWORD=
47
-
48
- # -- Databricks --------------------------------------------------------------
49
- DATABRICKS_HOST=
50
- DATABRICKS_CLIENT_ID=
51
- DATABRICKS_SECRET=
52
-
53
- # -- External APIs -----------------------------------------------------------
54
- OPENWEATHER_API_KEY=
55
-
56
- # -- GitHub App (CI/CD webhooks) ---------------------------------------------
57
- GITHUB_PRIVATE_KEY=
58
- GITHUB_APP_IDENTIFIER=
59
- GITHUB_WEBHOOK_SECRET=
60
- GITHUB_PERSONAL_ACCESS_TOKEN=
61
-
62
- # -- MCP Servers -------------------------------------------------------------
63
- # GitHub MCP uses GITHUB_PERSONAL_ACCESS_TOKEN above.
64
- CLOUDFLARE_API_TOKEN=
65
- CLOUDFLARE_ACCOUNT_ID=
66
- POSTGRES_CONNECTION_STRING=
67
-
68
- # -- Notifications -----------------------------------------------------------
69
- SLACK_WEBHOOK_URL=
70
-
71
- # -- Grafana (docker-compose local dev) --------------------------------------
72
- GF_SECURITY_ADMIN_USER=admin
1
+ # =============================================================================
2
+ # DataEngineX — Environment Configuration Template
3
+ # =============================================================================
4
+ # Copy to .env and fill in values for your environment.
5
+ # NEVER commit secrets to version control — use a secret manager in production.
6
+ # =============================================================================
7
+
8
+ # -- Application -------------------------------------------------------------
9
+ APP_NAME=dataenginex
10
+ ENVIRONMENT=dev
11
+
12
+ # -- Logging -----------------------------------------------------------------
13
+ LOG_LEVEL=INFO
14
+ # "json" for structured JSON output, "console" for human-readable
15
+ LOG_FORMAT=console
16
+
17
+ # -- API Server --------------------------------------------------------------
18
+ HOST=0.0.0.0
19
+ PORT=17000
20
+
21
+ # -- Authentication (JWT) ----------------------------------------------------
22
+ # Set to "true" to enforce Bearer-token auth on protected endpoints
23
+ DEX_AUTH_ENABLED=false
24
+ # HMAC-SHA256 secret — generate with: python -c "import secrets; print(secrets.token_urlsafe(64))"
25
+ DEX_JWT_SECRET=
26
+ DEX_JWT_ALGORITHM=HS256
27
+ # Token TTL in minutes
28
+ DEX_JWT_TTL_MINUTES=60
29
+
30
+ # -- Rate Limiting -----------------------------------------------------------
31
+ # Set to "true" to enable per-IP token-bucket rate limiting
32
+ DEX_RATE_LIMIT_ENABLED=false
33
+ DEX_RATE_LIMIT_RPM=60
34
+ DEX_RATE_LIMIT_BURST=10
35
+
36
+ # -- Observability / Tracing ------------------------------------------------
37
+ # OpenTelemetry collector endpoint (leave blank to disable OTLP export)
38
+ OTLP_ENDPOINT=
39
+ ENABLE_CONSOLE_TRACES=false
40
+
41
+ # -- Database ----------------------------------------------------------------
42
+ DB_DRIVER=
43
+ DB_SERVER=
44
+ DB_NAME=
45
+ DB_USER=
46
+ DB_PASSWORD=
47
+
48
+ # -- Databricks --------------------------------------------------------------
49
+ DATABRICKS_HOST=
50
+ DATABRICKS_CLIENT_ID=
51
+ DATABRICKS_SECRET=
52
+
53
+ # -- External APIs -----------------------------------------------------------
54
+ OPENWEATHER_API_KEY=
55
+
56
+ # -- GitHub App (CI/CD webhooks) ---------------------------------------------
57
+ GITHUB_PRIVATE_KEY=
58
+ GITHUB_APP_IDENTIFIER=
59
+ GITHUB_WEBHOOK_SECRET=
60
+ GITHUB_PERSONAL_ACCESS_TOKEN=
61
+
62
+ # -- MCP Servers -------------------------------------------------------------
63
+ # GitHub MCP uses GITHUB_PERSONAL_ACCESS_TOKEN above.
64
+ CLOUDFLARE_API_TOKEN=
65
+ CLOUDFLARE_ACCOUNT_ID=
66
+ POSTGRES_CONNECTION_STRING=
67
+
68
+ # -- Notifications -----------------------------------------------------------
69
+ SLACK_WEBHOOK_URL=
70
+
71
+ # -- Grafana (docker-compose local dev) --------------------------------------
72
+ GF_SECURITY_ADMIN_USER=admin
73
73
  GF_SECURITY_ADMIN_PASSWORD=admin
@@ -1,20 +1,20 @@
1
1
  blank_issues_enabled: false
2
2
  contact_links:
3
3
  - name: Security Policy
4
- url: https://github.com/TheDataEngineX/DEX/blob/main/SECURITY.md
4
+ url: https://github.com/TheDataEngineX/dataenginex/blob/main/SECURITY.md
5
5
  about: Report vulnerabilities responsibly using the security policy
6
6
  - name: Support Guide
7
- url: https://github.com/TheDataEngineX/DEX/blob/main/SUPPORT.md
7
+ url: https://github.com/TheDataEngineX/dataenginex/blob/main/SUPPORT.md
8
8
  about: Find the right channel for help, bugs, and feature proposals
9
9
  - name: Questions and Ideas (GitHub Discussions)
10
- url: https://github.com/TheDataEngineX/DEX/discussions
10
+ url: https://github.com/TheDataEngineX/dataenginex/discussions
11
11
  about: Use Discussions for Q&A, design brainstorming, and early proposals
12
12
  - name: Organization Projects
13
13
  url: https://github.com/orgs/TheDataEngineX/projects
14
14
  about: Track roadmap status, milestones, and planning boards
15
15
  - name: Documentation
16
- url: https://github.com/TheDataEngineX/DEX/blob/main/docs/docs-hub.md
16
+ url: https://github.com/TheDataEngineX/dataenginex/blob/main/docs/docs-hub.md
17
17
  about: Check the documentation for guides and runbooks
18
18
  - name: SDLC Guide
19
- url: https://github.com/TheDataEngineX/DEX/blob/main/docs/SDLC.md
19
+ url: https://github.com/TheDataEngineX/dataenginex/blob/main/docs/SDLC.md
20
20
  about: Review the development lifecycle and workflow
@@ -1,12 +1,12 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: pip
4
- directory: "/"
5
- schedule:
6
- interval: weekly
7
- target-branch: dev
8
- - package-ecosystem: github-actions
9
- directory: "/"
10
- schedule:
11
- interval: weekly
12
- target-branch: dev
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: "/"
5
+ schedule:
6
+ interval: weekly
7
+ target-branch: dev
8
+ - package-ecosystem: github-actions
9
+ directory: "/"
10
+ schedule:
11
+ interval: weekly
12
+ target-branch: dev
@@ -1,11 +1,11 @@
1
1
  # Release PR Template
2
2
 
3
- Use this template whenever opening a release PR (`dev → main`). Reference `RELEASE_NOTES.md` and verify QA steps before merging.
3
+ Use this template whenever opening a release PR (`dev → main`). Reference `release-notes.md` and verify QA steps before merging.
4
4
 
5
5
  ## Summary
6
6
 
7
7
  - Describe what changed (e.g., alerts, APIs, docs).
8
- - Link to the release note: [RELEASE_NOTES.md](RELEASE_NOTES.md).
8
+ - Link to the release note: [release-notes.md](release-notes.md).
9
9
  - Note any rollout considerations (e.g., Alertmanager rules, Docker image tag).
10
10
 
11
11
  ## Verification
@@ -13,7 +13,7 @@ Use this template whenever opening a release PR (`dev → main`). Reference `REL
13
13
  - `uv run poe lint`
14
14
  - `./.venv/bin/pytest -v`
15
15
  - `docker compose build`
16
- - Reload Prometheus/Alertmanager (see `OBSERVABILITY.md` → "Reloading Alert Rules").
16
+ - Reload Prometheus/Alertmanager (see `observability.md` → "Reloading Alert Rules").
17
17
 
18
18
  ## QA Checklist
19
19
 
@@ -0,0 +1,15 @@
1
+ name: Auto PR — dev → main
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - dev
7
+
8
+ permissions:
9
+ contents: write
10
+ pull-requests: write
11
+
12
+ jobs:
13
+ auto-pr:
14
+ uses: TheDataEngineX/.github/.github/workflows/auto-pr-dev-to-main.yml@main
15
+ secrets: inherit
@@ -0,0 +1,16 @@
1
+ name: Auto PR — feature → dev
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - 'feature/**'
7
+ - 'fix/**'
8
+
9
+ permissions:
10
+ contents: write
11
+ pull-requests: write
12
+
13
+ jobs:
14
+ auto-pr:
15
+ uses: TheDataEngineX/.github/.github/workflows/auto-pr-to-dev.yml@main
16
+ secrets: inherit
@@ -0,0 +1,47 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, dev]
6
+ pull_request:
7
+ branches: [main, dev]
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ quality:
15
+ name: Code Quality
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v6
19
+ - uses: astral-sh/setup-uv@v7
20
+ with:
21
+ version: "latest"
22
+ python-version: "3.13"
23
+ - run: uv sync --group ml
24
+ env:
25
+ UV_PROJECT_ENVIRONMENT: .venv
26
+ - run: uv run poe quality
27
+
28
+ test:
29
+ name: Tests
30
+ runs-on: ubuntu-latest
31
+ needs: quality
32
+ steps:
33
+ - uses: actions/checkout@v6
34
+ - uses: astral-sh/setup-uv@v7
35
+ with:
36
+ version: "latest"
37
+ python-version: "3.13"
38
+ - run: uv sync --group ml
39
+ env:
40
+ UV_PROJECT_ENVIRONMENT: .venv
41
+ - run: uv run poe test-cov-core
42
+ - uses: codecov/codecov-action@v6
43
+ with:
44
+ flags: dataenginex
45
+ fail_ci_if_error: false
46
+ env:
47
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
@@ -0,0 +1,23 @@
1
+ name: Claude Code
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened, assigned]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ permissions:
14
+ contents: read
15
+ pull-requests: read
16
+ issues: read
17
+ actions: read
18
+ id-token: write
19
+
20
+ jobs:
21
+ claude:
22
+ uses: TheDataEngineX/.github/.github/workflows/claude.yml@main
23
+ secrets: inherit
@@ -1,5 +1,5 @@
1
1
  # Build and push Docker image to GitHub Container Registry (GHCR)
2
- # Triggers on merge to main — publishes ghcr.io/thedataenginex/dex:<version>
2
+ # Triggers on merge to main — publishes ghcr.io/thedataenginex/dataenginex:<version>
3
3
 
4
4
  name: Docker Build & Push
5
5
 
@@ -34,26 +34,26 @@ jobs:
34
34
 
35
35
  - name: Docker metadata
36
36
  id: meta
37
- uses: docker/metadata-action@v5
37
+ uses: docker/metadata-action@v6
38
38
  with:
39
- images: ghcr.io/thedataenginex/dex
39
+ images: ghcr.io/thedataenginex/dataenginex
40
40
  tags: |
41
41
  type=raw,value=${{ steps.version.outputs.version }}
42
42
  type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
43
43
  type=sha,prefix=sha-
44
44
 
45
45
  - name: Set up Docker Buildx
46
- uses: docker/setup-buildx-action@v3
46
+ uses: docker/setup-buildx-action@v4
47
47
 
48
48
  - name: Log in to GHCR
49
- uses: docker/login-action@v3
49
+ uses: docker/login-action@v4
50
50
  with:
51
51
  registry: ghcr.io
52
52
  username: ${{ github.actor }}
53
53
  password: ${{ secrets.GITHUB_TOKEN }}
54
54
 
55
55
  - name: Build and push
56
- uses: docker/build-push-action@v6
56
+ uses: docker/build-push-action@v7
57
57
  with:
58
58
  context: .
59
59
  push: true
@@ -0,0 +1,18 @@
1
+ name: Notify Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths: ['docs/**', 'src/**/**.py']
7
+
8
+ jobs:
9
+ notify:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: peter-evans/repository-dispatch@v3
13
+ with:
14
+ token: ${{ secrets.DOCS_DISPATCH_TOKEN }}
15
+ repository: TheDataEngineX/docs
16
+ event-type: docs-update
17
+ client-payload: >-
18
+ {"repo": "${{ github.repository }}", "ref": "${{ github.sha }}"}
@@ -0,0 +1,11 @@
1
+ name: Enforce dev-to-main
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - main
7
+
8
+ jobs:
9
+ enforce:
10
+ uses: TheDataEngineX/.github/.github/workflows/enforce-dev-to-main.yml@main
11
+ secrets: inherit
@@ -1,5 +1,5 @@
1
1
  # DataEngineX PyPI Publishing
2
- # Triggered by GitHub release from release-dataenginex.yml (tag: dataenginex-vX.Y.Z).
2
+ # Triggered when release-please creates a GitHub Release (tag: vX.Y.Z).
3
3
  # Detects if src/dataenginex/ actually changed since previous dataenginex tag, then publishes.
4
4
 
5
5
  name: PyPI Publish
@@ -11,7 +11,7 @@ on:
11
11
  workflow_dispatch:
12
12
  inputs:
13
13
  tag:
14
- description: "Tag to publish (e.g., dataenginex-v0.6.0)"
14
+ description: "Tag to publish (e.g., v0.8.7)"
15
15
  required: false
16
16
  type: string
17
17
 
@@ -55,7 +55,7 @@ jobs:
55
55
 
56
56
  CURRENT_TAG="${RELEASE_TAG:-${DISPATCH_TAG:-}}"
57
57
  if [[ -z "${CURRENT_TAG}" ]]; then
58
- CURRENT_TAG="$(git tag --list 'dataenginex-v*' --sort=-version:refname | head -n 1 || true)"
58
+ CURRENT_TAG="$(git tag --list 'v[0-9]*' --sort=-version:refname | head -n 1 || true)"
59
59
  fi
60
60
 
61
61
  if [[ -z "${CURRENT_TAG}" ]]; then
@@ -65,8 +65,8 @@ jobs:
65
65
 
66
66
  echo "current_tag=${CURRENT_TAG}" >> "$GITHUB_OUTPUT"
67
67
 
68
- STABLE_REGEX='^dataenginex-v[0-9]+\.[0-9]+\.[0-9]+$'
69
- ANY_SEMVER_REGEX='^dataenginex-v[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$'
68
+ STABLE_REGEX='^v[0-9]+\.[0-9]+\.[0-9]+$'
69
+ ANY_SEMVER_REGEX='^v[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$'
70
70
 
71
71
  if [[ "${CURRENT_TAG}" =~ $STABLE_REGEX ]]; then
72
72
  echo "approved_tag=true" >> "$GITHUB_OUTPUT"
@@ -79,13 +79,13 @@ jobs:
79
79
  exit 1
80
80
  fi
81
81
 
82
- TAG_VERSION="${CURRENT_TAG#dataenginex-v}"
82
+ TAG_VERSION="${CURRENT_TAG#v}"
83
83
  if [[ "$EVENT_NAME" == "release" && "$TAG_VERSION" != "$PACKAGE_VERSION" ]]; then
84
84
  echo "Release tag (${CURRENT_TAG}) does not match pyproject.toml version (${PACKAGE_VERSION})."
85
85
  exit 1
86
86
  fi
87
87
 
88
- PREVIOUS_TAG="$(git tag --list 'dataenginex-v*' --sort=-version:refname | grep -Fxv "${CURRENT_TAG}" | head -n 1 || true)"
88
+ PREVIOUS_TAG="$(git tag --list 'v[0-9]*' --sort=-version:refname | grep -Fxv "${CURRENT_TAG}" | head -n 1 || true)"
89
89
  echo "previous_tag=${PREVIOUS_TAG}" >> "$GITHUB_OUTPUT"
90
90
 
91
91
  if [[ -z "${PREVIOUS_TAG}" ]]; then
@@ -252,7 +252,7 @@ jobs:
252
252
  } else if (dataenginexChanged === 'false') {
253
253
  reason = `No changes in src/dataenginex/ since ${previousTag}`;
254
254
  } else if (approvedTag === 'false') {
255
- reason = `Tag ${currentTag} is not a stable release (requires dataenginex-vMAJOR.MINOR.PATCH)`;
255
+ reason = `Tag ${currentTag} is not a stable release (requires vMAJOR.MINOR.PATCH)`;
256
256
  }
257
257
 
258
258
  try {
@@ -286,5 +286,5 @@ jobs:
286
286
  elif [[ "${{ needs.detect-dataenginex-changes.outputs.dataenginex_changed }}" == "false" ]]; then
287
287
  echo "Skipping TestPyPI/PyPI publish: no changes in src/dataenginex/ since previous tag ${{ needs.detect-dataenginex-changes.outputs.previous_tag }}."
288
288
  elif [[ "${{ needs.detect-dataenginex-changes.outputs.approved_tag }}" == "false" ]]; then
289
- echo "Published to TestPyPI only: tag ${{ needs.detect-dataenginex-changes.outputs.current_tag }} is not an approved stable tag (requires dataenginex-vMAJOR.MINOR.PATCH)."
289
+ echo "Published to TestPyPI only: tag ${{ needs.detect-dataenginex-changes.outputs.current_tag }} is not an approved stable tag (requires vMAJOR.MINOR.PATCH)."
290
290
  fi