Skip to content

Docker E2E

Docker E2E #40

Workflow file for this run

name: Docker E2E
# Runs the docker-dependent end-to-end suite gated behind the
# `dockere2e` build tag (test/e2e/docker/* and test/e2e/e2e_test.go).
# These tests boot real docker compose stacks, assert on real OS state
# (port allocation, volume persistence, HTTP responses), and take
# 1-3 minutes each — too slow for the PR-blocking CI job.
#
# Triggers:
# - schedule: nightly at 06:00 UTC
# - workflow_dispatch: manual run from the Actions UI
# - pull_request labeled with "needs:docker-tests" — opt-in per PR
#
# This workflow is *not* required for PR merge. The PR-blocking
# checks live in ci.yml. If a regression slips through here, the
# nightly run catches it; the maintainer is expected to triage.
#
# Security note: the only ${{ }} substitutions used here are
# github.event_name (enum) and github.event.label.name (compared to
# a literal in an if:, never interpolated into a shell command). No
# command-injection surface.
on:
schedule:
- cron: '0 6 * * *' # 06:00 UTC daily
workflow_dispatch:
pull_request:
types: [ labeled ]
jobs:
dockere2e:
name: Docker E2E
# Skip the labeled-PR trigger unless the label actually matches.
# workflow_dispatch and schedule events have no label, so they
# always pass this guard.
if: github.event_name != 'pull_request' || github.event.label.name == 'needs:docker-tests'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
- name: Cache Go Modules
uses: actions/cache@v5
with:
path: |
~/go/pkg/mod
~/.cache/go-build
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Verify docker is available
run: |
docker version
docker compose version
- name: Run docker e2e tests
run: go test -tags dockere2e -timeout 20m ./test/e2e/...