Repository navigation
chore(windows): sync main and restore native compatibility - #5289
shailendra-nv wants to merge 220 commits into
Conversation
* ci: use lifecycle:frozen as the sole stale issue exemption Signed-off-by: Evan Lezar <elezar@nvidia.com> * ci: support state:frozen as a stale issue exemption Signed-off-by: Evan Lezar <elezar@nvidia.com> --------- Signed-off-by: Evan Lezar <elezar@nvidia.com>
* Add triage duty tooling Signed-off-by: Evan Lezar <elezar@nvidia.com> * docs(triage): surface dependabot prs early Signed-off-by: Evan Lezar <elezar@nvidia.com> * docs(triage): keep local state untracked Signed-off-by: Evan Lezar <elezar@nvidia.com> * docs(triage): clarify queue continuation order Signed-off-by: Evan Lezar <elezar@nvidia.com> * docs(triage): remove playbook whitespace Signed-off-by: Evan Lezar <elezar@nvidia.com> * docs(triage): address duty tooling review feedback Signed-off-by: Jim Meyer <jimeyer@nvidia.com> * docs(triage): minimize changes to original duty skills Signed-off-by: Jim Meyer <jimeyer@nvidia.com> --------- Signed-off-by: Evan Lezar <elezar@nvidia.com> Signed-off-by: Jim Meyer <jimeyer@nvidia.com> Co-authored-by: Jim Meyer <jimeyer@nvidia.com>
The seccomp notification probes install their listener on a launcher thread and receive it over a channel. When the install fails, the launcher drops the sender and exits, so the broker only sees a closed channel and returns a generic "launcher disappeared" error. The thread is never joined, so the kernel's errno is discarded. That collapses several distinct failures into one opaque string: a notification struct size mismatch, a failed PR_SET_NO_NEW_PRIVS, and any non-EINVAL SECCOMP_SET_MODE_FILTER rejection all look identical to a pre-5.19 kernel refusing WAIT_KILLABLE_RECV, which the install path already retries without the flag. Join the launcher on the recv() failure path and propagate its error unchanged, so both the ErrorKind and raw_os_error survive to the qualification report. Apply this to all three probes. Signed-off-by: Russell Bryant <rbryant@redhat.com> Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
* fix(supervisor): use jsonl files for independent OCSF retention Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> * test(supervisor): trim and separate log retention regressions Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> * refactor(supervisor): drop legacy OCSF log migration Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> * docs(observability): remove legacy OCSF filename guidance Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> * docs(ocsf): remove stale supervisor log filename comments Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> * docs(supervisor): clarify denial reader log source Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> * docs(supervisor): retain OCSF JSON opt-in explanation Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> --------- Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
Signed-off-by: Yuedong Wu <dwcn22@outlook.com>
…#4521) Add two scenarios to the shared oci-image feature suite: - An image without USER, with no policy identity, runs as the numeric default 1000:1000 without the supplementary groups of the image's UID 1000 account. - A policy run_as_user and run_as_group replace an image's USER root. Both check the main process, sandbox exec, and the workload container user. Factor policy temp files into a small helper. Closes #4431. Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
…rkspace checks (#4527) In operator workspace mode the namespace label watcher fills the allowlist in the background after the driver starts. Workspace checks that ran before its first full listing rejected labeled namespaces with PermissionDenied, so provider refreshes due at gateway startup were parked as configuration errors for an hour. Track whether the allowlist has received an authoritative listing. Operator workspace checks now wait up to 10 seconds for it and return Unavailable if it is still missing, which callers such as the provider refresh worker retry shortly. An unreadable namespace file still yields a listed, empty allowlist that fails closed. Closes #4526 Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
The core, server, and sandbox-backend build scripts always used the vendored protoc binary and ignored PROTOC, so a distro build could not use its system compiler. When PROTOC is set, use it and let prost resolve the includes (PROTOC_INCLUDE still applies); otherwise behave exactly as before. Contributes to #3510. Signed-off-by: politerealism <burdcat17@gmail.com>
rcgen 0.13.2 declares its optional x509-parser dependency with the verify feature, which pulls in ring. The workspace enabled rcgen's x509-parser feature for every crate, so the CLI and gateway linked ring alongside aws-lc even though nothing in them verifies signatures with x509-parser. Only SandboxCa::from_pem in openshell-supervisor-network needs CertificateParams::from_ca_cert_pem. Enable the feature there alone. ring no longer appears in the dependency trees of openshell, openshell-gateway or openshell-prover; it remains in openshell-supervisor until rcgen is upgraded. Release builds compile one package at a time, so the feature does not leak into the other binaries. Signed-off-by: politerealism <burdcat17@gmail.com>
Bumps [github/codeql-action/upload-sarif](https://github.com/github/codeql-action) from 4.37.7 to 4.38.3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@ff2f1c6...24c5418) --- updated-dependencies: - dependency-name: github/codeql-action/upload-sarif dependency-version: 4.38.3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…K module (#4439) * fix(python): let proto stub generation skip .pyi for older protoc Add a --no-pyi option to generate_python_proto.py for toolchains whose protoc predates --pyi_out, such as Fedora's grpcio-tools 1.48, and list python3-googleapis-common-protos and python3-httpx in the spec's Recommends and dist-info Requires-Dist, which the SDK needs to import. Default behavior is unchanged. Contributes to #3510. Signed-off-by: politerealism <burdcat17@gmail.com> * fix(rpm): install every SDK module and record the license accounting The python3-openshell %install copied only __init__.py, sandbox.py and _proto/, but the package imports .errors, .mutations and .providers and ships a py.typed marker, so an installed RPM could not import openshell. Install the missing files and add a %check that fails if any relative import in the installed package has no matching installed module. Importing the package needs grpcio, which the build environment lacks, so the check is static. Set License to the minimal SPDX expression covering every crate linked into the shipped binaries, keep the pure-Python subpackage at Apache-2.0, and note how the non-crate content is covered. Signed-off-by: politerealism <burdcat17@gmail.com> --------- Signed-off-by: politerealism <burdcat17@gmail.com>
The gateway only persisted its OCSF events to the JSONL file, so collectors had to tail that file. Adding `[openshell.gateway.otlp.ocsf]` now also exports each gateway OCSF event as an OTLP log record, using the same resource identity as gateway traces. `schema_version` optionally downgrades the exported JSON to OCSF 1.1 or 1.3. OTLP endpoints are now configured per signal, so OCSF events can go to a collector that feeds a SIEM while spans go elsewhere. The existing `[openshell.gateway.otlp]` `endpoint` is the default for every signal and on its own still enables trace export. `[otlp.traces]` overrides the trace endpoint, and `[otlp.ocsf]` takes its own `endpoint` or falls back to the default. Each record carries the OCSF JSON as its body, the event time as its timestamp, a severity mapped from `severity_id`, and `ocsf.*` and `openshell.sandbox.id` attributes for filtering without parsing the body. Records flow through a queue bounded by count and bytes to the SDK OTLP log exporter in batches bounded the same way. Failed exports retry with backoff; records lost to a full queue, an oversized body, or exhausted retries are counted in metrics and reported to the collector in an `openshell.ocsf.gap` record on the next successful export. The exporter lives in `openshell-otel` so other processes can share it. Helm deployments set the `traces` and `ocsf` tables through `gatewayConfig`, and the local development gateway tasks enable OCSF export. Closes #4499 Refs #2892 Signed-off-by: Kris Hicks <khicks@nvidia.com>
Signed-off-by: Gordon Sim <gsim@redhat.com>
Supervisor OCSF events reached only the sandbox's local JSONL file and the shorthand log lines sent to the gateway, so collectors had no structured copy of most of the security record. When the gateway has `[openshell.gateway.otlp.ocsf]` configured, compute drivers now pass its endpoint and schema version to supervisors, which export their own OCSF events directly as OTLP log records. Supervisors already have egress, so the gateway and its supervisor connection carry no extra load. Supervisors use the same `openshell-otel` exporter as the gateway, with a supervisor resource identity that includes `openshell.sandbox.id` and `openshell.gateway.name`, so telemetry from sandboxes of different gateways sharing a collector can be told apart. This applies to supervisor spans too. Drivers pass the settings to supervisors as `OPENSHELL_OTLP_OCSF_ENDPOINT`, `OPENSHELL_OTLP_OCSF_SCHEMA_VERSION`, and `OPENSHELL_GATEWAY_NAME`; the gateway passes them to the VM driver as arguments. Collector headers that the gateway uses for OCSF export (`OTEL_EXPORTER_OTLP_LOGS_HEADERS`, else `OTEL_EXPORTER_OTLP_HEADERS`) travel in each sandbox's supervisor authentication bundle, which only the supervisor reads, so authenticated collectors accept supervisor records without exposing credentials to the workload. The VM driver now sends SIGTERM and waits for the supervisor to exit before closing its liveness pipe. Closing the pipe first made the supervisor exit at once and drop queued records. Closes #4544 Refs #2892 Signed-off-by: Kris Hicks <khicks@nvidia.com>
Bumps [actions/attest](https://github.com/actions/attest) from 4.2.1 to 4.2.2. - [Release notes](https://github.com/actions/attest/releases) - [Changelog](https://github.com/actions/attest/blob/main/RELEASE.md) - [Commits](actions/attest@508db95...1e69f48) --- updated-dependencies: - dependency-name: actions/attest dependency-version: 4.2.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
) * chore(deps): bump github/codeql-action/init from 4.37.7 to 4.37.9 Bumps [github/codeql-action/init](https://github.com/github/codeql-action) from 4.37.7 to 4.37.9. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@ff2f1c6...cdf488f) --- updated-dependencies: - dependency-name: github/codeql-action/init dependency-version: 4.37.9 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * fix(ci): align CodeQL action versions for initialization and analysis Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: John Myers <9696606+johntmyers@users.noreply.github.com>
rustls 0.23.45 is affected by four advisories that fail cargo deny and release qualification. All are fixed in 0.23.46. Closes #4567 Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
Add an Observability overview that lists the traces, metrics, and OCSF events OpenShell produces, where each goes, and the minimal configuration to enable it, linking to the detailed pages instead of repeating them. Add a Traces page for what is traced, span names, resource attributes, gateway names, and trace context, and point the OTLP Export reference to it instead of describing spans there. Move metric naming conventions into Gateway Metrics, and replace the stale denied-connection example in OCSF JSON Export with a real record. List every common OTEL_* environment variable in the gateway OTLP tuning reference, split into the variables the gateway honors and the ones it ignores, with the reasons. Closes #4548 Signed-off-by: Kris Hicks <khicks@nvidia.com>
…4570) * test(cli): pick forward test ports below the ephemeral range The forward tests released an OS-assigned port before the CLI bound it, so a concurrent test's bind to port 0 could claim it. Pick ports below the Linux and macOS ephemeral ranges from a random offset instead. Closes #4569 Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> * test(cli): retry forward tests when another process takes the port Replace the fixed port range with a retry. The CLI checks a forward port before binding it, so a concurrent test can claim it in between; on that error, pick a new OS-assigned port and run the forward again. Refs #4569 Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> --------- Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
Signed-off-by: John Myers <9696606+johntmyers@users.noreply.github.com>
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
* fix(vm): launch sandbox directly in guest root Signed-off-by: Adrien Langou <alangou@nvidia.com> * test(vm): explain guest init launch assertions Signed-off-by: Adrien Langou <alangou@nvidia.com> * refactor(vm): inline guest bootstrap path Signed-off-by: Adrien Langou <alangou@nvidia.com> * fix(vm): require bootstrap sandbox at guest startup Signed-off-by: Adrien Langou <alangou@nvidia.com> --------- Signed-off-by: Adrien Langou <alangou@nvidia.com>
* test(tmachine): pin k3s to Kubernetes 1.29 Signed-off-by: Simon Scatton <sscatton@nvidia.com> * fix(tmachine): retry k3s node readiness during startup Signed-off-by: Simon Scatton <sscatton@nvidia.com> --------- Signed-off-by: Simon Scatton <sscatton@nvidia.com>
* ci(compatibility): require explicit risk acceptance Signed-off-by: Simon Scatton <sscatton@nvidia.com> * test(compatibility): remove report regression tests Signed-off-by: Simon Scatton <sscatton@nvidia.com> --------- Signed-off-by: Simon Scatton <sscatton@nvidia.com>
Signed-off-by: Simon Scatton <sscatton@nvidia.com>
* feat(tmachine): build local Debian artifacts Signed-off-by: Evan Lezar <elezar@nvidia.com> * refactor(tmachine): separate VM driver artifact build Signed-off-by: Evan Lezar <elezar@nvidia.com> --------- Signed-off-by: Evan Lezar <elezar@nvidia.com>
…ws (#4419) * refactor(ci): extract release qualification and serialize Codex reviews Signed-off-by: Simon Scatton <sscatton@nvidia.com> * fix(ci): queue Codex reviews without security ordering Signed-off-by: Simon Scatton <sscatton@nvidia.com> * fix(ci): retain qualification evidence after build failures Signed-off-by: Simon Scatton <sscatton@nvidia.com> * docs(ci): shorten compatibility review guidance Signed-off-by: Simon Scatton <sscatton@nvidia.com> --------- Signed-off-by: Simon Scatton <sscatton@nvidia.com>
Signed-off-by: Simon Scatton <sscatton@nvidia.com>
Signed-off-by: Eric Curtin <eric.curtin@docker.com>
* ci(release): notify Slack when a prerelease succeeds Post a top-level message to the triage webhook when a prerelease completes, so recovery after failures is visible. The message omits the triage mention. Closes #4604 Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> * ci(release): link the prerelease tag in the success notification Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> --------- Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
…ndbox (#5196) * fix(kubernetes): keep a late stop snapshot from reviving a stopped sandbox A stop keeps the sandbox-runtime bootstrap annotations, with operation "stop", until its completion patch. The watch converter marked every object with those annotations as a starting generation: it added Bootstrapping=True and dropped Suspended. The gateway treats that condition as an accepted start that may replace a settled Stopped phase, so a snapshot taken mid-stop and delivered after the stop settled moved the sandbox from Stopped to Provisioning and the next stop was rejected. For operation "stop", withdraw readiness and withhold the suspension until completion as before, but do not report Bootstrapping. Create and restart keep their existing marking, so a real start still recovers a stale Stopped view. Closes #5195 Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> * test(kubernetes): cover the full stop sequence for stop snapshots Replace the late-stop gateway test with one that walks a stop from Stopping through completion and then replays the in-flight snapshot, with and without a connected supervisor session. An in-flight stop snapshot, which now withdraws readiness without Bootstrapping or Suspended, keeps the sandbox Stopping rather than Provisioning or Error; completion settles it Stopped; and the late replay leaves it Stopped. The test documents that it guards the gateway contract and that the driver test covers the regression itself. Share the condition reset between the stopping and bootstrapping markers in the Kubernetes driver. Refs #5195 Signed-off-by: Matthew Grossman <mgrossman@nvidia.com> --------- Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
* test(support): add container engine and Podman support crates
Add the container-engine and podman support crates for suites that build images into the gateway's store or compare against Podman's own containers, and add expect_compute_driver and base_image to testkit. Run the support crates' unit tests in the Rust test lists.
Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
* test(features): port the OCI image suite to testkit
Rewrite tests/suites/features/oci-image as testkit tests (package oci-image) that build their images through OPENSHELL_TEST_CONTAINER_ENGINE, which the Docker and Podman environments now publish. Run it through e2e-suites.yml on the Docker rootful, Podman rootful and Podman rootless rows, and retire the tmachine oci-image testsuite, its playbook and its archive.
The OCI test images are removed by a testkit cleanup hook registered right after each build, so a panic in the test body no longer leaks them. Hooks run last registered first, so the sandboxes created from an image are deleted before it. The workspace's fmt and clippy entries now cover the whole workspace, so a new suite needs no list edit.
Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
Co-authored-by: Evan Lezar <elezar@nvidia.com>
* test(features): run the Keycloak provider-refresh suite on Fedora Podman
Add fedora-podman-{rootful,rootless}-keycloak environments and run keycloak-provider-refresh there with the rpm installer, replacing the old provider-refresh crate, its tmachine testsuite and its archive. Podman has no daemon to restart Keycloak at boot, so start the container with --restart always and enable podman-restart.service for the user that runs it.
feature-specific-integration now runs the features family through e2e-suites.yml in Branch E2E, Release Dev and Release Qualification, and absorbs Branch E2E's separate e2e-suites job.
The Keycloak support crate is renamed to keycloak-support to match the -support suffix the other support crates take. It moves here, not with them, because the suite this commit replaces depends on it by the old name.
Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
* test(drivers): port the Podman user-namespace suite to testkit
Rewrite tests/suites/drivers/podman as a testkit test (package podman) that compares a sandbox's UID map with the one Podman gives a container in the same user-namespace mode. Each fedora-podman-{rootful,rootless}-userns-<mode> environment configures that mode for the binaries installer's gateway and publishes it; the packaged installers refuse such environments rather than test without the mode.
driver-specific-integration now runs the drivers family through e2e-suites.yml, and the e2e-podman tmachine row moves to its own podman-e2e-integration job. Retire the driver-podman testsuite, its playbooks, fixtures and archive.
Each driver suite is its own workspace under tests/suites/drivers/<driver>, with its own lockfile, so a driver can be tested apart from the others. The runner's --family is the path of a workspace under tests/suites/ (drivers/podman), and each part must be a plain name. The family input of e2e-suites.yml also selects the workspaces under it, so "drivers" still selects every driver suite. The suite package is named after the driver, and the support crates take a -support suffix. Branch Checks and the rust tasks format and lint each test workspace as a whole.
The Podman support crate's reference container runs with --pull missing instead of --pull never, so it pulls the image when the engine's store doesn't have it.
Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
Co-authored-by: Evan Lezar <elezar@nvidia.com>
* test(conformance): delete the openshell-conformance crate
Every suite that used the CLI conformance library now runs on testkit, so remove the crate, its lockfile entry and its row in the AGENTS.md architecture table.
Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
---------
Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
Co-authored-by: Evan Lezar <elezar@nvidia.com>
- Encrypt bounded diagnostics for private review - Run scans during prerelease qualification without gating
The Go SDK moved to github.com/ai-openshell/sdk-go (#5031). Mark the old module deprecated so pkg.go.dev and go get point users there, and replace the README with a moved notice and migration steps. Drop the go job from Branch Checks and go:ci from the ci aggregate, so proto changes no longer need regenerated Go bindings in this repository. Add a Go SDK Freeze job that fails when a PR adds or changes files under sdk/go. Deletions (the removal PR) and the README and go.mod notices are allowed. The directory itself is removed in a follow-up once the final deprecated sdk/go tag exists. Signed-off-by: Roland Huß <rhuss@redhat.com>
* feat(metrics): add metrics TLS configuration model Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * feat(metrics): add TLS configuration inputs Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * feat(metrics): serve metrics through optional TLS listener Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(metrics): cover metrics mTLS trust boundary Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * feat(helm): configure metrics TLS with operator Secrets Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * feat(tls): identify certificate reload listener Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(metrics): document secure metrics TLS configuration Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(metrics): preserve client CA trust boundary Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * chore(metrics): clarify TLS handshake rejection logs Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(metrics): cover TLS handshake rejection logs Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(metrics): preserve gateway availability on TLS failures Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): reject gateway client TLS Secret as metrics client CA The chart rejected only a metrics.tls.clientCaSecretName that matched the gateway client CA Secret by name. In the default pkiInitJob mode, certgen also writes the gateway CA as ca.crt into the sandbox client TLS Secret (server.tls.clientTlsSecretName), which sandbox workloads mount for control-plane mTLS. Pointing the metrics client CA at that Secret passed the existing check and would have trusted every sandbox client certificate on the metrics listener. Reject server.tls.clientTlsSecretName as well, document in values.yaml, the chart README, the gateway configuration docs, and the debug skill that both checks compare Secret names only and cannot detect a different Secret holding the same CA, and cover the default and custom Secret names with rendering tests. Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(metrics): distinguish missing and malformed metrics TLS Secrets The secure metrics scraping docs said a missing or malformed metrics TLS Secret leaves the metrics listener disabled while the gateway keeps serving. On Helm that is only true for a Secret that exists with malformed contents. The metrics TLS volumes are non-optional Secret mounts, so a Secret that is missing entirely, or a client CA Secret without a ca.crt key, fails the mount and the gateway pod never starts. State both outcomes in the chart README, the gateway configuration docs, and the cluster debugging skill. A loud FailedMount is preferable to a quietly missing scrape target, so the mounts stay non-optional. Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(metrics): document the require-client-auth equals-sign form The man page synopsis implied --metrics-require-client-auth accepts a space-separated BOOL, but the flag is declared with require_equals, so only the bare flag and the =VALUE forms parse. Document the synopsis as [--metrics-require-client-auth[=BOOL]], spell out the accepted forms in the description, and pin them with a CLI parsing test so the synopsis and the parser cannot drift apart. Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(metrics): split handshake log limiters by event type Handshake rejections and timeouts shared a single rate limiter, so the periodic WARN reported combined suppressed/total counts under the message of whichever event happened to trigger it. During a burst of untrusted client certificates, an operator could see the timeout message with a count made up mostly of certificate rejections. Give each event type its own limiter so warnings and counts stay attributable, and pin the behavior with a test where a timeout during a rejection burst still warns immediately. Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(metrics): align pre-existing reload JSONL test with listener tag The listener identification change retagged the gateway reload OCSF message from 'TLS certificate config reloaded successfully' to 'gateway TLS certificate config reloaded successfully', but the pre-existing ocsf_log test that pins the JSONL message was not updated, so the openshell-server suite failed deterministically. The test's intent is exactly that a gateway reload reaches JSONL, so pin the listener-tagged message. Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(metrics): scope certgen CA seeding claim to chart-managed PKI The chart README stated the sandbox client TLS Secret is seeded with the gateway CA as a general fact. certgen only writes that CA when the chart manages PKI; with cert-manager the Secret is operator-provided. The reuse rejection applies in every mode, so state the seeding claim only for chart-managed PKI. Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * style(metrics): drop unnecessary command qualification in flag test The tests module already imports command, so the super:: prefix tripped the unused-qualifications lint. Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(metrics): cover partial metrics TLS flag combinations The metrics TLS flag resolution rejected key-without-cert, cert-without-key, and a lone client CA with actionable errors, but no test pinned those boundaries. Cover all three so a future refactor of the partial-input validation cannot silently drop them. Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(metrics): cover TLS configuration without a metrics listener Preparing a server configuration with metrics TLS material but no enabled metrics listener errors out, but no test pinned that boundary. Cover it through prepare_server_config_with_drivers so the validation cannot be silently dropped. Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * chore: remove accidental OpenCode memory Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * chore: ignore local OpenCode memory Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(metrics): address CI validation failures Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> --------- Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com>
* fix(ocsf): validate sandbox attribution against exported schemas Move supervisor attribution to device.container and gateway attribution to resources or unmapped. Remove the top-level container validation exemption and cover exported schemas, gateway profiles, and runtime JSONL attribution. Refs #4915 Signed-off-by: Louis Deng <louisaeilotd@gmail.com> * fix(ocsf): validate resolved workload image identity Port resolved Docker and Podman image identity to the exported-schema implementation. Preserve upstream network trust helpers, validate complete image-bearing events, and assert the actual workload image identity in supervisor JSONL conformance. Refs #4915 Signed-off-by: Louis Deng <louisaeilotd@gmail.com> * fix(ocsf): route sandbox logs by trusted context identity Signed-off-by: Louis Deng <louisaeilotd@gmail.com> --------- Signed-off-by: Louis Deng <louisaeilotd@gmail.com>
Signed-off-by: Jim Meyer <jimeyer@nvidia.com>
…4940) * feat(supervisor): advertise accepted application route installations Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * fix(otel): identify the application endpoint RPC extension service Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * fix(gateway): preserve advertisement cleanup progress on timeout Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * perf(gateway): reuse app endpoint resolution within each lease exchange Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * test(supervisor): preserve gateway affinity in app-listener startup fixtures Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
Signed-off-by: Shailendra Singh <shailendras@nvidia.com>
Signed-off-by: Shailendra Singh <shailendras@nvidia.com>
* refactor(credentials): extract embedded credential issuer Move credential backend orchestration, storage dispatch, typed secret owners, and existing driver transport into an embedded library. Keep provider policy and refresh orchestration in the gateway, preserving existing configuration and durable credential identities. Refs #4358 Signed-off-by: Seth Jennings <sjenning@redhat.com> * fix(credentials): keep test hooks off issuer trait Signed-off-by: Seth Jennings <sjenning@redhat.com> --------- Signed-off-by: Seth Jennings <sjenning@redhat.com>
Signed-off-by: Shailendra Singh <shailendras@nvidia.com>
Maintainer list changeGains approval rights: Confirm every change is intended. Anyone listed here can single-handedly satisfy |
|
🌿 Preview your docs: https://nvidia-preview-pr-5289.docs.buildwithfern.com/openshell |
| concurrency: | ||
| group: ${{ inputs.notes-only && format('release-notes-preview-{0}', github.ref) || 'release-stable' }} | ||
| cancel-in-progress: false | ||
| queue: max |
Signed-off-by: Shailendra Singh <shailendras@nvidia.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 57fa3749f6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const ( | ||
| ownerReplicaHeader = "x-openshell-owner" | ||
| ownerRequestHeader = "x-openshell-want-owner" | ||
| routeReplicaHeader = "x-openshell-replica" | ||
| ) |
There was a problem hiding this comment.
Remove implementation changes to the frozen Go SDK
This commit adds and modifies implementation files and generated bindings under sdk/go/, despite the directory being frozen after its move to ai-openshell/sdk-go. The sdk-go-freeze job introduced in .github/workflows/branch-checks.yml explicitly rejects these changes on PR mirror pushes, so Branch Checks will fail. Keep only the permitted migration notices here and submit SDK implementation changes to the new repository instead.
AGENTS.md reference: AGENTS.md:L196-L197
Useful? React with 👍 / 👎.
Summary
Merge main through
d7da0c7da2d9into Windows through5b9e5b91afb1, retaining the native MXC implementation and the latest Windows fixes. Adapt the Windows boundary and supervisor to main's concrete Isolation Backend RPC and shared cryptography APIs.Related Issue
Maintainer build-compatibility fix under the write-access exception: main removed the backend trait and PEM dependency used by the Windows runtime. This PR restores native compatibility while incorporating the upstream commits.
Changes
Testing
Local runtime validation uses a native ARM64 Windows host. Native x64 execution was not run locally; the PR requests the opt-in Windows CI runners. Exclusive network mediation and live revocation remain unverified, as documented in the Windows boundary. Shared hosting, suspend/resume, takeover, and the sandbox agent OTLP relay remain unsupported on MXC.
Checklist