Skip to content

ci: run the end-to-end suite on the Docker runtime - #91

Merged
reachjalil merged 6 commits into
pre-releasefrom
ci/e2e-on-docker-runtime
Nov 11, 2026
Merged

reachjalil merged 6 commits into
pre-releasefrom
ci/e2e-on-docker-runtime

Conversation

@reachjalil

@reachjalil reachjalil commented Nov 11, 2026 •

Copy link
Copy Markdown
Member

What is this about?

CI runs the end-to-end suite on every pull request, and the CI approval waits for it.

It was stacked on #90, which is merged; this branch now holds pre-release and differs from it only by the end-to-end job and its docs.

What problem does it solve?

test/e2e drives the real stack through the public API: Postgres, differently-server and an OpenSandbox 1.2.0 server whose sandboxes are real containers. It had only ever been run by hand, and not at all for v0.1.0-alpha.3; CI compiled it but never ran it. A change could break the real stack and still be approved.

How is it implemented?

  • New CI job end-to-end (docker runtime): make e2e-prepare e2e-up e2e on a GitHub-hosted runner, the stack's logs on failure, and make e2e-down always. 30-minute limit.
  • The approve when CI passes job now needs it.
  • make e2e-prepare also pulls python:3.12-slim, which two tests boot, so a slow first pull does not count against a sandbox's start.
  • test/e2e/README.md, docs/maintaining.md and CHANGELOG.md say CI runs the suite and record the first run.

How was it tested?

By this pull request's own runs, on Ubuntu 26.04 x86_64:

Run Result Suite time Job time
1 16 passed, 2 skipped 121 s 201 s
2 16 passed, 2 skipped 126 s about the same
3 16 passed, 2 skipped, with the job in the approval's needs about the same
4 this head, after merging pre-release with #90 see the checks
  • The two skips are by design on this stack: TestDesktopStreams needs a desktop image, TestIdlePauseAndWakeThroughPortURL a microVM pool.
  • This is the first run of the suite on the code of v0.1.0-alpha.3 (the reconciler, TTL backstop, scheduler and audit changes included) and the first on x86_64 with the Docker runtime. It found no failure.
  • Not covered: the Kubernetes and Fast Sandbox runtimes, which still need a cluster and are run by hand. Two runs are a small sample for flakiness; if the job proves flaky, take e2e back out of the approval's needs.
  • Not run locally: Docker was not available on the machine used.

Checklist

  • make verify passes (no Go code changed; npm run build in site/ passes)
  • Commits are signed off (git commit -s)
  • API changes are reflected in api/openapi.yaml, both SDKs and docs/feature-parity.md (no API change)
  • User-visible behaviour is documented

🤖 Generated with Claude Code

reachjalil and others added 2 commits November 10, 2026 16:39
The acceptance scenarios in internal/server ran only on the in-memory store,
which production does not use. Postgres was covered by the nine cases of the
store conformance suite.

The server test harness now takes its store from one place: the memory store
by default, and an empty Postgres schema when DIFFERENTLY_TEST_POSTGRES_URL
is set. The new postgrestest package creates that schema, migrates it and
drops it when the test ends; the conformance suite uses it too, instead of
dropping tables between subtests (it missed the secrets table).

`make test-postgres` runs both packages against Postgres, one after the other
because scheduler leadership is one advisory lock per database, and the CI
job that already starts Postgres calls it. With
DIFFERENTLY_TEST_POSTGRES_REQUIRED set, a missing database fails the run
instead of skipping it.

The whole server suite passes on Postgres (three runs in a row, with -race).
It exposed no defect.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: Jalil <reachjalil@gmail.com>
The end-to-end suite (test/e2e) drives the real stack through the public
API: Postgres, differently-server and an OpenSandbox server whose sandboxes
are real containers. It had only ever been run by hand; CI compiled it but
never ran it.

A new job builds the server image, starts the compose stack, runs the suite
and prints the stack's logs if anything fails. It is not yet one of the jobs
the approval waits for.

`make e2e-prepare` also pulls python:3.12-slim, which two tests boot, so a
slow first pull does not count against a sandbox's start.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: Jalil <reachjalil@gmail.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI passed at df1f8dc.

reachjalil and others added 2 commits November 10, 2026 16:45
The verification ladder, the e2e README and the changelog said the suite is
run by hand. They now name the CI job, and the e2e README records its first
run: 16 passed and 2 skipped on a GitHub-hosted x86_64 runner.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: Jalil <reachjalil@gmail.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI passed at d9ed149.

The job passed on two runs in a row on this pull request (16 passed, 2
skipped, about two minutes each), so it joins the jobs the CI approval
needs. A change that breaks the real stack no longer gets approved.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Signed-off-by: Jalil <reachjalil@gmail.com>
@reachjalil
reachjalil marked this pull request as ready for review November 11, 2026 00:50

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI passed at 296aa93.

…er-runtime

Signed-off-by: Jalil <reachjalil@gmail.com>

# Conflicts:
#	CHANGELOG.md

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI passed at 8debc21.

@reachjalil
reachjalil merged commit 6fa8b3e into pre-release Nov 11, 2026
20 checks passed
@reachjalil
reachjalil deleted the ci/e2e-on-docker-runtime branch November 11, 2026 01:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant