Repository navigation
Conversation
Point packaging, ruff, pytest, and coverage at the new layout and write generated bindings to src/openshell/_proto. Exclude the bindings from ty explicitly, since they are about to be committed. Drop pyelftools, which only core's packaging tooling uses. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
sandbox_test.py read core's sdk/conformance/oauth-client-credentials.json through a path outside the package. Copy it to tests/fixtures. The conformance:check task added with the build tooling compares it with core at the pinned tag. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
scripts/fetch-core.sh fetches only the pinned NVIDIA/OpenShell ref. OPENSHELL_CORE_REF in mise.toml is the single pin. uv.lock starts from core's v0.1.7 lockfile, so the generator and runtime versions match core. proto:check and conformance:check catch drift from the pin, and build installs the wheel and sdist on the oldest supported Python. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
Output of mise run proto:gen. The files are byte-identical to openshell/_proto in the openshell 0.1.7 wheel on PyPI. .gitattributes marks them as generated. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
The aggregating ci job is the single required check, named like sdk-go's. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
proto:fetch exports openshell.proto and credential_driver.proto from core at OPENSHELL_CORE_REF, and buf adds their imports, the same way sdk-go reads the protos through a buf git input. The generator compiles whatever proto/ holds instead of keeping its own file list. grpcio-tools still generates the bindings, and they are unchanged. fetch-core.sh is now only for the vendored conformance fixtures. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
mise reads .python-version once idiomatic_version_file_enable_tools includes python, so the version lives in one file instead of mise.toml plus whatever uv picks. mise still pins uv and buf exactly. [tool.uv] required-version rejects uv older than 0.10 when uv is installed without mise. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
AGENTS.md, CONTRIBUTING.md and SECURITY.md describe this repository's tasks, conventions and reporting path. CODEOWNERS gives the SDK to the sdk team, with maintainers as fallback and infra for CI. Dependabot updates the uv lockfile weekly and actions daily, and CodeQL scans the Python sources, without the generated bindings. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
This was referenced Nov 8, 2026
The infra rule comes back after the move (#15), so CI changes needed for 0.1.8 don't wait on one time zone. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
pimlock
force-pushed
the
feat/8-release/pimlock
branch
from
November 9, 2026 00:15
0f3b4de to
8b4a2f3
Compare
The PR template asks for the summary, issue, changes, testing with mise run ci, and the DCO and Conventional Commits checklist. The bug and feature forms follow core's design-first forms, asking for SDK, Python and gateway versions and Python examples. Gateway, CLI and sandbox problems go to NVIDIA/OpenShell, and vulnerabilities to SECURITY.md. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
release.yml runs on pushes to main and stops unless the pin moved to a stable core tag. Then: - tag: scripts/release/tag-release.sh (from sdk-go's) tags vX.Y.Z at the merged commit and creates a draft GitHub release with the PR's description as notes. It skips what exists, a published release ends the run, and a push that adds the pin (the import) releases nothing. - build: mise run build at the tag's version, plus checksums, uploaded as an artifact. No tokens, no tool cache. - publish-pypi: trusted publishing from the pypi environment, the only job with id-token: write. - github-release: attach the files and checksums, then publish the draft. The tag job uses GITHUB_TOKEN instead of the bot App, so the release doesn't wait for #7; nothing triggers on tags. The build version now comes from OPENSHELL_SDK_VERSION when it is set, because the pretend version in mise.toml couldn't be overridden from the shell. CONTRIBUTING.md describes the release flow. Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
pimlock
force-pushed
the
feat/8-release/pimlock
branch
from
November 9, 2026 00:24
8b4a2f3 to
79eed08
Compare
pimlock
force-pushed
the
feat/standalone-build/pimlock
branch
from
November 9, 2026 15:33
d1b24ec to
f8d3b3f
Compare
Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds the release workflow. When a PR that moves the core pin to a stable tag merges into
main,release.ymltagsvX.Y.Z, publishesopenshellX.Y.Zto PyPI with trusted publishing, and publishes the GitHub release. This is what 0.1.8 needs. The trusted publisher on PyPI is set up (#9):ai-openshell/sdk-python,release.yml, environmentpypi.Stacked on #3 only, so it doesn't wait for #12 or #13.
Related Issue
Closes #8. Part of NVIDIA/OpenShell#5287, phase 6.
Changes
.github/workflows/release.ymlruns on every push tomain, and by hand onmainwith an optional commit SHA. Four jobs:contents: write,pull-requests: read):scripts/release/tag-release.shstops unless the pin changed to a stable core tag. Otherwise it tagsvX.Y.Zat the merged commit and creates a draft release, with the merged PR's description plus "Matches OpenShell core vX.Y.Z" as notes. It skips a tag or draft that exists, refuses a tag at another commit, and ends the run when the release is already published.mise run buildat versionX.Y.Z. That builds, verifies the wheel, and installs the wheel and sdist on Python 3.11. It then writesopenshell-checksums-sha256.txtand uploads everything as an artifact. The mise tool cache is off in this job.id-token: writeonly, environmentpypi): publishesdist/withpypa/gh-action-pypi-publish, which also uploads attestations.contents: write): attaches the wheel, sdist and checksums to the draft, then publishes it. Publishing comes last, so the release never shows without its files.scripts/release/tag-release.shis sdk-go'stag-release.sh, adapted: it reads the pin frommise.toml, creates a draft, printstag=vX.Y.Zfor the later jobs, and drops the Go module proxy step.mise.tomlsetSETUPTOOLS_SCM_PRETEND_VERSION_FOR_OPENSHELL = "0.0.0"in[env], and mise's[env]wins over the shell, somise run buildalways produced0.0.0. It now readsOPENSHELL_SDK_VERSION, with0.0.0as the default.CONTRIBUTING.mddescribes the release flow, re-runs and manual releases. An infra review forscripts/release/comes back with ci: require an infra review for CI and release scripts again #15.Differences from #8's design:
GITHUB_TOKEN, not thesdk-botApp. Nothing triggers on tags, and no ruleset covers tags, so it doesn't need the App and the release doesn't wait for ci: GitHub App and sdk-bot environment for the automation #7.report-failure.shcomes with ci(core): propose core release bumps and track drift on core main #13, so failures show only in the run for now.Before merging
pypienvironment (ci: pypi and testpypi environments #10), limited tomain. If it doesn't exist when the workflow first runs, GitHub creates it without protection, and PyPI trusts any job in that environment. This needs a repository admin.v0.1.8, so core doesn't publish0.1.8first.How 0.1.8 goes out
v0.1.8and publishes its images.mise run core:bump -- v0.1.8locally (ci(core): propose core release bumps and track drift on core main #13), or update the pin by hand. CI and E2E run on the PR.release.yml, which tagsv0.1.8, publishesopenshell0.1.8to PyPI and publishes the GitHub release.Testing
tag-release.sh --dry-run:--forceon a stable pin, it would create the tag and a draft with the PR's description;mise.toml(feat: build, test, and package the Python SDK standalone #3 landing onmain), it does nothing.OPENSHELL_SDK_VERSION=0.1.8 mise run buildbuilds, verifies and installsopenshell-0.1.8. Without it, the version stays0.0.0.mise run ci, shellcheck, actionlint and zizmor (online, auditor persona) pass.