@@ -30,23 +30,56 @@ 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+ )"
3376
34- extract_const() {
35- local key="$1"
36- grep -E "^[[:space:]]*${key}[[:space:]]*=" internal/schema/constants.go | sed -E 's/.*"([^"]+)".*/\1/'
37- }
38-
39- MODEL_SCHEMA_VERSION="$(extract_const ExpectedSchemaVersion)"
40- MODEL_SCHEMA_URI="$(extract_const ExpectedSchemaURI)"
41- MODEL_SCHEMA_DIGEST="$(extract_const ExpectedSchemaDigest)"
42- SNAPSHOT_SCHEMA_VERSION="$(extract_const ExpectedSnapshotSchemaVersion)"
43- SNAPSHOT_SCHEMA_URI="$(extract_const ExpectedSnapshotSchemaURI)"
44- SNAPSHOT_SCHEMA_DIGEST="$(extract_const ExpectedSnapshotSchemaDigest)"
45-
46- if [[ -z "${MODEL_SCHEMA_VERSION}" || -z "${MODEL_SCHEMA_URI}" || -z "${MODEL_SCHEMA_DIGEST}" || -z "${SNAPSHOT_SCHEMA_VERSION}" || -z "${SNAPSHOT_SCHEMA_URI}" || -z "${SNAPSHOT_SCHEMA_DIGEST}" ]]; then
47- echo "failed to resolve schema constants from internal/schema/constants.go"
48- exit 1
49- fi
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}"
5083
5184 if [[ "${GITHUB_EVENT_NAME}" == "push" ]]; then
5285 if [[ "${GITHUB_REF_NAME}" != schema-v* ]]; then
6295 TAG_VERSION="${MODEL_SCHEMA_VERSION}"
6396 fi
6497
65- echo "model_schema_version=${MODEL_SCHEMA_VERSION}" >> "${GITHUB_OUTPUT}"
66- echo "model_schema_uri=${MODEL_SCHEMA_URI}" >> "${GITHUB_OUTPUT}"
67- echo "model_schema_digest=${MODEL_SCHEMA_DIGEST}" >> "${GITHUB_OUTPUT}"
68- echo "snapshot_schema_version=${SNAPSHOT_SCHEMA_VERSION}" >> "${GITHUB_OUTPUT}"
69- echo "snapshot_schema_uri=${SNAPSHOT_SCHEMA_URI}" >> "${GITHUB_OUTPUT}"
70- echo "snapshot_schema_digest=${SNAPSHOT_SCHEMA_DIGEST}" >> "${GITHUB_OUTPUT}"
7198 echo "tag_version=${TAG_VERSION}" >> "${GITHUB_OUTPUT}"
7299
73100 - name : Validate schema JSON and $id binding
0 commit comments