Skip to content

Commit 8b77925

Browse files
drewpimlock
andauthored
feat(installer): support prerelease installations (#3364)
* feat(installer): support prerelease installations Signed-off-by: Drew Newberry <anewberry@nvidia.com> * docs(readme): clarify 0.1.0 production readiness Signed-off-by: Drew Newberry <anewberry@nvidia.com> * docs(readme): refine production readiness message Signed-off-by: Drew Newberry <anewberry@nvidia.com> * fix(release): publish rolling prerelease channels Signed-off-by: Drew Newberry <anewberry@nvidia.com> * fix(release): keep prereleases out of GitHub releases Signed-off-by: Drew Newberry <anewberry@nvidia.com> * docs(readme): refine 0.1.0 notice Signed-off-by: Drew Newberry <anewberry@nvidia.com> * docs(readme): expand 0.1.0 notice Signed-off-by: Drew Newberry <anewberry@nvidia.com> * docs(readme): simplify 0.1.0 notice Signed-off-by: Drew Newberry <anewberry@nvidia.com> * refactor(installer): simplify prerelease alias Signed-off-by: Drew Newberry <anewberry@nvidia.com> * fix(installer): require successful prerelease runs Signed-off-by: Drew Newberry <anewberry@nvidia.com> * refactor(release): reuse exact prerelease artifacts Signed-off-by: Drew Newberry <anewberry@nvidia.com> * fix(installer): include prover in prerelease bundle Signed-off-by: Drew Newberry <anewberry@nvidia.com> * ci: remove prerelease post-publish validation Signed-off-by: Drew Newberry <anewberry@nvidia.com> * docs(fern): sync announcement configuration Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com> * docs: remove stale prerelease canary claim Signed-off-by: Drew Newberry <anewberry@nvidia.com> * docs(fern): defer announcement synchronization Signed-off-by: Drew Newberry <anewberry@nvidia.com> * docs(fern): simplify release announcement Signed-off-by: Drew Newberry <anewberry@nvidia.com> --------- Signed-off-by: Drew Newberry <anewberry@nvidia.com> Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com> Co-authored-by: Piotr Mlocek <pmlocek@nvidia.com>
1 parent 1d010f4 commit 8b77925

9 files changed

Lines changed: 458 additions & 32 deletions

File tree

‎.github/workflows/release-tag.yml‎

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,6 @@ jobs:
407407
cat openshell-supervisor-checksums-sha256.txt
408408
409409
- name: Generate Homebrew formula
410-
if: needs.compute-versions.outputs.is_prerelease != 'true'
411410
run: |
412411
set -euo pipefail
413412
python3 tasks/scripts/release.py generate-homebrew-formula \
@@ -493,12 +492,64 @@ jobs:
493492
release/openshell-supervisor-checksums-sha256.txt
494493
release/openshell-prover-checksums-sha256.txt
495494
496-
- name: Upload pre-release artifacts
495+
- name: Upload amd64 Debian prerelease package
497496
if: needs.compute-versions.outputs.is_prerelease == 'true'
498497
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
499498
with:
500-
name: openshell-${{ env.RELEASE_TAG }}
501-
path: release/
499+
name: openshell-${{ env.RELEASE_TAG }}-linux-amd64-deb
500+
path: |
501+
release/openshell_*_amd64.deb
502+
release/openshell-checksums-sha256.txt
503+
retention-days: 90
504+
if-no-files-found: error
505+
506+
- name: Upload arm64 Debian prerelease package
507+
if: needs.compute-versions.outputs.is_prerelease == 'true'
508+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
509+
with:
510+
name: openshell-${{ env.RELEASE_TAG }}-linux-arm64-deb
511+
path: |
512+
release/openshell_*_arm64.deb
513+
release/openshell-checksums-sha256.txt
514+
retention-days: 90
515+
if-no-files-found: error
516+
517+
- name: Upload x86_64 RPM prerelease packages
518+
if: needs.compute-versions.outputs.is_prerelease == 'true'
519+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
520+
with:
521+
name: openshell-${{ env.RELEASE_TAG }}-linux-x86_64-rpm
522+
path: |
523+
release/openshell-*.x86_64.rpm
524+
release/openshell-checksums-sha256.txt
525+
retention-days: 90
526+
if-no-files-found: error
527+
528+
- name: Upload aarch64 RPM prerelease packages
529+
if: needs.compute-versions.outputs.is_prerelease == 'true'
530+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
531+
with:
532+
name: openshell-${{ env.RELEASE_TAG }}-linux-aarch64-rpm
533+
path: |
534+
release/openshell-*.aarch64.rpm
535+
release/openshell-checksums-sha256.txt
536+
retention-days: 90
537+
if-no-files-found: error
538+
539+
- name: Upload macOS prerelease packages
540+
if: needs.compute-versions.outputs.is_prerelease == 'true'
541+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
542+
with:
543+
name: openshell-${{ env.RELEASE_TAG }}-macos-arm64
544+
path: |
545+
release/openshell-aarch64-apple-darwin.tar.gz
546+
release/openshell-gateway-aarch64-apple-darwin.tar.gz
547+
release/openshell-driver-vm-aarch64-apple-darwin.tar.gz
548+
release/openshell-prover-aarch64-apple-darwin.tar.gz
549+
release/openshell.rb
550+
release/openshell-checksums-sha256.txt
551+
release/openshell-gateway-checksums-sha256.txt
552+
release/openshell-prover-checksums-sha256.txt
502553
retention-days: 90
503554
if-no-files-found: error
504555

‎README.md‎

Lines changed: 81 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
[![Documentation](https://img.shields.io/badge/docs-latest-brightgreen)](https://docs.nvidia.com/openshell/latest/index.html)
1515
[![Project Status](https://img.shields.io/badge/status-alpha-orange)](https://docs.nvidia.com/openshell/latest/about/release-notes.html)
1616

17+
> [!IMPORTANT]
18+
> **OpenShell 0.1.0 is coming soon.** [Track progress in the 0.1.0 milestone](https://github.com/NVIDIA/OpenShell/milestone/10), [read the prerelease documentation](https://docs.nvidia.com/openshell/dev/index.html), or [install a prerelease](#prerelease-and-development-builds).
19+
1720
OpenShell is the safe, private runtime for autonomous AI agents. It provides sandboxed execution environments that protect your data, credentials, and infrastructure — governed by declarative YAML policies that prevent unauthorized file access, data exfiltration, and uncontrolled network activity.
1821

1922
OpenShell is built agent-first. It ships public agent skills for using and operating OpenShell, plus separate repository-aware workflows for contributors and maintainers.
@@ -27,21 +30,15 @@ OpenShell is built agent-first. It ships public agent skills for using and opera
2730

2831
### Install
2932

30-
**Binary (recommended):**
33+
**Local installation:**
3134

3235
```bash
3336
curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | sh
3437
```
3538

36-
The installer installs the latest stable release by default. To install a specific version, set `OPENSHELL_VERSION`. A [`dev` release](https://github.com/NVIDIA/OpenShell/releases/tag/dev) is also available that tracks the latest commit on `main`.
37-
38-
The `openshell` package on PyPI provides the Python SDK only. It does not install the `openshell` CLI. Add the SDK to a Python project with [uv](https://docs.astral.sh/uv/):
39-
40-
```bash
41-
uv add openshell
42-
```
39+
The installer installs the latest stable release by default. See [Prerelease and development builds](#prerelease-and-development-builds) to install an upcoming release or the latest commit on `main`.
4340

44-
**Helm chart:**
41+
**Kubernetes installation:**
4542

4643
> **Experimental** — the Kubernetes deployment path is under active development. Expect rough edges and breaking changes.
4744
@@ -104,6 +101,44 @@ See the [full walkthrough](examples/sandbox-policy-quickstart/) or run the autom
104101
bash examples/sandbox-policy-quickstart/demo.sh
105102
```
106103

104+
## SDKs
105+
106+
OpenShell provides client SDKs for Python, TypeScript, Go, and Rust. SDK packages connect applications to an OpenShell gateway; they do not install the `openshell` CLI. Use the SDK and gateway from the same OpenShell release when possible.
107+
108+
### Python
109+
110+
The [Python SDK](python/openshell/) is published to [PyPI](https://pypi.org/project/openshell/):
111+
112+
```shell
113+
uv add openshell
114+
```
115+
116+
### TypeScript
117+
118+
The [TypeScript SDK](sdk/typescript/README.md) is published to GitHub Packages as `@nvidia/openshell-sdk`. Configure the `@nvidia` npm scope for `https://npm.pkg.github.com`, authenticate with a token that has `read:packages`, and install it:
119+
120+
```shell
121+
npm install @nvidia/openshell-sdk
122+
```
123+
124+
### Go
125+
126+
Add the [Go SDK](sdk/go/README.md) to a Go module:
127+
128+
```shell
129+
go get github.com/NVIDIA/OpenShell/sdk/go@latest
130+
```
131+
132+
### Rust
133+
134+
The [Rust SDK](crates/openshell-sdk/README.md) is currently consumed from source. Pin the Git dependency to the same OpenShell release as the gateway:
135+
136+
```shell
137+
cargo add openshell-sdk \
138+
--git https://github.com/NVIDIA/OpenShell \
139+
--tag <release-tag>
140+
```
141+
107142
## How It Works
108143

109144
OpenShell isolates each sandbox in its own container with policy-enforced egress routing. A lightweight gateway coordinates sandbox lifecycle, and every outbound connection is intercepted by the policy engine, which does one of three things:
@@ -257,6 +292,43 @@ Agent implementation is human-directed: a user may request a phase directly, or
257292
- [Brev Launchable](https://brev.nvidia.com/launchable/deploy/now?launchableID=env-3Ap3tL55zq4a8kew1AuW0FpSLsg) — try OpenShell on cloud compute without local setup
258293
- [Agent Instructions](AGENTS.md) — system prompt and workflow documentation for agent contributors
259294

295+
## Prerelease and development builds
296+
297+
Use a prerelease candidate to evaluate an upcoming release, or use the rolling development build to test the latest commit on `main`. These builds may change before the next stable release. The matching documentation is published in the [development channel](https://docs.nvidia.com/openshell/dev/index.html).
298+
299+
Prerelease packages are retained as GitHub Actions artifacts for 90 days and require an authenticated [GitHub CLI](https://cli.github.com/) session. The `pre` alias installs the latest prerelease:
300+
301+
```shell
302+
gh auth login
303+
curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | \
304+
OPENSHELL_VERSION=pre sh
305+
```
306+
307+
The installer downloads only the artifact for the current platform and rejects expired candidates during discovery. Installed packages retain the candidate's exact version, such as `0.1.0-pre.3`. Prerelease tags do not create entries on the GitHub Releases page.
308+
309+
The rolling [`dev` release](https://github.com/NVIDIA/OpenShell/releases/tag/dev) does not require GitHub authentication:
310+
311+
```shell
312+
curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | \
313+
OPENSHELL_VERSION=dev sh
314+
```
315+
316+
For Kubernetes, select the corresponding Helm chart version. Helm chart versions omit the leading `v` from release tags:
317+
318+
```shell
319+
# Pin an exact candidate
320+
helm upgrade --install openshell \
321+
oci://ghcr.io/nvidia/openshell/helm-chart \
322+
--version 0.1.0-pre.3
323+
324+
# Rolling development build
325+
helm upgrade --install openshell \
326+
oci://ghcr.io/nvidia/openshell/helm-chart \
327+
--version 0.0.0-dev
328+
```
329+
330+
Prerelease charts use exact `<version>-pre.N` versions. Development charts are also published as immutable `0.0.0-dev.<commit-sha>` versions when you need to pin a specific commit. See the [Helm chart documentation](deploy/helm/openshell/README.md#available-versions) for version and configuration details.
331+
260332
## Contributing
261333

262334
OpenShell is built agent-first. Issues should include a user story, problem statement, impact, and acceptance criteria. The impact should explain the consequences of the current behavior and why existing workarounds are insufficient. Feature requests also require a workflow-level proposed design and alternatives; bug reports add reproduction steps, environment details, and relevant logs. Once work is authorized through the project workflow or a direct request, contributors should use the skills in `.agents/skills/` to investigate the current code and behavior, implement the change, and verify it. If an issue contains earlier diagnostics, verify them rather than relying on them. See [CONTRIBUTING.md](CONTRIBUTING.md) for the full agent skills table, contribution workflow, and development setup.

‎deploy/helm/openshell/README.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,11 @@ On OpenShift 4.22+, end-to-end TLS is supported via `BackendTLSPolicy`. See the
6363
| Tag | Source | Notes |
6464
| --- | --- | --- |
6565
| `<semver>` (e.g. `0.6.0`) | Tagged GitHub release | Tracks the matching gateway, sandbox, and supervisor image versions. Recommended for production. |
66+
| `<semver>-pre.N` (e.g. `0.1.0-pre.3`) | A specific prerelease candidate | Immutable candidate pin that tracks images with the same exact version. |
6667
| `0.0.0-dev` | Latest commit on `main` | Floating tag, overwritten on every push. `appVersion` is `dev`, so images resolve to the `:dev` tag. |
6768
| `0.0.0-dev.<commit-sha>` | A specific commit on `main` | Per-commit pin. Chart version and `appVersion` both use the full 40-character commit SHA, which matches the image tag pushed by CI. |
6869

69-
The `dev` tags are intended for testing changes ahead of a release. Production deployments should pin to a tagged release.
70+
Prerelease and `dev` tags are intended for testing changes ahead of a release. Production deployments should pin to a stable tagged release.
7071

7172
## Configuration
7273

‎deploy/helm/openshell/README.md.gotmpl‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,11 @@ On OpenShift 4.22+, end-to-end TLS is supported via `BackendTLSPolicy`. See the
6363
| Tag | Source | Notes |
6464
| --- | --- | --- |
6565
| `<semver>` (e.g. `0.6.0`) | Tagged GitHub release | Tracks the matching gateway, sandbox, and supervisor image versions. Recommended for production. |
66+
| `<semver>-pre.N` (e.g. `0.1.0-pre.3`) | A specific prerelease candidate | Immutable candidate pin that tracks images with the same exact version. |
6667
| `0.0.0-dev` | Latest commit on `main` | Floating tag, overwritten on every push. `appVersion` is `dev`, so images resolve to the `:dev` tag. |
6768
| `0.0.0-dev.<commit-sha>` | A specific commit on `main` | Per-commit pin. Chart version and `appVersion` both use the full 40-character commit SHA, which matches the image tag pushed by CI. |
6869

69-
The `dev` tags are intended for testing changes ahead of a release. Production deployments should pin to a tagged release.
70+
Prerelease and `dev` tags are intended for testing changes ahead of a release. Production deployments should pin to a stable tagged release.
7071

7172
## Configuration
7273

‎docs/about/installation.mdx‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@ The script detects your operating system and installs the OpenShell CLI, standal
2020

2121
You can also download release artifacts directly from the [OpenShell GitHub Releases](https://github.com/NVIDIA/OpenShell/releases) page.
2222

23+
### Install a prerelease
24+
25+
Prerelease packages are retained as GitHub Actions artifacts for 90 days and require an authenticated [GitHub CLI](https://cli.github.com/) session. The `pre` alias installs the latest prerelease:
26+
27+
```shell
28+
gh auth login
29+
curl -LsSf https://raw.githubusercontent.com/NVIDIA/OpenShell/main/install.sh | \
30+
OPENSHELL_VERSION=pre sh
31+
```
32+
33+
The installer rejects expired candidates, downloads only the artifact required for your platform, and installs with Debian, RPM, or Homebrew. Installed packages retain the candidate's exact version, such as `0.1.0-pre.3`. Prerelease tags do not create entries on the GitHub Releases page.
34+
2335
The `openshell` package on PyPI provides the Python SDK only. It does not install the `openshell` CLI. Add the SDK to a Python project with:
2436

2537
```shell

‎fern/docs.yml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ versions:
5959
- display-name: Latest
6060
path: ../docs/index.yml
6161
slug: latest
62+
announcement:
63+
message: '<span style="display: block; padding: 0.375rem 0; text-align: left;"><strong>OpenShell 0.1.0 is coming soon.</strong> <a href="https://github.com/NVIDIA/OpenShell/milestone/10" target="_blank" rel="noreferrer">Track progress in the 0.1.0 milestone</a>, <a href="https://docs.nvidia.com/openshell/dev/index.html" target="_blank" rel="noreferrer">read the prerelease documentation</a>, or <a href="https://docs.nvidia.com/openshell/dev/about/installation#install-a-prerelease" target="_blank" rel="noreferrer">install a prerelease</a>.</span>'
6264

6365
redirects:
6466
- source: "/openshell/latest/sandboxes/providers-v2"

0 commit comments

Comments
 (0)