102 Commits
Author SHA1 Message Date
Drew Newberry cf7aecce4a feat(package): add Debian packaging support 2026-05-01 01:41:50 -07:00
jtoelke2 dd98eb25ef ci: drop duplicate shadow e2e workflow (#1104)
Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>
2026-04-30 22:31:03 -05:00
Drew Newberry 51351e4745 chore(ci): update checkout action to v6 (#1086)
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
2026-04-30 13:22:47 -07:00
jtoelke2 5c77b06124 ci: add OS-49 phase 5 shadow workflows (#1075)
Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>
2026-04-30 12:18:08 -05:00
jtoelke2 78f0b6fff7 ci(rust): keep sccache stats non-blocking 2026-04-29 21:20:43 -05:00
jtoelke2 a656ed7b91 ci(docker): use prebuilt Rust binaries by default (#1027)
* ci(docker): use prebuilt Rust binaries by default

Flip Docker image builds to consume staged native Rust artifacts, remove in-Docker Rust build stages, and publish per-arch images with a manifest merge.

Add local staging support for prebuilt gateway and sandbox binaries so development image builds continue to work without CI artifacts.

Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>

* ci(docker): address prebuilt build review feedback

* ci(rust): allow existing vfio complexity

* ci(rust): pin toolchain to 1.95

---------

Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>
2026-04-29 19:23:02 -05:00
jtoelke2 3e69c36f84 feat(ci): add shadow-rust-native-build workflow for OS-49 Phase 4 (PR 4a) (#973)
Builds openshell-gateway and openshell-sandbox natively per-arch on the
nv-gha-runners shared CPU pool with a GHA-backed sccache, and uploads
the resulting binaries as artifacts shaped for Dockerfile.images'
BINARY_SOURCE=prebuilt path (added in #945).

Dispatch manually 4-5 times after merge to collect cold + warm numbers
and compare against the Rust portion of docker-build.yml's ARC baseline.
PR 4c will wire these artifacts into the real pipeline once numbers land.

Refs OS-128.

Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>
2026-04-28 15:32:55 -05:00
Piotr Mlocek c49ae09d5b fix(ci): grant actions:read and contents:read to E2E label helper (#995) 2026-04-28 10:16:27 -07:00
Piotr Mlocek b264cb83d8 chore(mise): add lockfile with multi-platform support and version pin (#946) 2026-04-27 16:07:15 -07:00
John T. Myers c890f0ee9e chore(ci): relax agent diagnostic gate (#1001)
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
2026-04-27 15:56:58 -07:00
Piotr Mlocek c4286648bb ci(e2e): replace label dispatcher with comment-only helper (#990) 2026-04-27 11:11:52 -07:00
Piotr Mlocek e703b597cd ci(e2e): add label dispatcher and contributor CI docs (#975) 2026-04-27 09:49:01 -07:00
jtoelke2 55b0266ed5 fix(ci): make buildkitd-config opt-in for setup-buildx (#970)
#966 hard-coded `buildkitd-config: /etc/buildkit/buildkitd.toml` inside
the `driver: local` branch of the setup-buildx composite action. The only
caller using that driver is shadow-docker-build.yml, which runs inside
the ghcr.io/nvidia/openshell/ci:latest container — so the host-side
buildkitd.toml was invisible to docker/setup-buildx-action and every
matrix job failed at "Set up buildx".

Revert the hard-coded path and expose it as an opt-in input on the
action (empty default, passed through to both the remote and local
branches). Wire shadow-docker-build.yml to bind-mount /etc/buildkit
into the ci container and pass the path explicitly, so the action can
read the file from inside the container. Remote-driver callers are
unaffected (empty input is a no-op).

Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>
2026-04-24 16:35:14 -05:00
jtoelke2 d331ed5117 feat(ci): add shadow-docker-build workflow for OS-49 Phase 3 (#964)
Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>
2026-04-24 12:33:25 -07:00
Piotr Mlocek df38d1f66f feat(ci): add Markdown and Mermaid linting (#933) 2026-04-24 11:27:02 -07:00
jtoelke2 77a88c313b fix(ci): partition GHA sccache cache per arch in shadow spike (#961)
Without a per-arch SCCACHE_GHA_VERSION, both matrix jobs
(linux-amd64-cpu8 and linux-arm64-cpu8) target the same GHA cache
key. Run 1 on 2026-04-24 showed this concretely: arm64 started
first and landed 575/1064 cache writes; amd64 started ~1 min later
and every one of its 1062 writes failed, leaving the cache with no
amd64 entries at all.

Partitioning by matrix.runner ensures each arch gets its own
cache namespace, letting us see real warm-cache behavior on the
subsequent Run 2-4 dispatches.

Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>
2026-04-24 11:39:09 -05:00
jtoelke2 ef2d993896 fix(ci): expose GHA sccache env in shadow-shared-cpu-spike (#950)
Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>
2026-04-23 22:58:21 -05:00
jtoelke2 0a09404c1d feat(ci): add shadow-shared-cpu-spike workflow for OS-49 Phase 2 (#934)
Signed-off-by: Jonas Toelke <jtoelke@nvidia.com>
2026-04-23 16:51:47 -05:00
Piotr Mlocek ab3f3e033d fix(ci): post E2E Gate check to the PR when workflow_run fires (#938) 2026-04-23 13:02:56 -07:00
Piotr Mlocek 9bc2e2cc31 fix(ci): rename mise --no-prepare to --no-deps (#942)
mise 2026.4.18 (bumped in #929) renamed the `--no-prepare` flag to
`--no-deps`. Update workflow invocations to match.
2026-04-23 11:26:24 -07:00
Piotr Mlocek 89dd10bd4e fix(ci): e2e gate must verify work actually ran, not just top-level success (#926) 2026-04-23 08:28:27 -07:00
Piotr Mlocek 30ddca42d3 ci(e2e): enable E2E to run on external forks throught the copy-pr-bot flow (#922) 2026-04-22 14:15:10 -07:00
Drew Newberry e4d6f92d9b feat(vm): add standalone libkrun compute driver (#858) 2026-04-17 08:50:57 -07:00
Drew Newberry 5718553b97 feat(release): publish standalone openshell-gateway binaries (#853) 2026-04-16 16:58:24 -07:00
Piotr Mlocek fdca543b57 ci: parallelize wheel builds in CI (#820) 2026-04-13 17:20:53 -07:00
John T. Myers dafb7996af fix(docker): add openshell-prover to Dockerfile skeleton stages and provide z3 (#800) 2026-04-10 17:25:23 -07:00
Piotr Mlocek 8b15ef772e docs(fern): move published docs into docs tree (#796)
Remove the legacy Sphinx pipeline and make docs/ the single source of truth so the published site matches the repository layout.
2026-04-09 15:02:27 -07:00
Drew Newberry 0958129388 feat(ci): add release-vm-dev pipeline and install-vm.sh installer (#788) 2026-04-09 09:01:36 -07:00
Piotr Mlocek f92923e06b docs(fern): finalize preview workflow and nav cleanup (#784) 2026-04-09 07:43:34 -07:00
Drew Newberry ddb85b1704 feat(vm): add openshell-vm crate with libkrun microVM gateway (#611) 2026-04-08 22:00:01 -07:00
Piotr Mlocek c2e5256725 ci(gpu): add separate GPU test workflows (#773)
- add a dedicated `test-gpu.yml` workflow for validating the new shared NVIDIA GPU runner infrastructure
- keep the existing branch E2E and branch checks workflows unchanged for now
- add the repository-side `copy-pr-bot` configuration required for workflows that run on NVIDIA hosted workers
2026-04-08 10:01:44 -07:00
Drew Newberry e837849009 feat(bootstrap): resume gateway from existing state and persist SSH handshake secret (#488) 2026-04-02 09:50:10 -07:00
John T. Myers a69ef06034 fix(ci): skip docs preview deploy for fork PRs (#679)
Fork PRs receive a read-only GITHUB_TOKEN that cannot push to gh-pages,
causing the deploy step to fail with a 403. Skip the deploy for fork PRs
while still running the docs build to validate changes compile cleanly.
2026-03-30 09:43:42 -07:00
Minh Dang Quang 71d78c20b0 fix(ci): heading-level mismatch in agent dianostic regex (#604)
Signed-off-by: minhdqdev <minhdq.dev@gmail.com>
2026-03-25 07:36:01 -07:00
Drew Newberry 0dd3dbc768 ci(release): restrict auto-tag to weekdays only (#507) 2026-03-20 16:44:02 -07:00
John T. Myers a831a8921b feat(settings): gateway-to-sandbox runtime settings channel (#474)
* feat(gateway/sandbox): add global and sandbox runtime settings flow
2026-03-20 14:08:57 -07:00
Drew Newberry a912848217 refactor(build): unify image build graph for cache reuse (#390) 2026-03-18 15:01:04 -07:00
Drew Newberry e45d415230 chore(repo): migrate github label taxonomy (#454) 2026-03-18 14:01:48 -07:00
Drew Newberry 1a706f33cf fix(ci): simplify dev release install instructions to use install.sh (#453) 2026-03-18 13:53:03 -07:00
John T. MyersandJohn Myers 3566e556f4 fix(ci): use env context instead of secrets in step-level if condition (#452)
The secrets context is not available in step-level if expressions in
GitHub Actions — only in with and env blocks. This caused the workflow
file to be invalid, failing every run with:

  Unrecognized named-value: 'secrets'

Fix by exporting the secret to a job-level env var and checking that
in the step condition instead.

Co-authored-by: John Myers <johntmyers@users.noreply.github.com>
2026-03-18 10:20:27 -07:00
John T. MyersandJohn Myers e26732bfae fix(ci): split vouch gate into two steps with separate tokens (#446)
The ORG_READ_TOKEN (read:org PAT) was being used for all API calls,
including closing PRs and posting comments, which it lacks permissions
for. Split into two steps:

1. Org membership check — uses ORG_READ_TOKEN exclusively
2. VOUCHED.td check + close — uses default GITHUB_TOKEN (has repo write)

Step 2 is skipped entirely if step 1 confirms org membership.

Co-authored-by: John Myers <johntmyers@users.noreply.github.com>
2026-03-18 09:29:23 -07:00
John T. MyersandJohn Myers 82cb8d2bed fix(ci): use ORG_READ_TOKEN for org membership check in vouch gate (#445)
The GITHUB_TOKEN cannot determine org membership — it lacks read:org
scope and this is not configurable via the permissions block. Both
author_association and orgs.checkMembershipForUser return NONE/404 for
org members (even public ones) when called with the repo-scoped token.

Use an ORG_READ_TOKEN secret (fine-grained PAT with read:org) when
available, falling back to GITHUB_TOKEN. Also restores the
checkCollaborator fallback since the PAT can resolve that too.

Setup required: create a fine-grained PAT with Organization > Members >
Read permission, then add it as a repo secret named ORG_READ_TOKEN.

Co-authored-by: John Myers <johntmyers@users.noreply.github.com>
2026-03-18 09:24:19 -07:00
Piotr Mlocek 73e19134b0 fix(ci): pass wheel filenames as job output instead of re-downloading (#418)
The trigger-wheel-publish job was downloading the wheel artifact onto a
persistent self-hosted runner just to glob the filenames. Since
download-artifact does not clean the destination directory, stale .whl
files from every previous run accumulated in release/ and were all sent
to GitLab as WHEEL_FILENAMES.

Confirmed on the runner: /home/ubuntu/actions-runner/_work/OpenShell/
OpenShell/release/ contained 120+ wheels spanning versions 0.0.5
through 0.0.10.

Fix: capture wheel filenames as a job output in build-python-wheels and
pass them directly to trigger-wheel-publish. The trigger job no longer
downloads the artifact at all — it only needs the filenames to construct
GitHub release asset URLs for GitLab/Kitmaker.
2026-03-18 09:20:18 -07:00
John T. MyersandJohn Myers 85a3d83d75 fix(ci): fetch author_association via REST API instead of webhook payload (#444)
The webhook payload field context.payload.pull_request.author_association
is unreliable under pull_request_target events — it was absent or not
populated, causing the previous fix (#442) to still fail.

Switch to fetching author_association via pulls.get REST API, which only
needs pull-requests permission (already granted) and reliably returns
MEMBER for org members regardless of membership visibility.

Also removes the redundant orgs.checkMembershipForUser and
repos.checkCollaborator fallbacks, which suffered from the same
GITHUB_TOKEN permission limitation that started this bug.

Co-authored-by: John Myers <johntmyers@users.noreply.github.com>
2026-03-18 09:12:56 -07:00
John T. MyersandJohn Myers 240d0ee3ed fix(ci): check author_association before API calls in vouch gate (#442)
The vouch-check workflow was closing PRs from NVIDIA org members because
the GITHUB_TOKEN lacks read:org scope, causing orgs.checkMembershipForUser
to return 404 for non-public members. The catch block silently swallowed
these as expected 'not found' responses.

Add an author_association check from the webhook payload as the primary
bypass. GitHub sets this field server-side (MEMBER, OWNER, COLLABORATOR)
regardless of membership visibility, with no extra token permissions
needed. The existing API calls are kept as fallbacks.

Fixes the false positive that closed #430.

Co-authored-by: John Myers <johntmyers@users.noreply.github.com>
2026-03-18 08:53:10 -07:00
Drew Newberry dcd991275c fix(ci): use published install script in release workflows (#416) 2026-03-17 21:09:26 -07:00
Drew Newberry 925160e848 refactor: simplify install.sh to print PATH guidance (#403) 2026-03-17 12:22:25 -07:00
Drew Newberry 5439f478ac fix(ci): skip auto-tag when no new commits since latest tag (#399) 2026-03-17 09:28:55 -07:00
Drew Newberry bb4545ff15 fix(ci): skip remote sccache config for fork PRs (#388) 2026-03-16 19:04:34 -07:00
Drew Newberry 48cb68914f ci(release): enable scheduled nightly release auto-tag (#384) 2026-03-16 17:44:58 -07:00