Skip to content

Commit 5b1570c

Browse files
committed
Fix schema publish workflow output handling
1 parent 62293fc commit 5b1570c

1 file changed

Lines changed: 61 additions & 66 deletions

File tree

.github/workflows/publish-schema.yml

Lines changed: 61 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)