DataHub Python Builds

These prebuilt wheel files can be used to install our Python packages as of a specific commit.

Build context

Built at 2026-05-14T10:53:04.098555+00:00.

{
  "timestamp": "2026-05-14T10:53:04.098555+00:00",
  "branch": "per-connector-cli-version-matrix",
  "commit": {
    "hash": "54f3112a60df9d4c8e29c718e7a0c394bd48c94a",
    "message": "feat(ingestion): per-connector CLI version matrix + resolution stamp + test-connection path\n\nAdds per-connector CLI version resolution so a Snowflake fix can ship\nwithout forcing a bump on every other connector. A JSON matrix hosted at\nINGESTION_VERSION_MATRIX_URL maps server release x connector -> version,\nwith optional per-deployment cohort allowlists for canary rollouts.\n\nMatrix schema:\n\n  {\n    \"1.3.1.4\": {\n      \"snowflake\": {\n        \"_default\": \"1.3.1.4\",\n        \"cohorts\": [\n          { \"version\": \"1.3.1.5\",\n            \"deployments\": [\"deployment-slug-1\", \"deployment-slug-2\"] }\n        ]\n      }\n    }\n  }\n\n`deployments` entries are matched against `ingestion.deploymentId` (env\nINGESTION_DEPLOYMENT_ID, falling back to the legacy\nDATAHUB_EXECUTOR_CUSTOMER_ID var that some deployments already export).\nThe leading underscore on `_default` marks it as a sentinel key so it\ncan't collide with a connector name.\n\nResolution priority (top wins):\n  1. Per-source explicit `config.version` (unchanged)\n  2. matrix[serverVersion][connectorType].cohorts - first cohort whose\n     `deployments` list contains this deployment's id\n  3. matrix[serverVersion][connectorType]._default\n  4. defaultCliVersion from application.yaml (unchanged fallback)\n\nStorage is pluggable. Matrix consumption (IngestionVersionMatrixService)\nis decoupled from where the matrix lives via a MatrixSource interface:\n\n  - HttpUrlMatrixSource - periodic HTTP GET (the URL-backed default)\n  - NoOpMatrixSource    - empty matrix, wired when no URL is configured\n                          so the consumer never needs null checks\n\nHttpUrlMatrixSource optionally sends an `Authorization` request header\nwhen INGESTION_VERSION_MATRIX_AUTH_HEADER is set, so the matrix can live\nbehind authentication (e.g. a private GitHub repo's raw URL). Format is\nverbatim - \"token ghp_xxx\" for a GitHub PAT, \"Bearer ey...\" for an OIDC\ntoken. Unset by default; public URLs work unchanged.\n\nFuture backends (GMS aspect on a globalSettings entity, AppConfig/Consul/\netcd, signed S3) just implement MatrixSource - the resolver and the\nresolution stamp don't change.\n\nThree execution entry points are covered:\n  - CreateIngestionExecutionRequestResolver (manual triggers)\n  - IngestionScheduler.ExecutionRequestRunnable (scheduled triggers)\n  - CreateTestConnectionRequestResolver (test-connection from UI)\n\nEach one stamps the structured CliVersionResolution record on the\nresulting ExecutionRequestInput aspect. Post-hoc forensics queries the\nrecord directly instead of iterating the generic args map:\n\n  cliVersionResolution: {\n    resolved: \"1.3.1.5\",\n    source: MATRIX_COHORT,\n    matrixServerVersion: \"1.3.1.4\",\n    matchedCohortIndex: 0,\n    matrixFetchedAt: 1715079540000\n  }\n\nTest connections also now honor defaultCliVersion when no explicit\nversion is supplied - previously they silently omitted version,\nwhich caused the executor to use whatever bundled CLI it shipped\nwith rather than the configured default.\n\nFeature is off by default - when INGESTION_VERSION_MATRIX_URL is unset\nthe factory wires a NoOpMatrixSource and every resolveVersion() returns\nempty, so existing behavior is preserved exactly. In single-tenant\ndeployments without a deploymentId set, cohort matching never fires\nand only the per-connector `_default` from the matrix applies.\n\nAlso: treat empty version strings as unset (bootstrap YAML can render\n\"\" for the version field, and an empty value forwarded to the executor\nsilently falls back to the bundled CLI rather than the configured\ndefault).\n\nConfig:\n  INGESTION_VERSION_MATRIX_URL              (default: empty / disabled)\n  INGESTION_VERSION_MATRIX_REFRESH_SECONDS  (default: 600)\n  INGESTION_VERSION_MATRIX_AUTH_HEADER      (default: empty / no auth)\n  INGESTION_DEPLOYMENT_ID                   (default: falls back to\n                                             DATAHUB_EXECUTOR_CUSTOMER_ID)"
  },
  "base": {
    "hash": "25568d925476c20c74b25e5765a3cfc281949d64",
    "message": "docs: replace generic concept mappings with source-specific ones for Snowflake, Databricks, BigQuery, Redshift, and Postgres (#17396)\n\nCo-authored-by: Claude "
  },
  "pr": {
    "number": 17436,
    "title": "Draft: feat(ingestion): per-connector CLI version matrix + resolution stamp \u2026",
    "url": "https://github.com/datahub-project/datahub/pull/17436"
  }
}

Usage

Current base URL: unknown

Package Size Install command
acryl-datahub 3.797 MB uv pip install 'acryl-datahub @ <base-url>/artifacts/wheels/acryl_datahub-0.0.0.dev1-py3-none-any.whl'
acryl-datahub-actions 0.105 MB uv pip install 'acryl-datahub-actions @ <base-url>/artifacts/wheels/acryl_datahub_actions-0.0.0.dev1-py3-none-any.whl'
acryl-datahub-airflow-plugin 0.109 MB uv pip install 'acryl-datahub-airflow-plugin @ <base-url>/artifacts/wheels/acryl_datahub_airflow_plugin-0.0.0.dev1-py3-none-any.whl'
acryl-datahub-dagster-plugin 0.020 MB uv pip install 'acryl-datahub-dagster-plugin @ <base-url>/artifacts/wheels/acryl_datahub_dagster_plugin-0.0.0.dev1-py3-none-any.whl'
acryl-datahub-gx-plugin 0.011 MB uv pip install 'acryl-datahub-gx-plugin @ <base-url>/artifacts/wheels/acryl_datahub_gx_plugin-0.0.0.dev1-py3-none-any.whl'
prefect-datahub 0.011 MB uv pip install 'prefect-datahub @ <base-url>/artifacts/wheels/prefect_datahub-0.0.0.dev1-py3-none-any.whl'