Release v0.75.4 — unblock .NET + Go SDK publishes
Date: 2026-04-23
Tag: v0.75.4
Summary
Two real fixes that unblock the .NET and Go SDK publishing pipelines, plus two post-v0.75.3 release-tooling fixes promoted to a tagged release. No runtime changes to the API itself.
This release converts the “deferred SDK gaps” of v0.75.1–0.75.3 from three open blockers down to one (PyPI trusted-publisher config — operator-only).
What shipped
1. .NET SDK: restore RenderStreamingClient.cs
The hand-written streaming helper + its StreamingResponse wrapper class were added in aca2dc8 (2026-04-19) alongside the streaming API regen, but got deleted in a later audit-remediation commit (b1f5b80) that pruned stale SDK files — the deletion was incidental to a broader cleanup, and .openapi-generator-ignore still listed the file as protected from regeneration. Without it, packages/sdk-dotnet/tests/RenderStreamingTest.cs referenced both types and the test project failed to compile, blocking every NuGet publish since.
Restored the 493-line file verbatim from aca2dc8 via git show aca2dc8:path > path. The .openapi-generator-ignore was already correctly configured — the sweep logic in scripts/generate-sdks.ts does not aggressively delete files outside the generator’s FILES manifest, so restoration sticks without further hardening.
2. Go SDK: fix invalid package name
packages/sdk-go/openapi-generator-config.yaml declared packageName: pulp-engine, which produced package pulp-engine at the top of every generated .go file. Go identifiers cannot contain hyphens — every Go SDK build since Stage 2 shipped failed at column 13 of the first file with expected ';', found '-'.
The Go module path (github.com/TroyCoderBoy/pulp-engine-go) IS intentionally hyphenated — that’s the standalone public mirror repo’s canonical import path. The package identifier inside the code is separate and must be a valid Go identifier. Users go get github.com/TroyCoderBoy/pulp-engine-go and then reference pulpengine.XYZ in code.
Fix: packageName: pulpengine in the generator config, plus the same rename in scripts/generate-sdks.ts#goPackageName() (a hard-coded template that writes version.go). Regeneration produced Go files with package pulpengine as expected.
3. release.yml: drop broken gh release edit --help | grep '--latest' guard
Landed on main between v0.75.3 and v0.75.4 as de5bd20; promoted to a tagged release here. The guard false-negatived on gh 2.89.0 because the help-text format drifted between 2.51 and 2.89 — even though the --latest=<bool> flag works correctly, the grep didn’t match.
4. publish-sdk-dotnet.yml: smoke-test env
Landed on main as 51db4ba; promoted to a tagged release here. SKIP_RENDERER_WARMUP=true + PREVIEW_ROUTES_ENABLED=false; poll /health (liveness) not /health/ready (readiness).
GH Actions runners don’t have Chromium at Puppeteer’s default cache path, so the preview capability probe reports browser_unavailable and /health/ready returns 503 for the life of the process. The .NET smoke test exercises CRUD routes, not rendering, so renderer status is irrelevant.
Operational status
After v0.75.4 dispatches complete:
- ✅ NuGet (
PulpEngine.Sdk@0.75.4) — should publish for the first time since Stage 1. - ✅ Go mirror (
pulp-engine-go@v0.75.4) — should build and sync for the first time since Stage 2. - ❌ PyPI (
pulp-engine@0.75.4) — still blocked on trusted-publisher config at pypi.org. Operator-only; no code fix can land this.
Verification
Local:
node scripts/check-version.mjs— passes in tagged + off-tag statespnpm sdk:generate— regenerates with correct Go package name;grep -c '^package pulpengine' packages/sdk-go/*.goconfirms all files use the new identifierpnpm lint+pnpm typecheck— no material changes
CI:
- Same coverage as v0.75.3; no new test behaviour or config
- The v0.75.3 auto-dispatch fixes (MAX_WAIT + timeout-minutes + dropped gh guard) should land Release end-to-end green on the tag push — first fully-automatic tag-push release cycle since the billing-block recovery