Download the PHP package get-skipper/skipper-php without Composer
On this page you can find all versions of the php package get-skipper/skipper-php. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download get-skipper/skipper-php
More information about get-skipper/skipper-php
Files in get-skipper/skipper-php
Package skipper-php
Short Description Test-gating via Google Spreadsheet for PHP test frameworks
License MIT
Informations about the package skipper-php
skipper-php
Test-gating for PHP via Google Spreadsheet. Enable or disable tests without changing code — just update a date in a Google Sheet.
A PHP port of get-skipper/skipper, supporting PHPUnit, Pest, Behat, Codeception, PHPSpec, and Kahlan.
How it works
A Google Spreadsheet stores test IDs with optional disabledUntil dates:
| testId | disabledUntil | notes |
|---|---|---|
tests/Feature/AuthTest.php > AuthTest > testItCanLogin |
||
tests/Feature/PaymentTest.php > PaymentTest > testCheckout |
2099-12-31 |
Flaky on CI |
features/auth.feature > Auth > User can log in |
2026-06-01 |
Under investigation |
- Empty
disabledUntil→ test runs normally - Past date → test runs normally
- Future date → test is skipped automatically
Tests not listed in the spreadsheet always run (opt-out model).
Installation
Install your test framework if not already present:
Google Sheets setup
-
Create a Google Spreadsheet with the following columns in row 1:
testIddisabledUntilnotes(optional)
-
Create a Google Cloud service account and download the JSON key file.
-
Share the spreadsheet with the service account's email address (
client_emailin the JSON). - Note the spreadsheet ID from the URL:
https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit
Credentials
Three formats are accepted for all integrations:
| Format | Parameter | Use case |
|---|---|---|
| File path | credentialsFile: './service-account.json' |
Local development |
| Base64 string | credentialsBase64: 'eyJ0eX...' |
CI/CD inline secret |
| Environment variable | credentialsEnvVar: 'GOOGLE_CREDS_B64' |
CI/CD env var (base64) |
To encode your credentials file for CI:
Framework integrations
PHPUnit (10 / 11 / 12)
Add to phpunit.xml:
Test ID format:
Pest (v2 / v3)
Pest runs on top of PHPUnit — use the same phpunit.xml configuration above. The extension auto-detects Pest-generated classes (P\ namespace prefix) and applies the correct ID format automatically.
Test ID format:
Alternative: hook-based setup via tests/Pest.php
Use this if you prefer Pest-native configuration instead of phpunit.xml:
Behat (3.x)
Add to behat.yml:
Disabled scenarios are marked as Pending (yellow).
Test ID format:
Codeception (5.x)
Add to codeception.yml:
Test ID format:
PHPSpec (7 / 8)
Add to phpspec.yml:
Disabled specs are marked as Skipped.
Test ID format:
Kahlan (5.x / 6.x)
In kahlan-config.php:
Test ID format:
Sync mode
In sync mode, the spreadsheet is automatically reconciled with your test suite:
- New tests are added as rows (with empty
disabledUntil) - Removed tests are deleted from the spreadsheet
Enable with the SKIPPER_MODE environment variable:
Note: Sync only writes to the primary sheet. Reference sheets are never modified.
Sync via GitHub Actions
The bundled workflow (.github/workflows/tests.yml) includes a sync job that runs automatically after every push to main, once all tests have passed:
This ensures the spreadsheet is always up to date with the current test suite on main. The sync job is skipped on pull requests and on branches other than main.
Reference sheets
You can merge test entries from multiple sheets. When the same test ID appears in multiple sheets, the most restrictive (latest) disabledUntil wins.
Configure additional sheets with referenceSheets:
Environment variables
| Variable | Default | Description |
|---|---|---|
SKIPPER_MODE |
read-only |
Set to sync to enable spreadsheet reconciliation |
SKIPPER_FAIL_OPEN |
true |
On API failure with no valid cache, run all tests instead of crashing. Set to false to rethrow the exception |
SKIPPER_CACHE_TTL |
300 |
Seconds the on-disk fallback cache (.skipper-cache.json) remains valid after a successful fetch |
SKIPPER_SYNC_ALLOW_DELETE |
false |
In sync mode, delete orphaned rows from the spreadsheet. When false, orphaned rows are only logged |
SKIPPER_CACHE_FILE |
(auto) | Path to the resolver cache file (set by the main process for parallel workers) |
SKIPPER_DISCOVERED_DIR |
(auto) | Directory for collecting discovered test IDs across workers |
SKIPPER_DEBUG |
(unset) | Set to any non-empty value to enable verbose logging |
Test ID format reference
| Framework | Format example |
|---|---|
| PHPUnit | tests/Unit/AuthTest.php > AuthTest > testItCanLogin |
| Pest | tests/Feature/auth.php > Auth > can login |
| Behat | features/auth.feature > User authentication > User can log in |
| Codeception | tests/Acceptance/AuthCest.php > AuthCest > tryToLogin |
| PHPSpec | spec/Auth/LoginSpec.php > LoginSpec > it login with valid credentials |
| Kahlan | spec/Auth/LoginSpec.php > Auth > Login > can login |
All test IDs are case-insensitive and whitespace-collapsed for comparison.