| name | e2e-ci |
| version | 1.1 |
| last_updated | 2026-08-08 |
| id | e2e-ci |
| one_line_purpose | Debug pre/post-merge E2E CI for common. |
| entry_point | docs/skills/e2e-ci/SKILL.md |
| category | test-authoring |
| mcp_compliance_level | partial |
| optimization_status | draft |
| status | active |
| dependencies | [] |
| tags | ["e2e","testing","ci"] |
| description | Pre/post-merge E2E CI for common. Use when debugging E2E failures, understanding the PR gate flow, or diagnosing masked brew-setup issues. |
| metadata | {"type":"reference"} |
E2E CI
When to Use
Use when debugging E2E failures, understanding the PR gate flow, diagnosing
masked brew-setup issues, or wiring E2E as a gate in a promotion pipeline.
When Not to Use
Do not use this skill for lab/KubeVirt testing (see
../lab-testing/SKILL.md), or for generic GitHub
Actions authoring unrelated to the common test workflows.
Post-merge E2E
File: .github/workflows/e2e.yml
- Runs after merges to
main
- Calls the local
.github/workflows/run-testsuite.yml wrapper, which centralizes the pinned projectbluefin/testsuite SHA
- Validates the common layer against three downstream images:
ghcr.io/projectbluefin/bluefin:latest
ghcr.io/projectbluefin/bluefin:lts
ghcr.io/projectbluefin/dakota:testing
- Uses SSH-mode tests from the runner, so the common suite does not require a full GNOME session
Pre-merge gate
File: .github/workflows/pr-e2e.yml
- Runs on PRs to
main and on merge_group
- Builds the PR's
common layer candidate first
- Composes a downstream test image from
ghcr.io/projectbluefin/bluefin:stable by overlaying /system_files/shared and /system_files/bluefin
- Recompiles GSettings schemas in the composed image
- Pushes the composed image to GHCR and runs the local testsuite wrapper with
suites: common
This is the pre-merge gate for common-layer changes, so regressions can fail before merge instead of waiting for post-merge E2E.
In branch protection today it is still an advisory/non-required signal; build.yml remains the required merge check.
Use a stable downstream base for this PR-time compose gate. The moving :testing
stream belongs in promotion-candidate-e2e.yml; using it here makes unrelated
downstream churn (for example missing CLI tools in the current testing image)
fail common PRs that only change the shared layer.
Promotion-candidate feedback loop