Skip to content

0.17.0 Release Process#2702

Draft
tempusfrangit wants to merge 29 commits intomainfrom
prerelease/0.17.0
Draft

0.17.0 Release Process#2702
tempusfrangit wants to merge 29 commits intomainfrom
prerelease/0.17.0

Conversation

@tempusfrangit
Copy link
Member

This branch maintains the changes needed for releasing 0.17.0. As we're performing a prerelease this will be merged into main once we are happy with the state.

@tempusfrangit tempusfrangit force-pushed the prerelease/0.17.0 branch 5 times, most recently from 2f9814b to 8991ec8 Compare February 10, 2026 19:44
@tempusfrangit tempusfrangit force-pushed the prerelease/0.17.0 branch 2 times, most recently from c7d10f2 to d1422e9 Compare February 11, 2026 22:19
Linux wheels (x64, arm64) built on ubuntu-latest with --zig.
macOS arm64 wheel built on macos-14 natively (needs Apple frameworks).
Drops macOS x64 target and ubuntu-arm runner.
setuptools_scm auto-bumps pre-release versions when HEAD has commits
past the tag. Use SETUPTOOLS_SCM_PRETEND_VERSION to force exact version.
Convert semver pre-release tags (alpha1, beta1, rc1) to PEP 440 (a1, b1, rc1).
…only SDK

- Move goreleaser to release-build (creates draft with CLI binaries)
- Append Python wheels to draft via gh release upload
- Remove goreleaser from release-publish (only PyPI + crates.io now)
- Build wheel only, no sdist (pure Python, sdist not needed)
- Force SDK version from tag via SETUPTOOLS_SCM_PRETEND_VERSION
…config

release-publish.yaml: coglet to PyPI + crates.io (on release published)
pypi-package.yaml: SDK to PyPI (on release-publish completion)

Split needed because PyPI Trusted Publisher is bound to workflow filename.
TODO: merge back once trusted publisher config is updated.
pypi-package.yaml is now a reusable workflow called from release-publish
with the tag as an input. This avoids fragile workflow_run head_branch
inference and matches the PyPI Trusted Publisher workflow filename config.
Due to pypi already having an alpha1 release we'll just jump to
alpha2
goreleaser sets Version to semver (e.g. 0.17.0-alpha1) but pip needs
PEP 440 (0.17.0a1). Without this, alpha/beta/rc CLI builds would fail
on 'cog build' because pip can't parse the version specifier.
Use rust-lang/crates-io-auth-action to exchange OIDC token for a
short-lived publish token. No more long-lived CARGO_REGISTRY_TOKEN secret.
Instead of workflow_call (which inherits caller's OIDC identity),
pypi-package.yaml now triggers independently on release:published.
Polls PyPI for coglet availability before publishing SDK.
This ensures the OIDC cert matches the trusted publisher config.
…stable

- Remove ContainsCoglet() skip that prevented cog SDK from installing
  when coglet was in requirements.txt (breaks openapi_schema generation)
- Remove old cog-runtime shim logic: R8_COG_VERSION=coglet env var,
  pip uninstall cog prefixes, version_check.go dead code
- Refactor GetCogWheelConfig/GetCogletWheelConfig into ResolveCogWheel/
  ResolveCogletWheel that accept explicit parameters instead of reading
  globals, making tests deterministic and parallel-safe
- Fix Dockerfile generation tests to use explicit COG_WHEEL=pypi
build:sdk and ci:build:sdk now read the version from crates/Cargo.toml,
convert semver to PEP 440, and set SETUPTOOLS_SCM_PRETEND_VERSION.
This ensures CLI, SDK, and coglet versions always align regardless of
branch (main, prerelease/*, or local dev).

Also adds -dev support to SemverToPEP440 conversion.
- Merge pypi-package.yaml back into release-publish.yaml (trusted
  publisher now configured for this filename)
- SDK publish uses needs: dependency instead of PyPI polling
- Add draft release check: fail if draft for same tag already exists
- Update workflows README: release/prerelease docs, version source
  of truth, trusted publishing, corrected diagrams
uv build --wheel was changed to uv build (wheel + sdist) for build:sdk
and ci:build:sdk. Release pipeline updated to upload sdist to GitHub
releases and publish to PyPI alongside wheels.
- goreleaser now reads COG_VERSION from Cargo.toml (set by mise
  build:cog) instead of git describe for ldflags and snapshot version
- CI integration tests set COG_WHEEL=dist to use the locally-built
  wheel rather than PyPI (where the version may not be published yet)
- IT harness propagates SSL_CERT_FILE, REQUESTS_CA_BUNDLE, COG_CA_CERT
  for corporate proxy/MITM environments (e.g. Cloudflare WARP)
- Include Cargo.lock update from 0.17.0-alpha3 version bump
getRepoRoot now verifies cwd is inside the resolved repo tree before
returning. Prevents auto-detection from finding dist/ wheels when
running from an unrelated directory (e.g. test tmpdir). REPO_ROOT
env var still works but only when cwd is within the tree.
- Remove 'dist' as a magic keyword in ParseWheelValue; it's now just a
  relative path resolved to abspath like any other path
- Add resolveWheelPath: handles both files and directories, globs for
  wheels in directories with platform filtering (GOARCH -> wheel tag)
- Add platform parameter to ResolveCogletWheel so Dockerfile generator
  selects the correct arch-specific coglet wheel (x86_64 vs aarch64)
- Auto-detect (findWheelInCwdDist) only checks ./dist in cwd, no longer
  chases REPO_ROOT — predictable behavior, no cross-directory surprises
- Remove getRepoRoot, findWheelInDist, findWheelInDistSilent (dead code)
- CI: use absolute paths for wheel env vars ($GITHUB_WORKSPACE/dist)
- Fix pre-existing bug: GOARCH was set to runtime.GOOS instead of
  runtime.GOARCH in StandardGenerator
- CI build-cog job now reads version from Cargo.toml and passes
  COG_VERSION to goreleaser, matching what mise run build:cog does.
  Without this, goreleaser falls back to git describe which returns
  the last tag on main (0.16.11) instead of the prerelease version.
- Update wheel_resolution test to use $REPO_ROOT/dist (absolute path)
  instead of the removed 'dist' magic keyword.
- Update wheel_coglet_missing test for new error message format.
coglet moved from optional-dependencies to dependencies in pyproject.toml.
The verification grep was looking for 'optional-dependencies' which no
longer exists, causing exit code 1.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant