Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
15b5819
e2e: lower kind atelet snapshot upload delay and update revert tests …
msau42 Oct 26, 2026
e0350cd
atelet: emit a Warning Event on worker pods when syncing sandbox runt…
shrutiyam-glitch Oct 27, 2026
551dd54
WorkerPools with similar long names no longer share a NetworkPolicy (…
yufan-su Oct 27, 2026
28520c0
Generate the actor identity CA with ECDSA P-256 so external relying p…
destijl Oct 27, 2026
006f6dc
Releases publish the Kubernetes Secrets credential provider image (#3…
MushuEE Oct 27, 2026
a4f92ae
docs: require DCO sign-off instead of the Google CLA (#3237)
BenTheElder Oct 27, 2026
451b030
Fix flake: retry adding the kill container on a conflict (#3183)
HavenXia Oct 27, 2026
b020240
docs: fix the README note on enabling beta APIs (#3266)
HavenXia Oct 27, 2026
635c521
ateapi: deny streaming RPCs that have no authorization rule (#3262)
SHRUTI6991 Oct 27, 2026
a11540a
Rename `SnapshotStorage.status` to `state` (#3215)
laoj2 Oct 27, 2026
c57124f
actornet: pin the sysctls a sandbox namespace inherits from the node …
BenTheElder Oct 27, 2026
4b40b2a
benchmarking/nighthawk-egress: create namespaces in both deploy scrip…
ygao-g Oct 27, 2026
1f31ae0
An actor's new egress connections no longer fail with 403 an hour aft…
chw120 Oct 27, 2026
4150e4b
microvm: forward sysctls and lift the guest's privileged-port limit t…
dims Oct 27, 2026
6a67f43
Update agentgateway version to fix drift and CI (#2962)
keithmattix Oct 27, 2026
b5ae011
Document ReportActorCrashed in the WorkerService authz table (#3324)
SHRUTI6991 Oct 27, 2026
8f664b5
MicroVM guests get their whole memory limit, and placement books each…
BenTheElder Oct 27, 2026
a54dc8d
Releases publish the envoy-dataplane image (#3252)
MushuEE Oct 27, 2026
7e6476c
atelet, ateworker: finish a checkpoint retry after atelet restarts (#…
chw120 Oct 27, 2026
2e931ec
Rename --cordon-control-plane to --cordon-system-infra-components and…
haiyanmeng Oct 27, 2026
b5d7201
ate-setup: separate e2e kustomize component from kind overlay (#3318)
msau42 Oct 27, 2026
c093a40
Add kubectl ate proxy actor command. (#3191)
juli4n Oct 28, 2026
6aa6a75
Update gVisor to release 20261026.0 (#3364)
nybidari Oct 28, 2026
006b0af
Update a deleting tag returns FAILED_PRECONDITION (#3340)
laoj2 Oct 28, 2026
7a19374
e2e: test RevertActor across multiple durable snapshot generations (#…
nybidari Oct 28, 2026
67c6a6b
[bugbash] hack/teardown.sh: add --cluster-scoped to tear down one clu…
HavenXia Oct 28, 2026
f20af35
benchmarking: what to set and watch before a dense run (#2499)
dims Oct 28, 2026
6d7b3f4
Assert HTTP/2 in egress CONNECT access log and reduce /mux concurrenc…
bochengchu Oct 28, 2026
8f02374
The GCP Secret Manager credential provider moved to agent-substrate-p…
BenTheElder Oct 28, 2026
a8ad91b
Add full name of sfunkenhauser to MAINTAINERS.md (#3384)
sfunkenhauser Oct 28, 2026
ed3f2e4
UpdateActor rejects Actors marked for deletion (#3341)
laoj2 Oct 28, 2026
534fe7b
docs: add extensibility guide for gateways (#3317)
destijl Oct 28, 2026
38874ce
CreateActor fails if [golden] tag is marked for deletion (#3382)
laoj2 Oct 28, 2026
5510300
doc: add details on how a DNS denial from egress policy looks inside …
yufan-su Oct 28, 2026
34491cc
Add documentation for SLOs and alerting (#2476)
adrianludwin Oct 28, 2026
45ab64d
The template reconciler skips templates marked for deletion (#3342)
laoj2 Oct 28, 2026
e8cdf13
Suspending actors no longer OOM-kills tight worker pods (#3353)
BenTheElder Oct 28, 2026
cae252a
AGENTS.md: add the version skew rules (#3151)
HavenXia Oct 28, 2026
475f49b
ateapi: carry the golden actor's crash message into the template stat…
dims Oct 28, 2026
2f1be4b
benchmarking: remove default ATE_ENV_IMAGE and stop deploying ate-env…
sairajp-rewind Oct 28, 2026
e641e6b
Delete hack/install-ate.sh and hack/install-ate-kind.sh (#3354)
HavenXia Oct 28, 2026
893a458
Document running the ate-api-server cold resume tests from a workstat…
haiyanmeng Oct 28, 2026
34cce1e
ateworker: reuse a completed checkpoint only on the same boot (#3213)
chw120 Oct 28, 2026
9a4cb2c
atelet: keep the worker's Unavailable when a checkpoint fails (#3123)
aditya-shantanu Oct 28, 2026
ea4018f
atelet: clear node-local caches after a node reboot (#3376)
igooch Oct 29, 2026
d86746d
Reject snapshotConfig.storageLocation without its preview gate (#3357)
Sneha-at Oct 29, 2026
eaf0e85
ate-api-server's --egress-gateway-spiffe-id is repeatable, and ate-se…
thompsonmax Oct 29, 2026
c757792
Add Hugo Docsite (#1974)
moficodes Oct 29, 2026
f315318
Enable runsc core tagging when supported by the kernel (#2887)
fvoznika Oct 29, 2026
de4c5d9
Allow the egress gateway to use more than one credential provider (#3…
thompsonmax Oct 29, 2026
5b80db3
site: align footer with CNCF website guidelines and update navbar Git…
moficodes Oct 29, 2026
7c82eb3
objectstore-plugin: move the credential exchange's actor checks into …
aramase Oct 29, 2026
89475d5
A microVM actor using more host memory than it booked no longer takes…
BenTheElder Oct 29, 2026
7d6a102
Merge upstream runtime and documentation updates
EItanya Oct 29, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ body:
label: Steps to Reproduce
description: How can the issue be reproduced? Provide commands, scripts, or manifests (e.g., ActorTemplate).
placeholder: |
1. Deploy Substrate with `hack/install-ate-kind.sh ...`
1. Deploy Substrate with `go run ./cmd/ate-setup --kind ...`
2. Apply manifest `kubectl apply -f ...`
3. Run command `...`
4. See error
Expand Down
6 changes: 3 additions & 3 deletions .github/SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ include:

## What Counts as a Vulnerability

See the [Security Guide](../docs/security.md) and
[Threat Model](../docs/threat-model.md) for the security architecture, trust
See the [Security Guide](../docs/security/security.md) and
[Threat Model](../docs/security/threat-model.md) for the security architecture, trust
boundaries, and assumptions this section is based on.

In scope: the Agent Substrate control plane (`ateapi`, `atecontroller`,
Expand Down Expand Up @@ -81,7 +81,7 @@ from most to least severe:
- Sample applications under `demos/` and load-testing harnesses under
`benchmarking/`.
- Documented scope boundaries and future capabilities listed in
[docs/security.md](../docs/security.md) at the time of your report. If you are
[docs/security/security.md](../docs/security/security.md) at the time of your report. If you are
unsure whether a finding is covered by a documented limitation, report it
privately anyway and let a maintainer make the call.

Expand Down
4 changes: 2 additions & 2 deletions .github/scripts/release/ghcr-login.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.

# Logs docker in to ghcr.io as GITHUB_ACTOR with the token in TOKEN. ko and
# ate-setup's registry checks read the credentials docker login stores.
# Logs docker in to ghcr.io as GITHUB_ACTOR with the token in TOKEN. ko, buildx,
# and ate-setup's registry checks read the credentials docker login stores.
#
# GITHUB_ACTOR=<user> TOKEN=<token> .github/scripts/release/ghcr-login.sh
#
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/govulncheck.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ jobs:
# The root module, then each module kept apart from it.
work-dir:
- .
- internal/plugins/gcp-secret-manager
steps:
- id: govulncheck
uses: golang/govulncheck-action@032d45514ae346b1db93c04b0c90b841c370344f # v1.1.0
Expand Down
20 changes: 11 additions & 9 deletions .github/workflows/helm-e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,12 @@ jobs:
run: helm upgrade --install substrate-crds charts/substrate-crds
- name: Bootstrap mTLS authorities
run: |
hack/install-ate-kind.sh create podcertificate-controller-cas
hack/install-ate-kind.sh create jwt-authority-pool
hack/install-ate-kind.sh create actor-id-ca-pool
hack/install-ate-kind.sh create actor-id-ca-certs
hack/install-ate-kind.sh create api-authentication-config
hack/install-ate-kind.sh create egress-mitm-ca-pool
go run ./cmd/ate-setup --kind create podcertificate-controller-cas
go run ./cmd/ate-setup --kind create jwt-authority-pool
go run ./cmd/ate-setup --kind create actor-id-ca-pool
go run ./cmd/ate-setup --kind create actor-id-ca-certs
go run ./cmd/ate-setup --kind create api-authentication-config
go run ./cmd/ate-setup --kind create egress-mitm-ca-pool
- name: Install certificate controller
run: |
helm upgrade --install substrate-podcert charts/substrate-podcert \
Expand All @@ -100,24 +100,26 @@ jobs:
--set image.registry=localhost:5001 \
--set image.tag=helm-e2e \
--set 'preview[0]=ALL' \
--set 'atenetRouter.ingressAllowedSPIFFEIDs[0]=spiffe://cluster.local/ns/ate-e2e-router-client/sa/router-client' \
--set 'atelet.extraArgs[0]=--localhost-registry-replacement=kind-registry:5000' \
--set 'atelet.extraArgs[1]=--snapshot-upload-delay=2s' \
--set otel.endpoint=http://opentelemetry-collector.otel-system.svc:4317 \
--wait --timeout=10m
- name: Enable NFS
run: |
sudo modprobe nfs || true
sudo modprobe nfsd || true
- name: Install CSI NFS driver
run: hack/install-ate-kind.sh setup csi nfs
run: go run ./cmd/ate-setup --kind setup csi nfs
- name: Deploy micro-VM counter demo
# The deploy creates the substrate ActorTemplate and waits for its golden
# snapshot internally; the ActorTemplate CRD (and its Ready condition)
# no longer exists to wait on.
run: hack/run-microvm-demo-kind.sh --skip-control-plane
- name: Deploy gVisor counter demo
run: hack/install-ate-kind.sh deploy demo counter
run: go run ./cmd/ate-setup --kind deploy demo counter
- name: Deploy egress demo
run: hack/install-ate-kind.sh deploy demo egress
run: go run ./cmd/ate-setup --kind deploy demo egress
- name: Trust local E2E TLS origins
run: hack/setup-e2e-egress-tls-kind.sh
- name: Run E2E tests (gVisor)
Expand Down
56 changes: 8 additions & 48 deletions .github/workflows/pr-workflow.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -85,22 +85,6 @@ jobs:
--jsonfile "${ARTIFACTS}/junittool.json" \
--format pkgname-and-test-fails --format-hide-empty-pkg \
-- -race ./...
# Kept apart from the root module so it can move to its own repository.
- name: gcp-secret-manager credential provider tests
working-directory: internal/plugins/gcp-secret-manager
run: |
go -C ../../../tools/junittool run . register "${ARTIFACTS}/gcp-secret-manager.xml"
../../../hack/run-tool.sh gotestsum --junitfile "${ARTIFACTS}/gcp-secret-manager.xml" \
--jsonfile "${ARTIFACTS}/gcp-secret-manager.json" \
--format pkgname-and-test-fails --format-hide-empty-pkg \
-- -race ./...
# The root verifiers stop at the module's go.mod, so it gets its own run:
# gofmt, go vet and the tidy check, then golangci-lint with the root config.
- name: gcp-secret-manager credential provider verify
working-directory: internal/plugins/gcp-secret-manager
run: |
make verify
../../../hack/run-tool.sh golangci-lint run --config ../../../.golangci.yaml ./...
- name: Cache cargo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
Expand Down Expand Up @@ -173,6 +157,9 @@ jobs:
preview: ['off', 'on']
env:
E2E_ATENET_DATAPLANE: ${{ matrix.dataplane }}
# Apply the e2e test component (short atelet snapshot delays) across the
# initial install and the control plane redeploy in run-microvm-demo-kind.sh.
ATE_INSTALL_E2E_TUNING: "true"
# The installer requires a credential provider selection, and deploys the
# bundled Kubernetes Secrets provider with the control plane. Job-wide
# because every ate-setup invocation reads it, including the control
Expand Down Expand Up @@ -262,55 +249,28 @@ jobs:
# gateway. ATE_PREVIEW above selects the preview features.
env:
ATE_ATENET_DATAPLANE: ${{ matrix.dataplane }}
NO_DEV_ENV: "true"
KO_DOCKER_REPO: "localhost:5001"
ATE_INSTALL_KIND: "true"
BUCKET_NAME: "ate-snapshot"
KIND_CLUSTER_NAME: "kind"
KUBECTL_CONTEXT: "kind-kind"
run: go run ./cmd/ate-setup deploy ate-system --rollout-timeout=300s
run: go run ./cmd/ate-setup --kind deploy ate-system --rollout-timeout=300s
- name: Enable NFS
# Load NFS kernel modules so in-cluster NFS server and CSI driver can run.
run: |
sudo modprobe nfs || true
sudo modprobe nfsd || true
- name: Install CSI NFS driver
env:
NO_DEV_ENV: "true"
KO_DOCKER_REPO: "localhost:5001"
ATE_INSTALL_KIND: "true"
BUCKET_NAME: "ate-snapshot"
KIND_CLUSTER_NAME: "kind"
KUBECTL_CONTEXT: "kind-kind"
run: go run ./cmd/ate-setup setup csi nfs
run: go run ./cmd/ate-setup --kind setup csi nfs
- name: Deploy micro-VM counter demo
# Stages the (cached) assets into the cluster's rustfs and deploys the
# counter-microvm demo onto the control plane installed above.
run: hack/run-microvm-demo-kind.sh --skip-control-plane
- name: Deploy gVisor counter demo
env:
NO_DEV_ENV: "true"
KO_DOCKER_REPO: "localhost:5001"
ATE_INSTALL_KIND: "true"
BUCKET_NAME: "ate-snapshot"
KIND_CLUSTER_NAME: "kind"
KUBECTL_CONTEXT: "kind-kind"
run: go run ./cmd/ate-setup deploy demo counter
run: go run ./cmd/ate-setup --kind deploy demo counter
- name: Deploy egress demos
# TestActorEgress in the networking suite builds its Actor from the egress
# ActorTemplate for the class under test, so both fixtures have to exist
# before their respective lane runs. The demo's actors trust the CA the
# gateway mints its leaves from.
env:
NO_DEV_ENV: "true"
KO_DOCKER_REPO: "localhost:5001"
ATE_INSTALL_KIND: "true"
BUCKET_NAME: "ate-snapshot"
KIND_CLUSTER_NAME: "kind"
KUBECTL_CONTEXT: "kind-kind"
run: |
go run ./cmd/ate-setup deploy demo egress
go run ./cmd/ate-setup deploy demo egress-microvm
go run ./cmd/ate-setup --kind deploy demo egress
go run ./cmd/ate-setup --kind deploy demo egress-microvm
- name: Trust local TLS origins in egress gateway
run: hack/setup-e2e-egress-tls-kind.sh
# scale the idle sandbox class's demo pools to zero so each lane has the node
Expand Down
23 changes: 20 additions & 3 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,15 @@ jobs:
# These jobs can write packages or releases, so they restore no cache
# that another workflow could have written.
cache: false
# Every release image is built with ko, which cross-compiles Go for arm64
# without emulation, so the job needs neither QEMU nor buildx. ko and
# ate-setup's registry checks read the credentials docker login stores.
# ko cross-compiles Go for arm64, and the envoy-dataplane Dockerfile
# cross-compiles its Rust module, so the job needs no QEMU. buildx builds
# envoy-dataplane for both platforms. ko, buildx, and ate-setup's registry
# checks read the credentials docker login stores. BuildKit is pinned by
# digest because it builds a published image with the ghcr.io login.
- name: Set up buildx
uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
with:
driver-opts: image=moby/buildkit:v0.33.1@sha256:cec9f139f45e93c5c69c60f8b07cfad9f43f4ef6b6a6cd917527fea5ff2e3dea
- name: Log in to ghcr.io
env:
TOKEN: ${{ github.token }}
Expand Down Expand Up @@ -129,6 +135,17 @@ jobs:
# These jobs can write packages or releases, so they restore no cache
# that another workflow could have written.
cache: false
# The same BuildKit as the images job. Host networking and plain HTTP let
# buildx push to the registry service.
- name: Set up buildx
uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
with:
driver-opts: |
image=moby/buildkit:v0.33.1@sha256:cec9f139f45e93c5c69c60f8b07cfad9f43f4ef6b6a6cd917527fea5ff2e3dea
network=host
buildkitd-config-inline: |
[registry."localhost:5000"]
http = true
- name: Publish images
run: go run ./cmd/ate-setup publish release-images
draft:
Expand Down
120 changes: 120 additions & 0 deletions .github/workflows/site.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# Copyright 2026 Google LLC
#
# 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.

# Builds the website in site/ on every pull request that could change it, and
# publishes it to GitHub Pages from main.
name: site
on:
pull_request:
paths:
- 'site/**'
- 'docs/**'
- 'demos/*/README.md'
- 'tools/site-content/**'
- 'tools/site-release-data/**'
- 'hack/site.sh'
- 'hack/test-site-templates.sh'
- '.github/workflows/site.yaml'
push:
branches: [main]
paths:
- 'site/**'
- 'docs/**'
- 'demos/*/README.md'
- 'tools/site-content/**'
- 'tools/site-release-data/**'
- 'hack/site.sh'
- 'hack/test-site-templates.sh'
- '.github/workflows/site.yaml'
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
env:
# Keep in sync with module.hugoVersion.min in site/hugo.yaml.
HUGO_VERSION: 0.163.3
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0
with:
# site-release-data needs the latest release tag and its history.
fetch-depth: 0
- name: Setup Go
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
# The root module, for tools/site-release-data. Hugo fetches Docsy
# with the same Go.
go-version-file: 'go.mod'
cache: false
- name: Setup Node
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 22
cache: npm
cache-dependency-path: site/package-lock.json
- name: Install Hugo
run: |
base="https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}"
tarball="hugo_extended_${HUGO_VERSION}_linux-amd64.tar.gz"
cd "${RUNNER_TEMP}"
curl -sSfLO "${base}/${tarball}"
curl -sSfLO "${base}/hugo_${HUGO_VERSION}_checksums.txt"
grep " ${tarball}\$" "hugo_${HUGO_VERSION}_checksums.txt" | sha256sum -c -
mkdir -p hugo && tar -xzf "${tarball}" -C hugo hugo
echo "${RUNNER_TEMP}/hugo" >> "${GITHUB_PATH}"
- name: Install PostCSS
working-directory: site
run: npm ci
- name: Generate site content
run: hack/site.sh content
- name: Generate release data
run: hack/site.sh release-data
- name: Test templates
if: github.event_name == 'pull_request'
run: hack/test-site-templates.sh
- name: Configure Pages
id: pages
if: github.event_name != 'pull_request'
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
- name: Build
working-directory: site
env:
BASE_URL: ${{ steps.pages.outputs.base_url }}
run: hugo build --environment production --minify ${BASE_URL:+--baseURL "${BASE_URL}/"}
- name: Upload artifact
if: github.event_name != 'pull_request'
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
with:
path: site/public
deploy:
if: github.event_name != 'pull_request'
needs: build
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1
Loading
Loading