Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions .github/workflows/test-e2e-ddev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@ name: test-e2e-ddev
# ddev project lifecycle — too heavy per PR, but master is the staging
# area for the 'stable' release mirror and must be fully green before a
# release is cut (scripts/release.sh includes these runs in its CI gate).
# Push runs use the defaults (no camino site tier, latest ddev); the
# inputs only apply to manual dispatch. CI rebuilds the golden image warm
# every run (the cache is a local-workspace concept, design doc §6 R6).
# A weekly schedule (Mon 03:27 UTC, issue #78) re-runs the suite on
# master even when nothing was pushed — the design doc's planned
# burn-in (§8/R6): the suite installs the LATEST ddev and rebuilds the
# golden image warm from scratch, catching ddev/opencode release drift
# between pushes. Push and scheduled runs use the defaults (no camino
# site tier, latest ddev); the inputs only apply to manual dispatch.
# CI rebuilds the golden image warm every run (the cache is a
# local-workspace concept, design doc §6 R6).
on:
push:
branches:
Expand All @@ -25,12 +30,20 @@ on:
required: false
default: ''
type: string
schedule:
- cron: '27 3 * * 1' # Mondays 03:27 UTC (after test-e2e's verdict)

permissions:
contents: read

# Cancel a superseded run when a new commit lands on the same ref; also
# dedupes if two events somehow fire for the same push. Scheduled runs
# get their own group: a weekly run must never cancel an in-flight
# push run of the same ref (a cancelled run on a master sha reads as
# red to scripts/release.sh's CI gate) — and conversely stays alive to
# deliver its drift verdict even when master moves under it.
concurrency:
group: e2e-ddev-${{ github.ref }}
group: e2e-ddev-${{ github.event_name == 'schedule' && 'weekly' || github.ref }}
cancel-in-progress: true

jobs:
Expand Down
16 changes: 14 additions & 2 deletions .github/workflows/test-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ name: test-e2e
# staging area for the 'stable' release mirror — it must be green before
# a release is cut (scripts/release.sh checks exactly this run). A
# branch push with an open PR fires only `pull_request` — no double-run.
# A weekly schedule (Mon 03:17 UTC, issue #78) re-runs both suites on
# master even when nothing was pushed: the suites resolve the LATEST
# opencode release at runtime, so a new opencode version can break a
# "green" master between pushes — the cron catches that drift before a
# release is cut. Scheduled runs use the defaults (E2E_STRICT=0, like
# push runs; the strict input only applies to manual dispatch).
on:
workflow_dispatch:
inputs:
Expand All @@ -21,6 +27,8 @@ on:
push:
branches:
- master
schedule:
- cron: '17 3 * * 1' # Mondays 03:17 UTC (after test-unit's verdict)

# Least-privilege token (CodeQL actions/missing-workflow-permissions):
# read-only access is enough (checkout + cache only — no artifacts,
Expand All @@ -29,9 +37,13 @@ permissions:
contents: read

# Cancel a superseded run when a new commit lands on the same ref; also
# dedupes if two events somehow fire for the same push.
# dedupes if two events somehow fire for the same push. Scheduled runs
# get their own group: a weekly run must never cancel an in-flight
# push/PR run of the same ref (a cancelled run on a master sha reads as
# red to scripts/release.sh's CI gate) — and conversely stays alive to
# deliver its drift verdict even when master moves under it.
concurrency:
group: e2e-${{ github.ref }}
group: e2e-${{ github.event_name == 'schedule' && 'weekly' || github.ref }}
cancel-in-progress: true

jobs:
Expand Down
14 changes: 12 additions & 2 deletions .github/workflows/test-unit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ name: test-unit
# 'stable' release mirror — it must be green before a release is cut
# (scripts/release.sh checks exactly this run). A branch push with an
# open PR fires only `pull_request`, avoiding the classic double-run.
# A weekly schedule (Mon 03:07 UTC, issue #78) re-runs the suite on
# master even when nothing was pushed — runner image updates
# (ubuntu-latest) and environment drift can break a "green" master
# between releases. Scheduled runs always target the default branch.
on:
pull_request:
branches:
Expand All @@ -15,16 +19,22 @@ on:
branches:
- master
workflow_dispatch:
schedule:
- cron: '7 3 * * 1' # Mondays 03:07 UTC (off-peak, off the hour)

# Least-privilege token (CodeQL actions/missing-workflow-permissions):
# read-only access to the repository is all this workflow needs.
permissions:
contents: read

# Cancel a superseded run when a new commit lands on the same ref; also
# dedupes if two events somehow fire for the same push.
# dedupes if two events somehow fire for the same push. Scheduled runs
# get their own group: a weekly run must never cancel an in-flight
# push/PR run of the same ref (a cancelled run on a master sha reads as
# red to scripts/release.sh's CI gate) — and conversely stays alive to
# deliver its drift verdict even when master moves under it.
concurrency:
group: tests-${{ github.ref }}
group: tests-${{ github.event_name == 'schedule' && 'weekly' || github.ref }}
cancel-in-progress: true

jobs:
Expand Down
6 changes: 6 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ make e2e-rootless # docker-rootless daemon suite (needs systemd-in-containe
- When adding a new executable under `files/` or a new test script under
`tests/`, add it to the `chmod +x` list in **both**
`.github/workflows/test-unit.yml` and `.github/workflows/test-e2e.yml`.
- Besides PRs and `master` pushes, CI runs a **weekly scheduled** burn-in
on `master` (Mondays ~03:00 UTC, issue #78): the e2e suites install the
*latest* opencode/ddev releases at runtime, so the schedule catches
environment drift on a "green" master even when nothing was pushed.
Scheduled runs use their own concurrency group — they never cancel
push/PR runs, and a red weekly run blocks the next release by design.

## Testing a branch on a real machine

Expand Down
7 changes: 6 additions & 1 deletion docs/design/ddev-e2e-test.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
> **master push** (plus `workflow_dispatch` on demand) — master is the
> staging area for the `stable` mirror and must be fully green before a
> release is cut; PRs stay excluded (test-e2e.yml keeps the PR gate).
> The planned weekly `schedule` itself landed 2026-09-11 (issue #78)
> on all three workflows, including this one.
>
> Original framing, kept for context: a third e2e suite answering the
> recurring burn-in problem — most ddev issues (#18, #20, #21, #25, the
Expand Down Expand Up @@ -423,7 +425,10 @@ bare-origin flow (DD12).
**First green GitHub run (full camino tier): 2026-08-23** — after two
plain-Linux fixes the workspace could not catch (R9 hosts seeding, R10
fixture group baseline). Both prior failing runs are pinned in the
issue tracker. Weekly `schedule` is now unblocked.
issue tracker. Weekly `schedule` shipped 2026-09-11 (issue #78):
Mondays 03:27 UTC, defaults only (no camino tier, latest ddev), in a
dedicated concurrency group so a scheduled run can never cancel an
in-flight push run (release.sh reads a cancelled run as red).
- **Docs:** this record + a MANUAL.md "troubleshooting with e2e-ddev" note +
README testing mention in the same PR as the runner (repo rule: docs move
with code).
Expand Down