Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
212 commits
Select commit Hold shift + click to select a range
5f8029d
feat(server): docker runtime sandbox_env / sandbox_binds config
tea-artist Jul 15, 2026
1bdd4c3
fix(kubernetes): clean up snapshot registry images
GodBlf Jul 30, 2026
df4e2f4
feat(kubernetes): make image committer pluggable
bcho Aug 2, 2026
3ee2a66
refactor(kubernetes): configure committer pods through templates
bcho Aug 2, 2026
f3e115e
refactor(kubernetes): simplify image committer contract
bcho Aug 2, 2026
66b0b0d
refactor(kubernetes): trim unused executor output
bcho Aug 2, 2026
1913dfc
refactor(kubernetes): expose image committer package
bcho Aug 2, 2026
4eed189
fix(kubernetes): recover missing snapshot image content
bcho Aug 3, 2026
2b8b05a
refactor(kubernetes): require source credentials in builder
bcho Aug 3, 2026
f6da4e8
fix(kubernetes): pin recovered source image content
bcho Aug 3, 2026
acf2fdf
fix(kubernetes): address snapshot cleanup review feedback
GodBlf Aug 10, 2026
5ebb181
test(kubernetes): enable registry deletes in pause e2e
GodBlf Aug 10, 2026
479773f
fix(server): avoid duplicate proxy response headers
hpliStartAgain Aug 11, 2026
47782ff
Merge branch 'main' into fix/k8s-snapshot-registry-cleanup-1179
Pangjiping Aug 11, 2026
ca0354f
fix(kubernetes): fall back to registry digest on cleanup miss
GodBlf Aug 11, 2026
179cae6
test(kubernetes): bound registry fallback assertions
GodBlf Aug 11, 2026
85cb70a
fix(kubernetes): verify registry digest after cleanup
GodBlf Aug 11, 2026
b0d17af
test(kubernetes): complete registry manifest response fixture
GodBlf Aug 11, 2026
a6e4248
fix(sdks): bound idle sandbox release concurrency
jianpingpei Aug 11, 2026
afab304
fix(chart/server): roll the server Deployment when config.toml changes
MGuardia10 Aug 11, 2026
60128bb
docs(kubernetes): clarify image committer platform assumption
bcho Aug 11, 2026
0357bcf
fix(kubernetes): preserve snapshot digest semantics
bcho Aug 11, 2026
86a65b5
fix(kubernetes): secure source registry transport by default
bcho Aug 11, 2026
8d4327c
Merge remote-tracking branch 'upstream/main' into feat/image-committe…
bcho Aug 11, 2026
4cd7bfc
test(kubernetes): bound pause e2e teardown
GodBlf Aug 12, 2026
9b3cbf4
Merge pull request #1473 from MGuardia10/fix/server-chart-config-chec…
Pangjiping Aug 12, 2026
7166129
docs: surface official container image provenance
ruirui6946 Jul 19, 2026
29ed39b
docs: include nodeagent in image verification list
ruirui6946 Aug 12, 2026
380e706
docs(kubernetes): document shared PVCs in pools
ruirui6946 Aug 12, 2026
39f95a1
test(kubernetes): harden pool PVC regressions
ruirui6946 Aug 12, 2026
cefeeb8
Merge branch 'main' into feat/image-committer-interface
bcho Aug 12, 2026
ccd0192
docs(kubernetes): keep pool examples runnable
ruirui6946 Aug 12, 2026
8e67a7f
fix(examples): support HTTPS noVNC endpoints
ruirui6946 Aug 12, 2026
e38bb9a
docs(kubernetes): keep pool usage on public CRD
ruirui6946 Aug 12, 2026
9ea7820
docs(kubernetes): describe pool mounts via controller
ruirui6946 Aug 12, 2026
fde008f
docs(kubernetes): explain pooled entrypoint injection
ruirui6946 Aug 12, 2026
945a535
Merge pull request #1476 from ruirui6946/agent/pool-static-pvc-961
Pangjiping Aug 12, 2026
13252ee
Merge branch 'main' into agent/docs-container-image-provenance-1265
Pangjiping Aug 12, 2026
fad3920
Merge pull request #1339 from ruirui6946/agent/docs-container-image-p…
Pangjiping Aug 12, 2026
992100d
fix(sdks): preserve legacy idle release behavior
jianpingpei Aug 12, 2026
8b2df0f
docs(kubernetes): correct pooled task diagnostics
ruirui6946 Aug 12, 2026
a108d85
Merge remote-tracking branch 'origin/main' into docs/pool-task-execut…
ruirui6946 Aug 12, 2026
2001151
fix(examples): distinguish direct noVNC transport
ruirui6946 Aug 12, 2026
e293271
Merge remote-tracking branch 'origin/main' into fix/desktop-https-684
ruirui6946 Aug 12, 2026
c8789fd
fix(examples): require proxy for HTTPS desktop access
ruirui6946 Aug 12, 2026
e1ac8b3
docs(examples): clarify noVNC proxy authentication
ruirui6946 Aug 12, 2026
4d39eab
fix(server): preserve proxy origin date
hpliStartAgain Aug 12, 2026
f39a20e
fix(server): add date to unhandled errors
hpliStartAgain Aug 12, 2026
3bd5a29
docs(server): clarify sandbox failure recovery
ruirui6946 Aug 12, 2026
c1e6e22
docs(egress): document vault state across resume
ruirui6946 Aug 12, 2026
50891eb
Limit vault path checks to matching bindings
jwx0925 Aug 12, 2026
78314cf
Merge pull request #1485 from opensandbox-group/agent/limit-vault-pat…
Pangjiping Aug 12, 2026
2b579c6
Merge branch 'main' into fix/desktop-https-684
Pangjiping Aug 12, 2026
5b6cfd2
Merge pull request #1477 from ruirui6946/fix/desktop-https-684
Pangjiping Aug 12, 2026
c90b9ef
Merge branch 'main' into docs/pool-task-executor-970
Pangjiping Aug 12, 2026
f8882ff
Merge pull request #1478 from ruirui6946/docs/pool-task-executor-970
Pangjiping Aug 12, 2026
51e40ff
fix(examples): warn for SDK fallback API key
ruirui6946 Aug 12, 2026
1176eb2
Merge branch 'main' into docs/sandbox-failure-recovery-1127
Pangjiping Aug 12, 2026
d47772c
docs(kubernetes): align task-executor log path
ruirui6946 Aug 12, 2026
6c2f014
Merge pull request #1483 from ruirui6946/docs/sandbox-failure-recover…
Pangjiping Aug 12, 2026
e52d1d4
Merge branch 'main' into docs/credential-vault-resume-1366
Pangjiping Aug 12, 2026
88004c9
Merge pull request #1484 from ruirui6946/docs/credential-vault-resume…
Pangjiping Aug 12, 2026
d90a372
test(go): cover idle release cancellation
jianpingpei Aug 13, 2026
4c8bc0f
Merge branch 'main' into docs/task-executor-log-path
Pangjiping Aug 13, 2026
d521293
Merge pull request #1487 from ruirui6946/docs/task-executor-log-path
Pangjiping Aug 13, 2026
a660250
Merge branch 'main' into fix/desktop-env-api-key-warning
Pangjiping Aug 13, 2026
3edd69a
fix(sdks): remove readiness network hints
jianpingpei Aug 13, 2026
186177e
Merge pull request #1486 from ruirui6946/fix/desktop-env-api-key-warning
Pangjiping Aug 13, 2026
3797b53
Merge branch 'main' into fix/proxy-response-headers
Pangjiping Aug 13, 2026
ded5722
Merge pull request #1471 from hpliStartAgain/fix/proxy-response-headers
Pangjiping Aug 13, 2026
735cc6a
Merge branch 'main' into fix/remove-sdk-readiness-network-hints
Pangjiping Aug 13, 2026
3273279
fix(server): release aborted proxy responses
Pangjiping Aug 13, 2026
172d52b
Merge pull request #1488 from ruirui6946/fix/proxy-response-pool-leak…
Pangjiping Aug 13, 2026
b996a29
Merge branch 'main' into fix/sdk-pool-release-concurrency
Pangjiping Aug 13, 2026
e926123
Merge pull request #1475 from jianpingpei/fix/sdk-pool-release-concur…
Pangjiping Aug 13, 2026
f47b969
test(e2e): drop stale readiness hint assertion
jianpingpei Aug 13, 2026
49d2692
Merge remote-tracking branch 'origin/main' into fix/remove-sdk-readin…
jianpingpei Aug 13, 2026
4a9db41
Merge pull request #1493 from jianpingpei/fix/remove-sdk-readiness-ne…
Pangjiping Aug 13, 2026
157d605
fix(sdk): include response body in client error messages (#1496)
Pangjiping Aug 13, 2026
4d4c516
fix(kotlin): bound completion-driven pool reconcile rate (#1494)
Pangjiping Aug 13, 2026
032afc3
chore: bump egress to v1.1.6
github-actions[bot] Aug 13, 2026
f13cef8
Merge branch 'main' into bump/egress-v1.1.6
Pangjiping Aug 13, 2026
451a36c
Merge pull request #1498 from opensandbox-group/bump/egress-v1.1.6
Pangjiping Aug 13, 2026
ef7934b
chore: bump execd to v1.0.22
github-actions[bot] Aug 13, 2026
20bb234
Merge branch 'main' into bump/execd-v1.0.22
Pangjiping Aug 13, 2026
2b9a7a3
Merge pull request #1501 from opensandbox-group/bump/execd-v1.0.22
Pangjiping Aug 13, 2026
a7fda10
fix(server): omit ingress header from proxy endpoints
hpliStartAgain Aug 13, 2026
7c03b74
Merge pull request #1503 from hpliStartAgain/fix/server-proxy-endpoin…
Pangjiping Aug 13, 2026
7266c9b
Add server proxy option to command line arguments
vedmaka Aug 13, 2026
48f401f
Fix formatting
vedmaka Aug 13, 2026
d33b152
Fix duplicated lines
vedmaka Aug 13, 2026
358026c
Update README with 'use-server-proxy' description
vedmaka Aug 13, 2026
95e000c
docs(kubernetes): clarify BatchSandbox status semantics
hpliStartAgain Aug 14, 2026
dd16e6c
Merge pull request #1509 from vedmaka/main
Pangjiping Aug 14, 2026
a499814
fix(kotlin): honor Retry-After for pool warmups
Gujiassh Aug 14, 2026
d036e17
Merge branch 'main' into docs/batchsandbox-status-semantics
Pangjiping Aug 14, 2026
f2f10a2
Merge pull request #1511 from hpliStartAgain/docs/batchsandbox-status…
Pangjiping Aug 14, 2026
138ce5c
OSEP-0004/0005/0014: mark implemented and add tenant namespace startu…
Pangjiping Aug 14, 2026
959150e
fix(deps): bump vulnerable packages to patched versions (#1467)
Pangjiping Aug 14, 2026
02617e2
fix(server): rewrite root-relative proxy redirects
hpliStartAgain Aug 14, 2026
c5c4f0d
fix(kotlin): replenish pool after cleanup
KXHXK Aug 14, 2026
f04ff02
fix(server): preserve configured proxy base path
hpliStartAgain Aug 14, 2026
53492dc
fix(server): configure egress sidecar readiness timeout
luffy0x Aug 14, 2026
a34138b
feat(sdk/go): add SandboxPoolManager with fence/tombstone parity
MannXo Aug 14, 2026
6fb6539
feat(kotlin): trace sandbox pool warmup with OpenTelemetry
Pangjiping Aug 14, 2026
8212561
Merge pull request #1516 from hpliStartAgain/fix/proxy-root-relative-…
Pangjiping Aug 14, 2026
9593926
fix(kotlin): use epoch clock for warmup root span and trace dropped c…
Pangjiping Aug 14, 2026
8101fb3
test(kotlin): assert retry budget via connector attempts in stale-dra…
Pangjiping Aug 14, 2026
e12b78b
Merge branch 'main' into fix/kotlin-cleanup-reconcile
Pangjiping Aug 14, 2026
f1c62c2
fix(sdk/go): observe the destroy fence on the pool acquire path
MannXo Aug 14, 2026
2780c0d
Merge pull request #1519 from KXHXK/fix/kotlin-cleanup-reconcile
Pangjiping Aug 14, 2026
8193ff3
Merge branch 'main' into feat/image-committer-interface
Pangjiping Aug 14, 2026
2f4372b
fix(sdk/go): re-check the destroy fence after taking an idle sandbox
MannXo Aug 14, 2026
aed28da
fix(kubernetes): override committer non-root policy
bcho Aug 14, 2026
607311f
Merge pull request #1431 from bahe-msft/feat/image-committer-interface
Pangjiping Aug 15, 2026
fea4b02
Merge branch 'main' into fix/1489-egress-timeout
Pangjiping Aug 15, 2026
4435702
Merge branch 'main' into docker-sandbox-env-binds
Pangjiping Aug 15, 2026
f8ed873
Merge pull request #1303 from teableio/docker-sandbox-env-binds
Pangjiping Aug 15, 2026
9a27973
perf(sdk): resolve execd and egress endpoints in parallel
bcfre Aug 16, 2026
b88a1aa
feat(pool): default shared connection pool sized by warmupConcurrency…
Pangjiping Aug 16, 2026
976af7c
fix: stop background SSE stream reads on complete event (#1528)
wakqasahmed Aug 16, 2026
0882c45
fix: address review feedback on background SSE early-break (#1528)
wakqasahmed Aug 16, 2026
2ed888c
fix(server): expire informer cache when the watch stops delivering
aGallea Aug 16, 2026
66adb74
fix(server): report has_synced false once the informer is stopped
aGallea Aug 16, 2026
6d416e0
feat(examples): add Deep Agents + OpenSandbox example
AyushSonuu Aug 16, 2026
7745b61
docs(examples): add Deep Agents example README
AyushSonuu Aug 16, 2026
31e1875
docs(examples): add Deep Agents example page
AyushSonuu Aug 16, 2026
9560a49
docs(examples): slim Deep Agents README to a pointer
AyushSonuu Aug 16, 2026
ea03d9d
docs(examples): link Deep Agents example from index
AyushSonuu Aug 16, 2026
c2112cc
Merge branch 'main' into feature/parallel-endpoint-resolution
Pangjiping Aug 17, 2026
d2bbd4f
Merge pull request #1531 from bcfre/feature/parallel-endpoint-resolution
Pangjiping Aug 17, 2026
b8f079a
fix(server): clarify egress readiness timeout config
luffy0x Aug 17, 2026
0f02b46
Merge branch 'main' into feat/kotlin-pool-warmup-tracing
Pangjiping Aug 17, 2026
da1f952
fix(cli): report pause request acceptance
hpliStartAgain Aug 17, 2026
0e740a5
Merge pull request #1524 from Pangjiping/feat/kotlin-pool-warmup-tracing
Pangjiping Aug 17, 2026
3e25705
Merge branch 'main' into fix/1489-egress-timeout
Pangjiping Aug 17, 2026
0454010
Merge pull request #1522 from luppyw/fix/1489-egress-timeout
Pangjiping Aug 17, 2026
0261797
Merge branch 'main' into fix/cli-pause-accepted
Pangjiping Aug 17, 2026
522ef6d
fix(server): drop unreachable ERROR watch-event branch
aGallea Aug 17, 2026
6c719e3
Merge pull request #1537 from hpliStartAgain/fix/cli-pause-accepted
Pangjiping Aug 17, 2026
7bf2b81
Merge branch 'main' into fix/informer-stale-cache-after-watch-stall
aGallea Aug 17, 2026
6bde541
fix(examples): use sandbox.destroy() to close local resources
AyushSonuu Aug 17, 2026
2d4dc35
docs(examples): note sandbox.destroy() cleanup
AyushSonuu Aug 17, 2026
dc3c17e
fix(server): use supported PVC strategic merge request
hpliStartAgain Aug 17, 2026
335669d
Merge branch 'main' into feat/go-sdk-pool-manager
Pangjiping Aug 17, 2026
e68f074
Merge pull request #1525 from MannXo/feat/go-sdk-pool-manager
Pangjiping Aug 17, 2026
9c83287
Merge branch 'main' into add-deep-agents-example
Pangjiping Aug 17, 2026
b40d1b3
Merge pull request #1535 from AyushSonuu/add-deep-agents-example
Pangjiping Aug 17, 2026
7dcbbf5
Merge branch 'main' into fix/informer-stale-cache-after-watch-stall
Pangjiping Aug 17, 2026
b422ba2
Merge pull request #1534 from aGallea/fix/informer-stale-cache-after-…
Pangjiping Aug 17, 2026
da5a5d2
Merge branch 'main' into fix/pvc-owner-reference-patch
Pangjiping Aug 17, 2026
5932188
Merge pull request #1538 from hpliStartAgain/fix/pvc-owner-reference-…
Pangjiping Aug 17, 2026
e0836fc
feat(examples): add OpenCode integration
hpliStartAgain Aug 17, 2026
27af676
fix(examples): always destroy OpenCode sandbox
hpliStartAgain Aug 17, 2026
43ab6bb
feat(execd): execd as sandbox init with hardening floor (OSEP-0018) (…
Pangjiping Aug 17, 2026
96175e2
fix(execd): init-mode signal forwarding + execd-init e2e coverage (OS…
Pangjiping Aug 17, 2026
df66edb
fix: release SSE reader on early stream exit to avoid connection leak…
wakqasahmed Aug 18, 2026
8482263
docs(execd): fix dead OSEP-0018 link in components docs (#1548)
Pangjiping Aug 18, 2026
51c194f
Merge branch 'main' into feature/issue-1528-sse-early-break
Pangjiping Aug 18, 2026
97d09e9
Merge pull request #1532 from wakqasahmed/feature/issue-1528-sse-earl…
Pangjiping Aug 18, 2026
0f617bd
Merge branch 'main' into docs/opencode-example
Pangjiping Aug 18, 2026
7b584d0
Merge pull request #1544 from hpliStartAgain/docs/opencode-example
Pangjiping Aug 18, 2026
f85a467
feat(server): implement stable diagnostics API
hpliStartAgain Aug 18, 2026
f277cd9
fix(server): report truncated diagnostics
hpliStartAgain Aug 18, 2026
5fc1ed1
fix(cli): surface raw diagnostic notices
hpliStartAgain Aug 18, 2026
b0658d4
fix(cli): align diagnostic scope guidance
hpliStartAgain Aug 18, 2026
eceff9c
fix(diagnostics): reject unavailable lifecycle scope
hpliStartAgain Aug 18, 2026
c9285b7
fix(server): ignore legacy scoped log selector
hpliStartAgain Aug 18, 2026
2657fbc
fix(server): ignore legacy scoped log time filter
hpliStartAgain Aug 18, 2026
a698525
fix(server): map Kubernetes event API errors
hpliStartAgain Aug 18, 2026
fb37444
feat(execd): server-path hardening e2e coverage (OSEP-0018 R-i) (#1554)
Pangjiping Aug 18, 2026
b057c91
fix(server): align Kubernetes log error status
hpliStartAgain Aug 18, 2026
e2eeb8e
fix(server): isolate stable diagnostic bounds
hpliStartAgain Aug 18, 2026
6116c35
fix(kotlin): treat zero Retry-After as missing for pool throttle
Gujiassh Aug 18, 2026
518126c
fix(server): map Docker log errors
hpliStartAgain Aug 18, 2026
844e92a
fix(server): follow Kubernetes event pagination
hpliStartAgain Aug 18, 2026
21c225d
refactor(server): move diagnostics policy to runtimes
hpliStartAgain Aug 18, 2026
89355c9
Merge branch 'main' into fix/stable-diagnostics-api
Pangjiping Aug 18, 2026
710bbf0
Merge pull request #1553 from hpliStartAgain/fix/stable-diagnostics-api
Pangjiping Aug 18, 2026
5371878
feat(server): export HTTP request metrics via OTLP
hpliStartAgain Aug 18, 2026
ebb85d8
feat(execd): k8s hardening e2e + bwrap/PTY coverage (OSEP-0018 R-i, R…
Pangjiping Aug 18, 2026
a4acd18
fix(server): bound HTTP metric methods
hpliStartAgain Aug 18, 2026
9caa8ac
fix(server): mark streaming metric failures
hpliStartAgain Aug 18, 2026
3f61639
fix(server): label registered Starlette routes
hpliStartAgain Aug 18, 2026
7335293
fix: bump containerd to v1.7.33 and selinux to v1.13.1 to fix CVEs (#…
Pangjiping Aug 18, 2026
82d2cd2
feat(egress): auto-allow OTLP endpoint egress traffic (#1504)
Pangjiping Aug 18, 2026
b50a029
fix(server,k8s): propagate template container securityContext to pods
gegemeimingzi Aug 18, 2026
280cd0f
fix(server,k8s): merge nested template securityContext fields
gegemeimingzi Aug 18, 2026
415259e
feat(fleets): FastPath v2 gRPC client for fast-sandbox backend (OSEP-…
Pangjiping Aug 18, 2026
7089531
Merge branch 'main' into fix/batchsandbox-container-security-context
Pangjiping Aug 19, 2026
749a87f
Merge pull request #1564 from gegemeimingzi/fix/batchsandbox-containe…
Pangjiping Aug 19, 2026
d0db8ec
Merge branch 'main' into codex/server-http-metrics
Pangjiping Aug 19, 2026
426300f
Merge pull request #1561 from hpliStartAgain/codex/server-http-metrics
Pangjiping Aug 19, 2026
8f01e93
fix(chart): default containerdSocketPath to empty and bump opensandbo…
hittyt Aug 19, 2026
81b68ec
fix(server): reject non-finite CPU limits
Aug 19, 2026
49538d3
fix(sdk-python): preserve replacement endpoint fetches
Aug 19, 2026
d13de06
Merge upstream/main into fix/k8s-snapshot-registry-cleanup-1179
GodBlf Aug 19, 2026
9e5c3ea
fix(server): bound Docker nano CPUs to int64
Aug 19, 2026
28984f7
feat(fleets): create/status mapping for fast-sandbox backend (OSEP-00…
Pangjiping Aug 19, 2026
d8e53a2
Merge branch 'main' into agent/reject-nonfinite-cpu
Pangjiping Aug 19, 2026
4ed6634
fix(kubernetes): fail fast on malformed registry auth
GodBlf Aug 19, 2026
a91a890
test(kubernetes): wait for replaced registry secret
GodBlf Aug 19, 2026
0191990
Merge pull request #1568 from mameikagou/agent/reject-nonfinite-cpu
Pangjiping Aug 19, 2026
c92b5b8
test(kubernetes): use JSON to verify registry secret
GodBlf Aug 19, 2026
8ead1f7
Merge branch 'main' into agent/fix-endpoint-cache-invalidation
Pangjiping Aug 19, 2026
b740eb8
test(kubernetes): make registry push failure deterministic
GodBlf Aug 19, 2026
d1fd714
Merge pull request #1567 from mameikagou/agent/fix-endpoint-cache-inv…
Pangjiping Aug 19, 2026
99ca926
test(kubernetes): use EndpointSlice for registry readiness
GodBlf Aug 19, 2026
5832e16
test(kubernetes): restore registry after push failure test
GodBlf Aug 19, 2026
0391cba
Merge branch 'main' into fix/kotlin-pool-retry-after-1500
Pangjiping Aug 19, 2026
b8cabe5
Merge pull request #1512 from Gujiassh/fix/kotlin-pool-retry-after-1500
Pangjiping Aug 19, 2026
36aca9b
Merge upstream/main into fix/k8s-snapshot-registry-cleanup-1179
GodBlf Aug 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 8 additions & 1 deletion .github/workflows/detect-changes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ jobs:
path.startsWith("components/execd/") ||
path.startsWith("components/egress/") ||
path.startsWith("sdks/") ||
path.startsWith("tests/"),
path.startsWith("tests/") ||
path === "scripts/python-execd-init-e2e.sh" ||
path === "scripts/python-execd-hardening-e2e.sh",
egress: (path) =>
workflowChanged(path, "egress-test.yml") ||
path.startsWith("components/egress/") ||
Expand All @@ -74,6 +76,11 @@ jobs:
path === "scripts/python-k8s-e2e.sh" ||
path === "scripts/python-k8s-e2e-ingress.sh" ||
path === "scripts/common/kubernetes-e2e.sh" ||
path === "scripts/python-k8s-execd-init-e2e.sh" ||
path === "tests/python/tests/test_execd_init_e2e.py" ||
path === "tests/python/tests/test_execd_hardening_e2e.py" ||
path === "server/opensandbox_server/examples/e2e.batchsandbox-template.yaml" ||
path.startsWith("components/execd/") ||
path.startsWith("kubernetes/charts/"),
ingress: (path) =>
workflowChanged(path, "ingress-test.yaml") ||
Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/execd-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ jobs:
run: |
go test -v -coverpkg=./... -coverprofile=coverage.out -covermode=atomic ./pkg/...

- name: Run execd-ebpf variant tests
working-directory: components/execd
run: |
CGO_ENABLED=1 go test -tags ebpf -count=1 ./pkg/ebpf/

- name: Calculate coverage and generate summary
working-directory: components/execd
id: coverage
Expand Down Expand Up @@ -130,6 +135,14 @@ jobs:
chmod +x components/execd/tests/smoke_bwrap.sh
bash components/execd/tests/smoke_bwrap.sh

- name: Init-mode container regression (OSEP-0018)
if: matrix.os == 'ubuntu-latest'
shell: bash
timeout-minutes: 30
run: |
chmod +x components/execd/tests/init_container.sh
bash components/execd/tests/init_container.sh

- name: Show logs
if: always()
run: |
Expand Down Expand Up @@ -224,6 +237,17 @@ jobs:
working-directory: components/execd
run: sudo -E env "PATH=$PATH" go test -tags="linux,bwrap" -v -count=1 -timeout=5m ./pkg/runtime/bwrap_test/

- name: Run isolated session init-mode reaper integration test
working-directory: components/execd
run: |
# bwrap lifecycle under init-mode reaper dispatch (OSEP-0018 R-o):
# the pre-reap barrier must serialize process-group teardown with
# the reaper's observe/consume while execd owns wait4.
sudo -E env "PATH=$PATH" go test \
-tags="linux,bwrap" -v -count=1 -timeout=3m \
-run '^TestIsolatedSessionWithInitReaper$' \
./pkg/runtime

required:
name: Execd CI
if: always()
Expand Down
82 changes: 78 additions & 4 deletions .github/workflows/kubernetes-nightly-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,82 @@ jobs:
run: |
kind delete cluster --name "${KIND_CLUSTER}" || true

execd-init-e2e:
name: Execd-Init + Hardening E2E
needs: changes
if: needs.changes.outputs.relevant == 'true'
runs-on: ubuntu-latest
env:
KIND_CLUSTER: opensandbox-e2e
KIND_K8S_VERSION: v1.30.4
KUBECONFIG_PATH: /tmp/opensandbox-kind-kubeconfig
KUBECONFIG: /tmp/opensandbox-kind-kubeconfig
OPENSANDBOX_E2E_SANDBOX_CPU: 250m
OPENSANDBOX_E2E_SANDBOX_MEMORY: 512Mi
steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.11"

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.25.0"

- name: Add Go bin to PATH
run: echo "$(go env GOPATH)/bin" >> "$GITHUB_PATH"

- name: Set up uv
uses: astral-sh/setup-uv@v7
with:
version: "latest"

- name: Set up kubectl
uses: azure/setup-kubectl@v4

- name: Set up Helm
uses: azure/setup-helm@v4

- name: Run execd-init + hardening E2E
run: bash scripts/python-k8s-execd-init-e2e.sh

- name: Dump kind diagnostics
if: always()
run: |
kubectl get pods -A -o wide || true
kubectl get batchsandboxes -A || true
kubectl describe deployment -n opensandbox-system opensandbox-server || true

- name: Eval in-cluster server logs
if: always()
run: |
kubectl logs -n opensandbox-system deployment/opensandbox-server || true
cat /tmp/opensandbox-server-port-forward.log || true

- name: Upload Python test artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: execd-init-e2e-logs
path: |
/tmp/opensandbox-server-port-forward.log
/tmp/opensandbox-e2e-pods.yaml
/tmp/opensandbox-e2e-batchsandboxes.yaml
if-no-files-found: ignore
retention-days: 5

- name: Clean up Kind cluster
if: always()
run: |
kind delete cluster --name "${KIND_CLUSTER}" || true

publish-nightly-latest:
name: Publish latest (${{ matrix.component }} nightly)
needs: k8s-mini-e2e
needs: [k8s-mini-e2e, execd-init-e2e]
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
strategy:
Expand Down Expand Up @@ -179,21 +252,22 @@ jobs:
required:
name: Kubernetes Mini E2E CI
if: ${{ always() && github.event_name == 'pull_request' }}
needs: [changes, k8s-mini-e2e]
needs: [changes, k8s-mini-e2e, execd-init-e2e]
runs-on: ubuntu-latest
steps:
- name: Verify required jobs
env:
RELEVANT: ${{ needs.changes.outputs.relevant }}
CHANGES_RESULT: ${{ needs.changes.result }}
E2E_RESULT: ${{ needs.k8s-mini-e2e.result }}
EXECD_INIT_RESULT: ${{ needs.execd-init-e2e.result }}
run: |
if [[ "$CHANGES_RESULT" != "success" ]]; then
echo "Change detection failed: $CHANGES_RESULT"
exit 1
fi
if [[ "$RELEVANT" == "true" ]]; then
[[ "$E2E_RESULT" == "success" ]]
[[ "$E2E_RESULT" == "success" && "$EXECD_INIT_RESULT" == "success" ]]
else
[[ "$RELEVANT" == "false" && "$E2E_RESULT" == "skipped" ]]
[[ "$RELEVANT" == "false" && "$E2E_RESULT" == "skipped" && "$EXECD_INIT_RESULT" == "skipped" ]]
fi
5 changes: 5 additions & 0 deletions .github/workflows/kubernetes-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,11 @@ jobs:
run: |
make lint

- name: Lint Helm charts
working-directory: kubernetes
run: |
make helm-lint

- name: Build binary
working-directory: kubernetes
run: |
Expand Down
37 changes: 29 additions & 8 deletions .github/workflows/publish-helm-chart.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,17 @@ on:
- opensandbox
- opensandbox-node-agent
default: 'opensandbox-controller'
chart_version:
description: 'Chart version to release (without v prefix, e.g., 0.1.0)'
required: true
default: '0.1.0'
app_version:
description: 'App version (without v prefix, e.g., 0.1.0)'
required: true
default: '0.1.0'
push:
tags:
- 'helm/**' # Format: helm/<component>/<app_version>, e.g., helm/opensandbox-controller/0.1.0
- 'helm/**' # Format: helm/<component>/<chart_version>, e.g., helm/opensandbox-controller/0.1.0

jobs:
release-preflight:
Expand Down Expand Up @@ -63,12 +67,13 @@ jobs:
VERSION=${VERSION#v}

echo "component=$COMPONENT" >> $GITHUB_OUTPUT
echo "app_version=$VERSION" >> $GITHUB_OUTPUT
echo "chart_version=$VERSION" >> $GITHUB_OUTPUT
echo "release_tag=$TAG_PATH" >> $GITHUB_OUTPUT
else
echo "component=${{ inputs.component }}" >> $GITHUB_OUTPUT
echo "chart_version=${{ inputs.chart_version }}" >> $GITHUB_OUTPUT
echo "app_version=${{ inputs.app_version }}" >> $GITHUB_OUTPUT
echo "release_tag=helm/${{ inputs.component }}/${{ inputs.app_version }}" >> $GITHUB_OUTPUT
echo "release_tag=helm/${{ inputs.component }}/${{ inputs.chart_version }}" >> $GITHUB_OUTPUT
fi

- name: Verify release tag on origin
Expand Down Expand Up @@ -120,10 +125,18 @@ jobs:
run: |
CHART_PATH="${{ steps.chart_path.outputs.path }}"
CHART_VERSION=$(grep '^version:' $CHART_PATH/Chart.yaml | awk '{print $2}')
EXPECTED_CHART_VERSION="${{ steps.parse_tag.outputs.chart_version }}"

if [ "$CHART_VERSION" != "$EXPECTED_CHART_VERSION" ]; then
echo "::error::Chart.yaml version '$CHART_VERSION' does not match requested chart version '$EXPECTED_CHART_VERSION'."
exit 1
fi

echo "version=$CHART_VERSION" >> $GITHUB_OUTPUT
echo "Chart version: $CHART_VERSION"
echo "Verified chart version: $CHART_VERSION"

- name: Update Chart.yaml with app version
- name: Update Chart.yaml with app version for manual release
if: ${{ github.event_name == 'workflow_dispatch' }}
run: |
APP_VERSION="${{ steps.parse_tag.outputs.app_version }}"
CHART_PATH="${{ steps.chart_path.outputs.path }}"
Expand All @@ -134,6 +147,14 @@ jobs:
echo "Updated Chart.yaml:"
cat $CHART_PATH/Chart.yaml

- name: Get app version from Chart.yaml
id: app_version
run: |
CHART_PATH="${{ steps.chart_path.outputs.path }}"
APP_VERSION=$(grep '^appVersion:' $CHART_PATH/Chart.yaml | awk '{print $2}' | tr -d '"')
echo "version=$APP_VERSION" >> $GITHUB_OUTPUT
echo "App version: $APP_VERSION"

- name: Build dependencies (for opensandbox all-in-one chart)
if: ${{ steps.parse_tag.outputs.component == 'opensandbox' }}
run: |
Expand All @@ -160,12 +181,12 @@ jobs:
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.parse_tag.outputs.release_tag }}
name: Helm Chart ${{ steps.parse_tag.outputs.component }} ${{ steps.chart_version.outputs.version }} (App v${{ steps.parse_tag.outputs.app_version }})
name: Helm Chart ${{ steps.parse_tag.outputs.component }} ${{ steps.chart_version.outputs.version }} (App v${{ steps.app_version.outputs.version }})
body: |
## ${{ steps.parse_tag.outputs.component }} Helm Chart

**Chart Version:** ${{ steps.chart_version.outputs.version }}
**App Version:** ${{ steps.parse_tag.outputs.app_version }}
**App Version:** ${{ steps.app_version.outputs.version }}

### Installation

Expand Down Expand Up @@ -195,7 +216,7 @@ jobs:
### What's Changed

- Chart version: ${{ steps.chart_version.outputs.version }}
- App version: ${{ steps.parse_tag.outputs.app_version }}
- App version: ${{ steps.app_version.outputs.version }}
files: |
${{ steps.parse_tag.outputs.component }}-*.tgz
draft: false
Expand Down
Loading
Loading