first commit

This commit is contained in:
2026-10-09 02:35:14 +07:00
commit 4ca7a9a58e
108 changed files with 23035 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
# =============================================================================
# eBdesk SiCABE — dependensi image Airflow 3.3.2 / Python 3.11 (BERDAMPINGAN)
# =============================================================================
# SUMBER (input) untuk `uv pip compile`. Jangan tambahkan pin hasil ke sini —
# hasilnya ada di requirements.332.lock.
# Berdampingan dengan `requirements.in` (3.3.1) yang TIDAK diubah.
# Rencana & bukti: reviews/sicabe-18-merge-airflow332-plan.md · experiments/airflow332/
#
# Perubahan dari requirements.in (3.3.1):
# 1. apache-airflow 3.3.1 -> 3.3.2
# 2. + apache-airflow-providers-mysql (keputusan K3 — sebelumnya sengaja tidak ada)
# 3. openmetadata-* 2.0.2.0 -> 2.0.3.0 ; extra `[airflow]` DILEPAS
# 4. + sqlalchemy<2.1 (PIN WAJIB, hasil langkah A1)
#
# ⚠️ CONSTRAINT: resolusi ini di-resolve BEBAS (tanpa constraints resmi Airflow),
# karena constraints resmi 3.3.2 TIDAK dapat dipakai bersama OpenMetadata 2.0.3.0:
# constraints tabulate==0.10.0 vs OM tabulate==0.9.0 (keras)
# constraints kubernetes==36.0.3 vs OM kubernetes<36
# Jalur `--override` sudah dicoba dan TIDAK menang atas constraints.
# Preseden: lock produksi 3.3.1 pun di-resolve bebas (ia memakai tabulate 0.9.0).
# =============================================================================
apache-airflow==3.3.2
# Provider Airflow yang dipakai DAG / konektor
apache-airflow-providers-trino
apache-airflow-providers-amazon
apache-airflow-providers-http
# WAJIB: Postgres adalah metadata DB Airflow (postgresql+psycopg2://).
apache-airflow-providers-postgres
# ⚠️ BARU (keputusan K3): untuk konek ke server MySQL eksternal. Provider ini
# menarik EMPAT klien (mysqlclient, mysql-connector-python, aiomysql, pymysql)
# sehingga ketiga rute Extra `client` tersedia. `mysqlclient` tidak punya wheel
# Linux → dibangun di stage builder Dockerfile.332 + libmariadb3 sebagai runtime.
apache-airflow-providers-mysql
# OpenLineage — memancarkan event lineage dari task Airflow.
# ⚠️ INERT tanpa backend: provider ini hanya aktif bila transport/endpoint
# OpenLineage dikonfigurasi (mis. OPENLINEAGE_URL + OPENLINEAGE_API_KEY, atau
# transport lain). Di stack ini BELUM ada backend OpenLineage, jadi penambahan
# ini mengaktifkan KEMAMPUAN — belum menghasilkan lineage sampai dikonfigurasi.
# Dependensinya ringan dan hanya batas bawah: attrs>=22.2 (kita punya 26.1.0),
# providers-common-sql/common-compat (sudah ada), plus dua paket baru:
# openlineage-python + openlineage-integration-common.
apache-airflow-providers-openlineage
# ─── PIN WAJIB: melindungi plugin OpenMetadata dari kerusakan SENYAP ─────────
# SQLAlchemy 2.1 mematahkan rantai:
# flask_appbuilder -> sqlalchemy_utils -> sqlalchemy.orm.attributes
# AttributeError: module 'sqlalchemy.orm.attributes' has no attribute
# 'ScalarAttributeImpl'
# Akibatnya plugin `openmetadata-managed-apis` GAGAL DIMUAT saat Airflow start
# (log hanya "Failed to import plugin openmetadata_managed_apis"), sehingga tombol
# "Test Connection" dan jalur pipeline service client (install-phases §8.11) mati.
# ⚠️ Berkas constraints RESMI Airflow pun TIDAK mem-pin sqlalchemy — jadi hanya
# pin eksplisit inilah yang melindungi (ditemukan di experiments/airflow332).
sqlalchemy<2.1
# Transformasi & data quality
# dbt-core<1.12: 1.12.x menarik `dbt-core-experimental-parser` yang sdist-only.
dbt-core<1.12
dbt-trino>=1.8,<2.0
great_expectations>=1.0,<2.0
# Metadata ingestion
# ⚠️ Extra `[airflow]` DILEPAS (keputusan pemilik proyek). Dampaknya TERUKUR di H7:
# produksi (dengan extra) 18/18 modul · eksperimen (tanpa extra) 13/18
# yang hilang: tornado, elasticsearch, opensearchpy,
# providers-elasticsearch, providers-opensearch
# TETAP ADA (yang menentukan): workflow_factory, api.routes.deploy, pygtrie,
# attrs, werkzeug, starlette, python-multipart, otlp, presidio, spacy
# → jalur DAG ingestion metadata TETAP UTUH; OM 2.x hanya punya 2 sink
# (`file`, `metadata_rest`) dan keduanya impor bersih.
# Bila kelak memakai pipeline yang meng-ingest DARI Elasticsearch/OpenSearch,
# tambahkan paket spesifik di atas — bukan mengembalikan seluruh extra.
# Extra `[pii-processor]` TETAP dipasang (presidio + spacy) agar DAG pipeline DQ
# yang dibangkitkan plugin dapat diimpor Airflow. Versi WAJIB sama dengan server.
openmetadata-ingestion[pii-processor]==2.0.3.0
# Plugin REST API OpenMetadata yang disajikan Airflow di prefix /pluginsv2/
# (yang menghidupkan tombol "Test Connection"). Paket ini TIDAK mem-pin Airflow
# (`apache-airflow>=2.2.2`) sehingga netral terhadap pilihan versi kita.
openmetadata-managed-apis==2.0.3.0
# Lineage dbt (bronze→silver→gold) di OpenMetadata — tanpa ini workflow dbt gagal
# dengan "No module named 'collate_dbt_artifacts_parser'".
collate-dbt-artifacts-parser==0.1.4
# ─── Ditambahkan 2026-10-06 atas permintaan pemilik proyek ──────────────────
# 1) statsd — WAJIB agar Airflow memakai StatsClient (StatsD → statsd-exporter).
# Tanpa paket ini Airflow jatuh ke NoStatsLogger:
# "Could not configure StatsClient: No module named 'statsd'"
# sehingga TIDAK ada metrik yang terkirim (menutup caveat non-permanen M2).
statsd
# 2) duckdb — analitik lokal di dalam task DAG.
duckdb
# 3) pyiceberg[s3fs,pyarrow] — akses tabel Iceberg langsung (S3FileIO via s3fs)
# + konversi tabel Arrow. Menarik pyarrow, s3fs, dan aiobotocore (lihat lock).
pyiceberg[s3fs,pyarrow]