Files
wehub-resource-sync e0e362d700
SDK Tests / SDK CI (push) Blocked by required conditions
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
SDK Tests / Python SDK Tests (sandbox) (push) Waiting to run
SDK Tests / CLI Quality (push) Waiting to run
SDK Tests / CLI Tests (push) Waiting to run
SDK Tests / Python SDK Quality (code-interpreter) (push) Waiting to run
SDK Tests / Python SDK Quality (sandbox) (push) Waiting to run
SDK Tests / Python SDK Tests (code-interpreter) (push) Waiting to run
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Go SDK Quality And Tests (push) Waiting to run
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:33 +08:00

148 lines
4.4 KiB
Go

// Copyright 2026 Alibaba Group Holding Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Package isolation provides per-execution namespace isolation via bubblewrap.
package isolation
import "os/exec"
// Profile presets default isolation settings.
type Profile string
const (
ProfileStrict Profile = "strict"
ProfileBalanced Profile = "balanced"
)
// Valid reports whether p is a known profile name.
func (p Profile) Valid() bool {
return p == ProfileStrict || p == ProfileBalanced
}
// WorkspaceMode controls how the workspace directory is mounted into the
// isolated namespace.
type WorkspaceMode string
const (
WorkspaceRW WorkspaceMode = "rw"
WorkspaceOverlay WorkspaceMode = "overlay"
WorkspaceRO WorkspaceMode = "ro"
)
// Valid reports whether m is a known workspace mode.
func (m WorkspaceMode) Valid() bool {
return m == WorkspaceRW || m == WorkspaceOverlay || m == WorkspaceRO
}
// EnvMode controls how host environment variables are passed through to the
// isolated namespace.
type EnvMode string
const (
EnvModeDeny EnvMode = "deny"
EnvModeAllow EnvMode = "allow"
)
// Valid reports whether m is a known env passthrough mode.
func (m EnvMode) Valid() bool {
return m == EnvModeDeny || m == EnvModeAllow
}
// UidMode controls how user identity is established inside the namespace.
type UidMode string
const (
// UidModeSetpriv uses setpriv(1) after bwrap to drop privileges via
// real setuid/setgid. Requires CAP_SETUID/CAP_SETGID or root.
// This is the default when UidMode is empty.
UidModeSetpriv UidMode = "setpriv"
// UidModeUserns creates a user namespace (--unshare-user) and maps the
// desired uid/gid inside it via --uid/--gid. Also passes
// --disable-userns to prevent nested user namespace creation.
// Does not require elevated privileges.
UidModeUserns UidMode = "userns"
)
// Valid reports whether m is a known uid mode.
func (m UidMode) Valid() bool {
return m == UidModeSetpriv || m == UidModeUserns
}
// Structs
// WorkspaceSpec describes a workspace directory and how it is mounted.
type WorkspaceSpec struct {
Path string
Mode WorkspaceMode
}
// EnvSpec controls environment variable passthrough into the namespace.
type EnvSpec struct {
Mode EnvMode
Keys []string // allowlist (mode=allow) or denylist (mode=deny)
}
// BindMount describes an additional host path bind-mounted into the namespace
// with an explicit source-to-destination mapping. Unlike WrapOptions.ExtraWritable
// (which always mounts Source==Dest read-write), a BindMount may map a distinct
// destination and be mounted read-only.
type BindMount struct {
Source string // host path (required)
Dest string // mount destination; defaults to Source when empty
ReadOnly bool // true → --ro-bind; false → --bind
}
// Capabilities describes what the isolator can and cannot do.
type Capabilities struct {
Available bool
Isolator string
Version string
Profiles []Profile
AllowedWorkspaces []string
AllowedExtraWritable []string
ShareNetOverridable bool
CommitSupported bool
DiffSupported bool
SeccompProfileSHA256 string
PersistAvailable bool
PersistMaxBytesDefault int64
PersistMaxBytesLimit int64
PersistRetainDefault int64 // seconds
}
// WrapOptions configures a single isolated execution.
type WrapOptions struct {
Profile Profile
Workspace WorkspaceSpec
ExtraWritable []string
Binds []BindMount
ShareNet bool
EnvPassthrough EnvSpec
Uid, Gid *uint32
UidMode UidMode // "" or "setpriv" → setpriv; "userns" → user namespace
UpperDir string // empty when upper is on tmpfs (persist disabled)
WorkDir string
}
// Interface
// Isolator wraps an *exec.Cmd in a namespace-isolated execution environment.
type Isolator interface {
Name() string
Available() bool
Capabilities() Capabilities
Wrap(cmd *exec.Cmd, opts WrapOptions) error
}