Skip to content

Commit 48a0e8b

Browse files
Manushpm8claude
andauthored
Make 1.0.0 read as one release, with the changelog as its notes (#19)
Two things about what 1.0.0 will say when the tag is recut. **The changelog named a release that does not exist.** `#16` landed its entry under `## Unreleased` while every other change sits under `## 1.0.0`, and nothing has shipped between them. The entry moves into 1.0.0's Fixed list, rewritten in the shape the rest of that list uses: the bolded symptom first, then what changed. **The release notes were the commit list.** `attach-sbom` created the GitHub Release with `--generate-notes`, so the notes on the release page were the pull requests it contained rather than the entry written for it. It now takes the changelog's section for the tag's version, and fails if there is none, which `RELEASING.md` already required of a releaser. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Signed-off-by: Manush Murali <manushm@nvidia.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent eb6c68e commit 48a0e8b

3 files changed

Lines changed: 26 additions & 14 deletions

File tree

‎.github/workflows/publish.yml‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,20 @@ jobs:
179179
cyclonedx-py environment --of JSON --validate -o dist/sbom.cyclonedx.json
180180
python -c "import json,sys; d=json.load(open('dist/sbom.cyclonedx.json')); names={c['name'] for c in d.get('components', [])}; missing={'structured-data-models-client','structured-data-models-api','structured-data-models-pql','structured-data-models-connectors','structured-data-models-relational-engine'} - names; print(f'{len(names)} components'); sys.exit(f'SBOM missing {sorted(missing)}' if missing else 0)"
181181
182+
- name: Take the release notes from the changelog
183+
run: |
184+
version="${GITHUB_REF_NAME#v}"
185+
awk -v v="$version" '
186+
{ line = $0; sub(/[ \t\r]+$/, "", line) }
187+
line == "## " v || index(line, "## " v " - ") == 1 { inside = 1; next }
188+
inside && /^## / { exit }
189+
inside { print }
190+
' CHANGELOG.md > dist/notes.md
191+
test -s dist/notes.md || {
192+
echo "CHANGELOG.md has no '## $version' entry" >&2
193+
exit 1
194+
}
195+
182196
- uses: actions/upload-artifact@v7
183197
with:
184198
name: distributions
@@ -198,7 +212,7 @@ jobs:
198212

199213
# The SBOM is a release asset, not something to upload to the index.
200214
- name: Keep only the distributions
201-
run: rm -f dist/sbom.cyclonedx.json
215+
run: rm -f dist/sbom.cyclonedx.json dist/notes.md
202216

203217
- name: Publish with Trusted Publishing and attest the artifacts
204218
uses: pypa/gh-action-pypi-publish@release/v1
@@ -237,7 +251,7 @@ jobs:
237251
--repo "$GITHUB_REPOSITORY" \
238252
--title "$GITHUB_REF_NAME" \
239253
--verify-tag \
240-
--generate-notes
254+
--notes-file dist/notes.md
241255
fi
242256
gh release upload "$GITHUB_REF_NAME" dist/sbom.cyclonedx.json \
243257
--repo "$GITHUB_REPOSITORY" --clobber

‎CHANGELOG.md‎

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,7 @@ versioned by [semantic versioning](https://semver.org) as
55
[`docs/reference/stability.md`](docs/reference/stability.md) defines it for
66
these packages. All five distributions share one version and one entry.
77

8-
## Unreleased
9-
10-
### Fixed
11-
12-
- A `KumoRelational` request sends `inference.inference_config` only with the
13-
options the caller set, and omits it otherwise. Sending the engine's defaults
14-
on every request made SDM-backed deployments refuse every relational request.
15-
16-
## 1.0.0 - 2026-10-06
8+
## 1.0.0 - 2026-10-08
179

1810
The first release. All five distributions declare `1.0.0` and are published
1911
together.
@@ -447,6 +439,8 @@ together.
447439
`Schema.from_source(DatabricksSource(...), {'m': '<metric view>'})` read its rows like a table's, and Databricks refuses that for a measure.
448440
The column look-up now reads the relation's type from `information_schema` too, so a metric view is refused before any row is read, with a `StructuredDataError` (`INVALID_REQUEST`) that says to use `source.semantic_model('<metric view>')`.
449441
The engine raises the new `MetricViewAsTableError`, a `ValueError`, pointing to `Graph.from_databricks_metric_view`.
442+
- **Every `KumoRelational` request carried the engine's default `inference_config`, which SDM-backed deployments refuse.**
443+
The request now sends `inference.inference_config` with the options the caller set alone, and omits it when there are none.
450444

451445
### Behaviour worth knowing before you rely on it
452446

‎RELEASING.md‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,13 @@ the engine's `[tool.cibuildwheel]`), and then refuses to
7171
continue unless **all five** are present and agree with the tag. That check is
7272
not ceremony: `structured-data-models-client[relational]` pins the engine by exact version, so a
7373
release missing it publishes an extra nobody can install. It then generates the
74-
SBOM and uploads through PyPI Trusted Publishing with PEP 740 attestations.
75-
Finally it creates the GitHub Release for the tag and attaches the SBOM to it,
76-
so the dependency inventory outlives the ninety days an Actions artifact gets.
74+
SBOM, and takes the release's notes from the changelog's entry for that
75+
version, refusing a tag that has none: notes that read like a diff are fixable
76+
afterwards and a distribution on PyPI is not, so both happen before anything is
77+
uploaded. It uploads through PyPI Trusted Publishing with PEP 740 attestations,
78+
then creates the GitHub Release for the tag with those notes and attaches the
79+
SBOM to it, so the dependency inventory outlives the ninety days an Actions
80+
artifact gets.
7781

7882
**There is no PyPI token.** Publishing authenticates with the workflow's OIDC
7983
identity, which is why the `publish` job is the only one holding `id-token:

0 commit comments

Comments
 (0)