This is an automated email from the ASF dual-hosted git repository.

jasonliu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 1e2e29dcfbf Integrate alembic check in ci (#60737)
1e2e29dcfbf is described below

commit 1e2e29dcfbff97ddaed52c92b5a4b8ee9563fdfc
Author: Guan-Ming (Wesley) Chiu <[email protected]>
AuthorDate: Wed Jan 21 14:07:48 2026 +0800

    Integrate alembic check in ci (#60737)
    
    * Integrate alembic check in ci
    
    * Update default value
---
 airflow-core/src/airflow/models/asset.py               | 3 +--
 airflow-core/src/airflow/models/dag.py                 | 4 +++-
 airflow-core/src/airflow/models/renderedtifields.py    | 3 +--
 airflow-core/src/airflow/models/taskinstance.py        | 4 ++--
 airflow-core/src/airflow/models/taskinstancehistory.py | 5 ++---
 airflow-core/src/airflow/models/xcom.py                | 5 +----
 airflow-core/tests/unit/utils/test_db.py               | 5 +++++
 7 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/airflow-core/src/airflow/models/asset.py 
b/airflow-core/src/airflow/models/asset.py
index 372bd65a2b0..07e97bf32e7 100644
--- a/airflow-core/src/airflow/models/asset.py
+++ b/airflow-core/src/airflow/models/asset.py
@@ -33,7 +33,6 @@ from sqlalchemy import (
     Table,
     delete,
     select,
-    text,
 )
 from sqlalchemy.ext.associationproxy import association_proxy
 from sqlalchemy.orm import Mapped, relationship
@@ -802,7 +801,7 @@ class AssetEvent(Base):
     source_task_id: Mapped[str | None] = mapped_column(StringID(), 
nullable=True)
     source_dag_id: Mapped[str | None] = mapped_column(StringID(), 
nullable=True)
     source_run_id: Mapped[str | None] = mapped_column(StringID(), 
nullable=True)
-    source_map_index: Mapped[int | None] = mapped_column(Integer, 
nullable=True, server_default=text("-1"))
+    source_map_index: Mapped[int | None] = mapped_column(Integer, 
nullable=True, server_default="-1")
     timestamp: Mapped[datetime] = mapped_column(UtcDateTime, 
default=timezone.utcnow, nullable=False)
     partition_key: Mapped[str | None] = mapped_column(StringID(), 
nullable=True)
 
diff --git a/airflow-core/src/airflow/models/dag.py 
b/airflow-core/src/airflow/models/dag.py
index d7a1ba95e57..92d2e46e4f7 100644
--- a/airflow-core/src/airflow/models/dag.py
+++ b/airflow-core/src/airflow/models/dag.py
@@ -335,7 +335,9 @@ class DagModel(Base):
     is_paused: Mapped[bool] = mapped_column(Boolean, 
default=is_paused_at_creation)
     # Whether that DAG was seen on the last DagBag load
     is_stale: Mapped[bool] = mapped_column(Boolean, nullable=False, 
default=True)
-    exceeds_max_non_backfill: Mapped[bool] = mapped_column(Boolean, 
nullable=False, default=False)
+    exceeds_max_non_backfill: Mapped[bool] = mapped_column(
+        Boolean, nullable=False, default=False, server_default="0"
+    )
     # Last time the scheduler started
     last_parsed_time: Mapped[datetime | None] = mapped_column(UtcDateTime, 
nullable=True)
     # How long it took to parse this file
diff --git a/airflow-core/src/airflow/models/renderedtifields.py 
b/airflow-core/src/airflow/models/renderedtifields.py
index fd907abaf8a..778bcc85f40 100644
--- a/airflow-core/src/airflow/models/renderedtifields.py
+++ b/airflow-core/src/airflow/models/renderedtifields.py
@@ -30,7 +30,6 @@ from sqlalchemy import (
     delete,
     exists,
     select,
-    text,
 )
 from sqlalchemy.ext.associationproxy import association_proxy
 from sqlalchemy.orm import Mapped, relationship
@@ -111,7 +110,7 @@ class RenderedTaskInstanceFields(TaskInstanceDependencies):
     dag_id: Mapped[str] = mapped_column(StringID(), primary_key=True)
     task_id: Mapped[str] = mapped_column(StringID(), primary_key=True)
     run_id: Mapped[str] = mapped_column(StringID(), primary_key=True)
-    map_index: Mapped[int] = mapped_column(Integer, primary_key=True, 
server_default=text("-1"))
+    map_index: Mapped[int] = mapped_column(Integer, primary_key=True, 
server_default="-1")
     rendered_fields: Mapped[dict] = 
mapped_column(sqlalchemy_jsonfield.JSONField(json=json), nullable=False)
     k8s_pod_yaml: Mapped[dict | None] = mapped_column(
         sqlalchemy_jsonfield.JSONField(json=json), nullable=True
diff --git a/airflow-core/src/airflow/models/taskinstance.py 
b/airflow-core/src/airflow/models/taskinstance.py
index 0fb9e4e88d9..ceedff81e68 100644
--- a/airflow-core/src/airflow/models/taskinstance.py
+++ b/airflow-core/src/airflow/models/taskinstance.py
@@ -386,14 +386,14 @@ class TaskInstance(Base, LoggingMixin):
     task_id: Mapped[str] = mapped_column(StringID(), nullable=False)
     dag_id: Mapped[str] = mapped_column(StringID(), nullable=False)
     run_id: Mapped[str] = mapped_column(StringID(), nullable=False)
-    map_index: Mapped[int] = mapped_column(Integer, nullable=False, 
server_default=text("-1"))
+    map_index: Mapped[int] = mapped_column(Integer, nullable=False, 
server_default="-1")
 
     start_date: Mapped[datetime | None] = mapped_column(UtcDateTime, 
nullable=True)
     end_date: Mapped[datetime | None] = mapped_column(UtcDateTime, 
nullable=True)
     duration: Mapped[float | None] = mapped_column(Float, nullable=True)
     state: Mapped[str | None] = mapped_column(String(20), nullable=True)
     try_number: Mapped[int] = mapped_column(Integer, default=0)
-    max_tries: Mapped[int] = mapped_column(Integer, server_default=text("-1"))
+    max_tries: Mapped[int] = mapped_column(Integer, server_default="-1")
     hostname: Mapped[str] = mapped_column(String(1000))
     unixname: Mapped[str] = mapped_column(String(1000))
     pool: Mapped[str] = mapped_column(String(256), nullable=False)
diff --git a/airflow-core/src/airflow/models/taskinstancehistory.py 
b/airflow-core/src/airflow/models/taskinstancehistory.py
index b69d2c96ff9..b8194c2ab38 100644
--- a/airflow-core/src/airflow/models/taskinstancehistory.py
+++ b/airflow-core/src/airflow/models/taskinstancehistory.py
@@ -32,7 +32,6 @@ from sqlalchemy import (
     UniqueConstraint,
     func,
     select,
-    text,
 )
 from sqlalchemy.dialects import postgresql
 from sqlalchemy.ext.mutable import MutableDict
@@ -76,13 +75,13 @@ class TaskInstanceHistory(Base):
     task_id: Mapped[str] = mapped_column(StringID(), nullable=False)
     dag_id: Mapped[str] = mapped_column(StringID(), nullable=False)
     run_id: Mapped[str] = mapped_column(StringID(), nullable=False)
-    map_index: Mapped[int] = mapped_column(Integer, nullable=False, 
server_default=text("-1"))
+    map_index: Mapped[int] = mapped_column(Integer, nullable=False, 
server_default="-1")
     try_number: Mapped[int] = mapped_column(Integer, nullable=False)
     start_date: Mapped[datetime | None] = mapped_column(UtcDateTime, 
nullable=True)
     end_date: Mapped[datetime | None] = mapped_column(UtcDateTime, 
nullable=True)
     duration: Mapped[float | None] = mapped_column(Float, nullable=True)
     state: Mapped[str | None] = mapped_column(String(20), nullable=True)
-    max_tries: Mapped[int | None] = mapped_column(Integer, 
server_default=text("-1"), nullable=True)
+    max_tries: Mapped[int | None] = mapped_column(Integer, 
server_default="-1", nullable=True)
     hostname: Mapped[str | None] = mapped_column(String(1000), nullable=True)
     unixname: Mapped[str | None] = mapped_column(String(1000), nullable=True)
     pool: Mapped[str] = mapped_column(String(256), nullable=False)
diff --git a/airflow-core/src/airflow/models/xcom.py 
b/airflow-core/src/airflow/models/xcom.py
index 17f62fa118d..6283f96e712 100644
--- a/airflow-core/src/airflow/models/xcom.py
+++ b/airflow-core/src/airflow/models/xcom.py
@@ -33,7 +33,6 @@ from sqlalchemy import (
     delete,
     func,
     select,
-    text,
 )
 from sqlalchemy.dialects import postgresql
 from sqlalchemy.ext.associationproxy import association_proxy
@@ -65,9 +64,7 @@ class XComModel(TaskInstanceDependencies):
 
     dag_run_id: Mapped[int] = mapped_column(Integer(), nullable=False, 
primary_key=True)
     task_id: Mapped[str] = mapped_column(String(ID_LEN, **COLLATION_ARGS), 
nullable=False, primary_key=True)
-    map_index: Mapped[int] = mapped_column(
-        Integer, primary_key=True, nullable=False, server_default=text("-1")
-    )
+    map_index: Mapped[int] = mapped_column(Integer, primary_key=True, 
nullable=False, server_default="-1")
     key: Mapped[str] = mapped_column(String(512, **COLLATION_ARGS), 
nullable=False, primary_key=True)
 
     # Denormalized for easier lookup.
diff --git a/airflow-core/tests/unit/utils/test_db.py 
b/airflow-core/tests/unit/utils/test_db.py
index fd30591cd14..a46c74d808b 100644
--- a/airflow-core/tests/unit/utils/test_db.py
+++ b/airflow-core/tests/unit/utils/test_db.py
@@ -26,6 +26,7 @@ from io import StringIO
 
 import pytest
 from alembic.autogenerate import compare_metadata
+from alembic.command import check
 from alembic.config import Config
 from alembic.migration import MigrationContext
 from alembic.runtime.environment import EnvironmentContext
@@ -197,6 +198,10 @@ class TestDb:
             # To resolve, use the command `alembic merge`
             script.get_current_head()
 
+    def test_has_pending_upgrade_ops(self, initialized_db):
+        config = _get_alembic_config()
+        check(config)
+
     def test_default_connections_sort(self):
         pattern = re.compile("conn_id=[\"|'](.*?)[\"|']", re.DOTALL)
         source = inspect.getsource(create_default_connections)

Reply via email to