@@ -30,72 +30,67 @@ jobs:
3030 shell : bash
3131 run : |
3232 set -euo pipefail
33- eval "$(
34- python - <<'PY'
35- import re
36- from pathlib import Path
37-
38- raw = Path("internal/schema/constants.go").read_text(encoding="utf-8")
39- const_match = re.search(r"const\s*\((.*?)\n\)", raw, re.S)
40- if not const_match:
41- raise SystemExit("failed to find const block in internal/schema/constants.go")
42-
43- values = {}
44- for line in const_match.group(1).splitlines():
45- line = line.strip()
46- if not line or line.startswith("//"):
47- continue
48- match = re.match(r"([A-Za-z0-9_]+)\s*=\s*(.+)", line)
49- if not match:
50- continue
51- name, value = match.groups()
52- values[name] = value.strip()
53-
54- def resolve(name):
55- if name not in values:
56- raise KeyError(name)
57- value = values[name]
58- if value.startswith('"') and value.endswith('"'):
59- return value[1:-1]
60- return resolve(value)
61-
62- out = {
63- "MODEL_SCHEMA_VERSION": resolve("ExpectedSchemaVersion"),
64- "MODEL_SCHEMA_URI": resolve("ExpectedSchemaURI"),
65- "MODEL_SCHEMA_DIGEST": resolve("ExpectedSchemaDigest"),
66- "SNAPSHOT_SCHEMA_VERSION": resolve("ExpectedSnapshotSchemaVersion"),
67- "SNAPSHOT_SCHEMA_URI": resolve("ExpectedSnapshotSchemaURI"),
68- "SNAPSHOT_SCHEMA_DIGEST": resolve("ExpectedSnapshotSchemaDigest"),
69- }
70-
71- for key, value in out.items():
72- escaped = value.replace("\\", "\\\\").replace('"', '\\"')
73- print(f'{key}="{escaped}"')
74- PY
75- )"
76-
77- echo "model_schema_version=${MODEL_SCHEMA_VERSION}" >> "${GITHUB_OUTPUT}"
78- echo "model_schema_uri=${MODEL_SCHEMA_URI}" >> "${GITHUB_OUTPUT}"
79- echo "model_schema_digest=${MODEL_SCHEMA_DIGEST}" >> "${GITHUB_OUTPUT}"
80- echo "snapshot_schema_version=${SNAPSHOT_SCHEMA_VERSION}" >> "${GITHUB_OUTPUT}"
81- echo "snapshot_schema_uri=${SNAPSHOT_SCHEMA_URI}" >> "${GITHUB_OUTPUT}"
82- echo "snapshot_schema_digest=${SNAPSHOT_SCHEMA_DIGEST}" >> "${GITHUB_OUTPUT}"
83-
84- if [[ "${GITHUB_EVENT_NAME}" == "push" ]]; then
85- if [[ "${GITHUB_REF_NAME}" != schema-v* ]]; then
86- echo "unexpected tag: ${GITHUB_REF_NAME}; expected schema-v*"
87- exit 1
88- fi
89- TAG_VERSION="${GITHUB_REF_NAME#schema-v}"
90- if [[ "${TAG_VERSION}" != "${MODEL_SCHEMA_VERSION}" || "${TAG_VERSION}" != "${SNAPSHOT_SCHEMA_VERSION}" ]]; then
91- echo "tag version mismatch: tag=${TAG_VERSION} model=${MODEL_SCHEMA_VERSION} snapshot=${SNAPSHOT_SCHEMA_VERSION}"
92- exit 1
93- fi
94- else
95- TAG_VERSION="${MODEL_SCHEMA_VERSION}"
96- fi
97-
98- echo "tag_version=${TAG_VERSION}" >> "${GITHUB_OUTPUT}"
33+ python - <<'PY'
34+ import os
35+ import re
36+ from pathlib import Path
37+
38+ raw = Path("internal/schema/constants.go").read_text(encoding="utf-8")
39+ const_match = re.search(r"const\s*\((.*?)\n\)", raw, re.S)
40+ if not const_match:
41+ raise SystemExit("failed to find const block in internal/schema/constants.go")
42+
43+ values = {}
44+ for line in const_match.group(1).splitlines():
45+ line = line.strip()
46+ if not line or line.startswith("//"):
47+ continue
48+ match = re.match(r"([A-Za-z0-9_]+)\s*=\s*(.+)", line)
49+ if not match:
50+ continue
51+ name, value = match.groups()
52+ values[name] = value.strip()
53+
54+ def resolve(name):
55+ if name not in values:
56+ raise KeyError(name)
57+ value = values[name]
58+ if value.startswith('"') and value.endswith('"'):
59+ return value[1:-1]
60+ return resolve(value)
61+
62+ out = {
63+ "model_schema_version": resolve("ExpectedSchemaVersion"),
64+ "model_schema_uri": resolve("ExpectedSchemaURI"),
65+ "model_schema_digest": resolve("ExpectedSchemaDigest"),
66+ "snapshot_schema_version": resolve("ExpectedSnapshotSchemaVersion"),
67+ "snapshot_schema_uri": resolve("ExpectedSnapshotSchemaURI"),
68+ "snapshot_schema_digest": resolve("ExpectedSnapshotSchemaDigest"),
69+ }
70+
71+ event_name = os.environ["GITHUB_EVENT_NAME"]
72+ if event_name == "push":
73+ ref_name = os.environ["GITHUB_REF_NAME"]
74+ prefix = "schema-v"
75+ if not ref_name.startswith(prefix):
76+ raise SystemExit(f"unexpected tag: {ref_name}; expected schema-v*")
77+ tag_version = ref_name[len(prefix):]
78+ if tag_version != out["model_schema_version"] or tag_version != out["snapshot_schema_version"]:
79+ raise SystemExit(
80+ "tag version mismatch: "
81+ f"tag={tag_version} "
82+ f"model={out['model_schema_version']} "
83+ f"snapshot={out['snapshot_schema_version']}"
84+ )
85+ else:
86+ tag_version = out["model_schema_version"]
87+
88+ out["tag_version"] = tag_version
89+
90+ with Path(os.environ["GITHUB_OUTPUT"]).open("a", encoding="utf-8") as fh:
91+ for key, value in out.items():
92+ fh.write(f"{key}={value}\n")
93+ PY
9994
10095 - name : Validate schema JSON and $id binding
10196 shell : bash
0 commit comments