mirror of
https://github.com/NVIDIA/OpenShell.git
synced 2026-10-30 07:33:59 +08:00
* feat(helm): add optional PostgreSQL backing store with Secret-based credentials - Add postgres.enabled and postgres.deploy values to control database backend (SQLite vs PostgreSQL) and subchart deployment independently. - Introduce db-secret.yaml template for Opaque Secret with assembled postgresql:// connection string injected via OPENSHELL_DB_URL env var. - Add Bitnami PostgreSQL as optional subchart dependency keyed on postgres.deploy to prevent subchart deployment in external mode. - Externalize JWT signing key file mode via sandboxJwt.secretDefaultMode with 0400 default matching upstream. - Add validation guard for postgres.deploy=true without postgres.enabled. - Add helm unit tests covering internal, external, URL-override, special character encoding, and misconfiguration error paths. - Update README with Kubernetes and OpenShift install examples for bundled and external PostgreSQL configurations. - Add helm dependency build to lint and unittest tasks. * fix(helm): add database backend docs to README.md.gotmpl and regenerate The helm-docs CI check failed because the Database backend section was added directly to README.md instead of README.md.gotmpl. Move the content to the template and regenerate so the check passes. * fix(helm): use Secret-based DB credentials and support existingSecret Replace the inline db-url stringData pattern with a proper Secret containing individual fields plus a uri key. When postgres.deploy=true the Bitnami service-binding secret is referenced directly; when deploy=false users can supply postgres.external.existingSecret to bring their own Secret, or let the chart generate one from the external field values. Also restructures the README database section for clarity, adds helm-unittest coverage for the new secret resolution paths, and fixes a markdown lint issue in the root README. * refactor(helm): move OpenShift e2e script to e2e/rust/ and add mise task Move test-openshift-scenarios.sh from deploy/helm/openshell/ci/ to e2e/rust/e2e-openshift.sh, matching the existing e2e script naming convention. Register it as `e2e:openshift` in tasks/test.toml — not wired into the `test` or `e2e` aggregates so it only runs on explicit invocation against a live OpenShift cluster. * feat(e2e): add database backend scenarios to Kubernetes e2e Extend with-kube-gateway.sh with an optional multi-scenario loop gated by OPENSHELL_E2E_KUBE_DB_SCENARIOS=1. When enabled, the script installs the Helm chart three times — SQLite (default), bundled PostgreSQL, and external PostgreSQL with existingSecret — running the full test suite against each backend. When unset, existing single-install behavior is unchanged. Also adds helm dependency build before helm install, fixing CI failures caused by the missing PostgreSQL subchart dependency. * refactor(helm): simplify PostgreSQL config to two orthogonal controls Replace postgres.deploy and postgres.external.* with two simple controls: - postgres.enabled: deploy the bundled Bitnami PostgreSQL subchart - server.externalDbSecret: name of a pre-existing Secret with a uri key Delete db-secret.yaml — the chart no longer generates Secrets from individual credential fields. Users either get the Bitnami service-binding secret (bundled) or bring their own via server.externalDbSecret. Add validation that postgres.serviceBindings.enabled must stay true when using bundled PostgreSQL, preventing a confusing runtime failure.
111 lines
4.4 KiB
TOML
111 lines
4.4 KiB
TOML
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# Test tasks (Rust + Python)
|
|
|
|
[test]
|
|
description = "Run all tests (Rust + Python)"
|
|
depends = ["test:rust", "test:python", "test:install-sh"]
|
|
|
|
["test:install-sh"]
|
|
description = "Run focused install.sh shell tests"
|
|
run = "tasks/scripts/test-install-sh.sh"
|
|
hide = true
|
|
|
|
[e2e]
|
|
description = "Run all end-to-end tests (Rust + Python)"
|
|
depends = ["e2e:rust", "e2e:python"]
|
|
|
|
["e2e:gpu"]
|
|
description = "Run Docker GPU end-to-end tests"
|
|
depends = ["e2e:docker:gpu"]
|
|
|
|
["e2e:k3s:gpu"]
|
|
description = "Run k3s GPU end-to-end tests"
|
|
depends = ["e2e:python:gpu"]
|
|
|
|
["test:rust"]
|
|
description = "Run Rust tests"
|
|
run = [
|
|
# Run the workspace once without openshell-server so we can run that crate
|
|
# with test-only helpers enabled.
|
|
"cargo test --workspace --exclude openshell-server",
|
|
"cargo test -p openshell-server --features test-support",
|
|
]
|
|
hide = true
|
|
|
|
["test:python"]
|
|
description = "Run Python tests"
|
|
depends = ["python:proto"]
|
|
env = { UV_NO_SYNC = "1" }
|
|
run = "uv run pytest python/"
|
|
hide = true
|
|
|
|
["e2e:rust"]
|
|
description = "Run Rust CLI e2e tests against a Docker-backed gateway"
|
|
run = [
|
|
"cargo build -p openshell-cli --features openshell-core/dev-settings",
|
|
"e2e/with-docker-gateway.sh cargo test --manifest-path e2e/rust/Cargo.toml --features e2e-docker",
|
|
]
|
|
|
|
["e2e:websocket-conformance"]
|
|
description = "Run focused WebSocket conformance e2e tests against a Docker-backed gateway"
|
|
run = [
|
|
"cargo build -p openshell-cli --features openshell-core/dev-settings",
|
|
"e2e/with-docker-gateway.sh cargo test --manifest-path e2e/rust/Cargo.toml --features e2e-docker --test websocket_conformance",
|
|
]
|
|
|
|
["e2e:python"]
|
|
description = "Run Python e2e tests against a Docker-backed gateway (E2E_PARALLEL=N or 'auto'; default 5)"
|
|
depends = ["python:proto"]
|
|
env = { UV_NO_SYNC = "1", PYTHONPATH = "python" }
|
|
run = "e2e/with-docker-gateway.sh uv run pytest -o python_files='test_*.py' -m 'not gpu' -n ${E2E_PARALLEL:-5} e2e/python"
|
|
|
|
["e2e:python:gpu"]
|
|
description = "Run Python GPU e2e tests"
|
|
depends = ["python:proto"]
|
|
env = { UV_NO_SYNC = "1", PYTHONPATH = "python", OPENSHELL_E2E_DOCKER_GPU = "1" }
|
|
run = "e2e/with-docker-gateway.sh uv run pytest -o python_files='test_*.py' -m gpu -n ${E2E_PARALLEL:-1} e2e/python"
|
|
|
|
["e2e:podman"]
|
|
description = "Run Rust CLI e2e tests against a Podman-backed gateway"
|
|
run = "e2e/rust/e2e-podman.sh"
|
|
|
|
["e2e:podman:gpu"]
|
|
description = "Run GPU e2e against a standalone gateway with the Podman compute driver"
|
|
env = { OPENSHELL_E2E_PODMAN_GPU = "1", OPENSHELL_E2E_PODMAN_TEST = "gpu_device_selection", OPENSHELL_E2E_PODMAN_FEATURES = "e2e-podman-gpu" }
|
|
run = "e2e/rust/e2e-podman.sh"
|
|
|
|
["e2e:kubernetes"]
|
|
description = "Run Rust CLI e2e tests against an OpenShell gateway deployed on Kubernetes via Helm (set OPENSHELL_E2E_KUBE_CONTEXT to reuse a cluster; otherwise creates a local k3d cluster when k3d is installed; set OPENSHELL_E2E_KUBE_TEST=<name> to scope to one test)"
|
|
run = "e2e/rust/e2e-kubernetes.sh"
|
|
|
|
["e2e:kubernetes:db"]
|
|
description = "Run Kubernetes e2e with all database backend scenarios (SQLite, bundled PostgreSQL, external PostgreSQL with existingSecret)"
|
|
env = { OPENSHELL_E2E_KUBE_DB_SCENARIOS = "1" }
|
|
run = "e2e/rust/e2e-kubernetes.sh"
|
|
|
|
["e2e:vm"]
|
|
description = "Start openshell-gateway with the VM compute driver and run the cluster-agnostic smoke e2e"
|
|
run = "e2e/rust/e2e-vm.sh"
|
|
|
|
["e2e:docker"]
|
|
description = "Run smoke e2e against a standalone gateway with the Docker compute driver"
|
|
run = "e2e/rust/e2e-docker.sh"
|
|
|
|
["e2e:mechanistic-smoke"]
|
|
description = "Run mechanistic L4 smoke against a Docker-backed gateway"
|
|
run = [
|
|
"cargo build -p openshell-cli --features openshell-core/dev-settings",
|
|
"e2e/with-docker-gateway.sh bash -lc 'target/debug/openshell settings set --global --key agent_policy_proposals_enabled --value true --yes && OPENSHELL_BIN=$PWD/target/debug/openshell bash e2e/policy-advisor/mechanistic-smoke.sh'",
|
|
]
|
|
|
|
["e2e:docker:gpu"]
|
|
description = "Run GPU e2e against a standalone gateway with the Docker compute driver"
|
|
env = { OPENSHELL_E2E_DOCKER_GPU = "1", OPENSHELL_E2E_DOCKER_TEST = "gpu_device_selection", OPENSHELL_E2E_DOCKER_FEATURES = "e2e-docker-gpu" }
|
|
run = "e2e/rust/e2e-docker.sh"
|
|
|
|
["e2e:openshift"]
|
|
description = "Run OpenShift database-backend integration scenarios against a live cluster (requires oc CLI authenticated to an OpenShift cluster)"
|
|
run = "e2e/rust/e2e-openshift.sh"
|