Skip to content

E2E Workflow ​

The .github/workflows/e2e.yml workflow runs all three E2E test suites — Docker, Kubernetes, and systemd — as parallel GitHub Actions jobs. It triggers on pull requests when relevant source paths change, and on manual dispatch.

Trigger Configuration ​

The workflow uses a path-filtered pull_request trigger. It does not run on pushes to main: a pull_request run tests the merge result, so the suites have already run against the commit the merge produces. workflow_dispatch runs them against any branch on demand, unfiltered by path.

The filtered paths:

PathRationale
cmd/**CLI and entrypoint changes
internal/**Core agent logic
deploy/**Dockerfiles, systemd units, Kubernetes manifests
test/e2e/**E2E test scripts and fixtures
DockerfileRoot Dockerfile (if present)
.github/workflows/e2e.ymlSelf-trigger for workflow changes

Changes to docs/, README.md, .planwerk/, or other non-runtime files do not trigger the workflow.

Jobs ​

All three jobs run in parallel on ubuntu-latest with timeout-minutes: 30. No needs: dependencies exist between them.

docker-e2e ​

Runs the Docker Compose-based E2E test.

StepAction
Checkoutactions/checkout (pinned SHA)
Setup Goactions/setup-go with go-version: '1.26'
Run testsmake test-e2e-docker
Capture logsdocker compose logs (on failure)
Upload artifactdocker-e2e-logs (on failure)

kubernetes-e2e ​

Runs the kind-based Kubernetes E2E test.

StepAction
Checkoutactions/checkout (pinned SHA)
Setup Goactions/setup-go with go-version: '1.26'
Install kindgo install sigs.k8s.io/kind@v0.27.0
Run testsmake test-e2e-k8s
Capture logskubectl logs + kubectl describe (on failure)
Upload artifactkubernetes-e2e-logs (on failure)

systemd-e2e ​

Runs the systemd-in-Docker E2E test.

StepAction
Checkoutactions/checkout (pinned SHA)
Setup Goactions/setup-go with go-version: '1.26'
Run testsmake test-e2e-systemd
Capture logsdocker logs for both containers (on failure)
Upload artifactsystemd-e2e-logs (on failure)

Artifact Upload on Failure ​

Each job captures logs with if: failure() before uploading via actions/upload-artifact. Log capture uses || true to handle cases where the test script's trap handler has already cleaned up resources.

JobArtifact nameContents
docker-e2edocker-e2e-logsDocker Compose service logs
kubernetes-e2ekubernetes-e2e-logsplexd pod logs, mock-api logs, DaemonSet description, pod status
systemd-e2esystemd-e2e-logsmock-api container logs, systemd container logs

To download artifacts from a failed run, navigate to the workflow run in the Actions tab and find the artifacts listed at the bottom of the run summary page.

Action Versions ​

All actions use pinned SHAs matching the project convention:

ActionSHAVersion
actions/checkout34e114876b0b11c390a56381ad16ebd13914f8d5v4.3.1
actions/setup-go40f1582b2485089dde7abd97c1529aa768e1baffv5.6.0
actions/upload-artifactea165f8d65b6e75b540449e92b4886f43607fa02v4.6.2

Makefile Targets ​

TargetCommand
test-e2e-dockerbash test/e2e/docker/test.sh
test-e2e-k8sbash test/e2e/kubernetes/test.sh
test-e2e-systemdbash test/e2e/systemd/test.sh

See also ​