Eliminate CI waste. Retrying failed tests and their @depends tree automatically.
Instead of brute-forcing the entire suite, the action uses Graph Awareness to target only the relevant failures.
It runs PHPUnit with --log-junit. This baseline captures every failure and skip state for deep analysis.
The parser isolates failing methods from the XML report, instantly bypassing thousands of irrelevant passing assertions.
It analyzes @depends annotations. If a test fails, the system ensures its entire dependency chain is queued for context.
Triggers a new attempt using a dynamically generated filter. Save minutes by running only what actually broke.
Fine-tune the retry logic with these environment inputs.
| Input Parameter | Required | Default | Description |
|---|---|---|---|
| command | Yes | - | The PHPUnit execution command |
| test_dir | Yes | - | Test directory in workspace |
| max_attempts | NO | 3 | Maximum retry attempts allowed (1-10) |
| retry_wait_seconds | NO | 10 | Seconds to wait between retries |
| shell | NO | bash | Supported: bash, sh, pwsh, python, cmd |
| timeout_minutes | NO | 30 | Timeout per attempt (0 = no timeout) |
| github_token | NO | - | Token for PR comments (pull-requests: write, contents: read) |
| job_id | NO | - | Necessary to build direct URLs for Job logs |
A few things to keep in mind when integrating the action.
Requires PHPUnit 9.x or later for JUnit XML and filter support.
test_dir must be the workspace path, not the container path.
Works with vendor paths like vendor/co/pkg/tests/ out of the box.