Skip to content

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 31 May 16:53
v0.3.0
b1164e9

sluice is a sandboxed, firewalled, non-root container for any project: drop a sluice.config.sh in a directory and run sluice. This release adds a signed base image, fixes a Linux egress bug for rotating-CDN hosts, and verifies rootless Podman.

Added

  • Cosign-signed base image. The generic sandbox core (proxy, firewall, dnsmasq, non-root user) is now published to GHCR as a multi-arch (amd64 + arm64) image, keyless-signed with cosign (GitHub OIDC). Opt a project into building FROM it with SLUICE_BASE_IMAGE=ghcr.io/pyronewbic/sluice-base:0.3.0 instead of rebuilding the core locally — sluice verifies the signature when cosign is installed (SLUICE_REQUIRE_SIGNED=1 to make a missing/failed signature fatal). The image carries no private key: the squid splice cert is generated per-container at runtime. Local-from-core stays the default this release.

Fixed

  • Egress to rotating-CDN hosts on Linux. HTTPS to allowlisted hosts on large rotating IP pools (Google/Akamai/Fastly — e.g. proxy.golang.org, static.crates.io) could fail with an opaque TLS error. squid's transparent-intercept Host-forgery check was rejecting a legitimate host when the client and squid resolved its name to different pool IPs milliseconds apart. A small in-box dnsmasq cache now pins one IP set per session, so both agree and the connection splices through. (Surfaced on Linux only; macOS Docker Desktop's resolver masked it.)
  • Eliminated rm: Permission denied cleanup noise in the test harnesses (chown the mount back to the host uid before teardown).

Changed

  • The non-root sandbox user is now sluice (was node; uid unchanged at 1000). A /home/node/home/sluice symlink keeps existing SLUICE_MOUNTS working. Node + npm remain in the base as the agent runtime.
  • Rootless Podman verified. The acceptance harness now probes rootless Podman in CI; the full egress matrix passes in an unprivileged user namespace, so the route_localnet/disable_ipv6 sysctls and in-netns iptables the proxy needs work rootless too (no rootful requirement).
  • Docs: sluice doctor, the at-exit visible-egress hint, the --HEAD dev stream, and running any language via SLUICE_EXTRA_PKGS + SLUICE_RUN_CMD.

Full changelog: v0.2.0...v0.3.0