This is an automated email from the ASF dual-hosted git repository.
bbovenzi pushed a commit to branch v3-4-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-4-test by this push:
new 10af805cf03 [v3-4-test] Show serializer schema in Dag version diff
only when it differs (#74683) (#74739)
10af805cf03 is described below
commit 10af805cf0317520b378d81a4a291bf048a78e7b
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Oct 14 15:59:21 2026 -0400
[v3-4-test] Show serializer schema in Dag version diff only when it differs
(#74683) (#74739)
The comparison summary always appended the serializer schema versions,
e.g. "15 changes · serialized schema 3 → 3", which is noise when both
versions share a schema.
Show only the change count, and append the schema transition only when
the base and target versions were stored by different serializer
schemas. Drop the schema part from the existing translated summaries and
add an English schemaChange string for the suffix.
(cherry picked from commit c192bdad5fd731c21bddd537026444986b8c771c)
Co-authored-by: Jed Cunningham
<[email protected]>
---
.../src/airflow/ui/public/i18n/locales/ca/dag.json | 4 ++--
.../src/airflow/ui/public/i18n/locales/de/dag.json | 4 ++--
.../src/airflow/ui/public/i18n/locales/el/dag.json | 4 ++--
.../src/airflow/ui/public/i18n/locales/en/dag.json | 5 +++--
.../src/airflow/ui/public/i18n/locales/fr/dag.json | 6 ++---
.../src/airflow/ui/public/i18n/locales/ko/dag.json | 4 ++--
.../src/airflow/ui/public/i18n/locales/pl/dag.json | 8 +++----
.../airflow/ui/public/i18n/locales/zh-TW/dag.json | 4 ++--
.../pages/Dag/Versions/VersionDiff.i18n.test.tsx | 26 +++++++++++++++++++++-
.../ui/src/pages/Dag/Versions/VersionDiff.tsx | 14 +++++++-----
10 files changed, 54 insertions(+), 25 deletions(-)
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ca/dag.json
b/airflow-core/src/airflow/ui/public/i18n/locales/ca/dag.json
index 2c7a95b8eda..455e6c134ea 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ca/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ca/dag.json
@@ -300,8 +300,8 @@
"record_one": "Registre",
"record_other": "Registres",
"selectPrompt": "Seleccioneu dues versions per veure què ha canviat entre
elles.",
- "summary_one": "{{count, number}} canvi · esquema serialitzat
{{baseSchema}} → {{targetSchema}}",
- "summary_other": "{{count, number}} canvis · esquema serialitzat
{{baseSchema}} → {{targetSchema}}",
+ "summary_one": "{{count, number}} canvi",
+ "summary_other": "{{count, number}} canvis",
"target": "Comparar amb",
"truncated": {
"description": "S'han omès els canvis de les rutes no mostrades per
respectar el límit, de manera que el recompte és un mínim.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/de/dag.json
b/airflow-core/src/airflow/ui/public/i18n/locales/de/dag.json
index f094f9a529e..bb59dd2f30b 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/de/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/de/dag.json
@@ -300,8 +300,8 @@
"record_one": "Datensatz",
"record_other": "Datensätze",
"selectPrompt": "Zwei Versionen auswählen um Änderungen zwischen diesen zu
sehen.",
- "summary_one": "{{count, number}} Änderung · Serialisiertes Schema
{{baseSchema}} → {{targetSchema}}",
- "summary_other": "{{count, number}} Änderungen · Serialisiertes Schema
{{baseSchema}} → {{targetSchema}}",
+ "summary_one": "{{count, number}} Änderung",
+ "summary_other": "{{count, number}} Änderungen",
"target": "Vergleichen mit",
"truncated": {
"description": "Einige Änderungen werden nicht gezeigt um unter dem
Limit zu bleiben, die angezeigte Anzahl ist ein Minimum an Änderungen.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/el/dag.json
b/airflow-core/src/airflow/ui/public/i18n/locales/el/dag.json
index 88a25144310..2b00a6442cd 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/el/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/el/dag.json
@@ -300,8 +300,8 @@
"record_one": "Εγγραφή",
"record_other": "Εγγραφές",
"selectPrompt": "Επιλέξτε δύο εκδόσεις για να δείτε τι άλλαξε μεταξύ
τους.",
- "summary_one": "{{count, number}} αλλαγή · σειριοποιημένο Schema
{{baseSchema}} → {{targetSchema}}",
- "summary_other": "{{count, number}} αλλαγές · σειριοποιημένο Schema
{{baseSchema}} → {{targetSchema}}",
+ "summary_one": "{{count, number}} αλλαγή",
+ "summary_other": "{{count, number}} αλλαγές",
"target": "Σύγκριση με",
"truncated": {
"description": "Οι αλλαγές σε διαδρομές που δεν εμφανίζονται
παραλείφθηκαν για να τηρηθεί το όριο, επομένως το πλήθος είναι ένας μικρότερος
αριθμός ορίου.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/en/dag.json
b/airflow-core/src/airflow/ui/public/i18n/locales/en/dag.json
index b8054c2f202..a30b6f8b5c6 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/en/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/en/dag.json
@@ -346,9 +346,10 @@
},
"record_one": "Record",
"record_other": "Records",
+ "schemaChange": "Serialized schema {{baseSchema}} → {{targetSchema}}",
"selectPrompt": "Select two versions to see what changed between them.",
- "summary_one": "{{count, number}} change · serialized schema
{{baseSchema}} → {{targetSchema}}",
- "summary_other": "{{count, number}} changes · serialized schema
{{baseSchema}} → {{targetSchema}}",
+ "summary_one": "{{count, number}} change",
+ "summary_other": "{{count, number}} changes",
"target": "Compare to",
"truncated": {
"description": "Changes at paths not shown were dropped to stay within
the limit, so the count is a lower bound.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/fr/dag.json
b/airflow-core/src/airflow/ui/public/i18n/locales/fr/dag.json
index 493c3b9598f..48e2111abef 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/fr/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/fr/dag.json
@@ -310,9 +310,9 @@
"record_one": "Enregistrement",
"record_other": "Enregistrements",
"selectPrompt": "Sélectionnez deux versions pour voir ce qui a changé
entre elles.",
- "summary_many": "{{count, number}} changements · schéma sérialisé
{{baseSchema}} → {{targetSchema}}",
- "summary_one": "{{count, number}} changement · schéma sérialisé
{{baseSchema}} → {{targetSchema}}",
- "summary_other": "{{count, number}} changements · schéma sérialisé
{{baseSchema}} → {{targetSchema}}",
+ "summary_many": "{{count, number}} changements",
+ "summary_one": "{{count, number}} changement",
+ "summary_other": "{{count, number}} changements",
"target": "Comparer avec",
"truncated": {
"description": "Les changements aux chemins non affichés ont été
supprimés pour rester dans la limite, donc le nombre est une borne inférieure.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/dag.json
b/airflow-core/src/airflow/ui/public/i18n/locales/ko/dag.json
index 34749a2ec03..ee202b4e3fa 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/ko/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/dag.json
@@ -347,8 +347,8 @@
"record_one": "레코드",
"record_other": "레코드",
"selectPrompt": "두 버전을 선택하면 그 사이에 변경된 내용을 볼 수 있습니다.",
- "summary_one": "변경 {{count, number}}개 · 직렬화 스키마 {{baseSchema}} →
{{targetSchema}}",
- "summary_other": "변경 {{count, number}}개 · 직렬화 스키마 {{baseSchema}} →
{{targetSchema}}",
+ "summary_one": "변경 {{count, number}}개",
+ "summary_other": "변경 {{count, number}}개",
"target": "비교 대상",
"truncated": {
"description": "한도를 넘지 않도록 일부 경로의 변경이 제외되었으므로, 표시된 변경 수는 실제보다 적을 수
있습니다.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pl/dag.json
b/airflow-core/src/airflow/ui/public/i18n/locales/pl/dag.json
index 6a7182ce0ed..7376278aa54 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pl/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pl/dag.json
@@ -320,10 +320,10 @@
"record_one": "Rekord",
"record_other": "Rekordy",
"selectPrompt": "Wybierz dwie wersje, aby zobaczyć, co się między nimi
zmieniło.",
- "summary_few": "{{count, number}} zmiany · schemat serializacji
{{baseSchema}} → {{targetSchema}}",
- "summary_many": "{{count, number}} zmian · schemat serializacji
{{baseSchema}} → {{targetSchema}}",
- "summary_one": "{{count, number}} zmiana · schemat serializacji
{{baseSchema}} → {{targetSchema}}",
- "summary_other": "{{count, number}} zmiany · schemat serializacji
{{baseSchema}} → {{targetSchema}}",
+ "summary_few": "{{count, number}} zmiany",
+ "summary_many": "{{count, number}} zmian",
+ "summary_one": "{{count, number}} zmiana",
+ "summary_other": "{{count, number}} zmiany",
"target": "Porównaj z",
"truncated": {
"description": "Zmiany w niepokazanych ścieżkach zostały pominięte, aby
zmieścić się w limicie, więc liczba zmian jest dolnym oszacowaniem.",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/dag.json
b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/dag.json
index 7fd0564baf8..7ac9a24163c 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/dag.json
@@ -347,8 +347,8 @@
"record_one": "記錄",
"record_other": "記錄",
"selectPrompt": "選擇兩個版本以查看它們之間的差異。",
- "summary_one": "1 項變更 · 序列化 Schema {{baseSchema}} → {{targetSchema}}",
- "summary_other": "{{count, number}} 項變更 · 序列化 Schema {{baseSchema}} →
{{targetSchema}}",
+ "summary_one": "1 項變更",
+ "summary_other": "{{count, number}} 項變更",
"target": "比較對象",
"truncated": {
"description": "為維持在上限內,未顯示的路徑上的變更已被捨棄,因此此數量僅為下限。",
diff --git
a/airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.i18n.test.tsx
b/airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.i18n.test.tsx
index 05f9c3ca043..91f56f60424 100644
---
a/airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.i18n.test.tsx
+++
b/airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.i18n.test.tsx
@@ -78,6 +78,30 @@ describe("VersionDiff in English", () => {
</Wrapper>,
);
- expect(screen.getByText(/^1 change ·/u)).toBeInTheDocument();
+ expect(screen.getByText("1 change")).toBeInTheDocument();
+ });
+
+ it("leaves the serializer schema out when both versions share it", () => {
+ render(
+ <Wrapper>
+ <VersionDiff baseVersionNumber={1} diff={oneChange}
targetVersionNumber={2} />
+ </Wrapper>,
+ );
+
+ expect(screen.queryByText(/Serialized schema/u)).not.toBeInTheDocument();
+ });
+
+ it("mentions the serializer schema when the versions were stored by
different ones", () => {
+ render(
+ <Wrapper>
+ <VersionDiff
+ baseVersionNumber={1}
+ diff={{ ...oneChange, serializer_versions: { base: 2, target: 3 } }}
+ targetVersionNumber={2}
+ />
+ </Wrapper>,
+ );
+
+ expect(screen.getByText("1 change · Serialized schema 2 →
3")).toBeInTheDocument();
});
});
diff --git a/airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.tsx
b/airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.tsx
index 835f1cabe5a..c09d019ceec 100644
--- a/airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Dag/Versions/VersionDiff.tsx
@@ -123,6 +123,7 @@ const buildColumns = (translate: TFunction<"dag">,
valuesShown: boolean): Change
export const VersionDiff = ({ baseVersionNumber, diff, targetVersionNumber }:
VersionDiffProps) => {
const { t: translate } = useTranslation("dag");
const valuesShown = diff.values_status === "available";
+ const schemaChanged = diff.serializer_versions.base !==
diff.serializer_versions.target;
if (diff.mode === "unavailable") {
return (
@@ -150,11 +151,14 @@ export const VersionDiff = ({ baseVersionNumber, diff,
targetVersionNumber }: Ve
{translate("versions.heading", { base: baseVersionNumber, target:
targetVersionNumber })}
</Heading>
<Text color="fg.muted" fontSize="sm">
- {translate("versions.summary", {
- baseSchema: diff.serializer_versions.base ?? "?",
- count: diff.total_changes,
- targetSchema: diff.serializer_versions.target ?? "?",
- })}
+ {translate("versions.summary", { count: diff.total_changes })}
+ {/* Only worth a mention when the two versions were stored by
different serializers. */}
+ {schemaChanged
+ ? ` · ${translate("versions.schemaChange", {
+ baseSchema: diff.serializer_versions.base ?? "?",
+ targetSchema: diff.serializer_versions.target ?? "?",
+ })}`
+ : undefined}
</Text>
</Box>
<Flex alignItems="center" gap={2}>