Skip to content

refactor(php): centralize the default PHP version into a single constant#113

Open
mrrobot47 wants to merge 2 commits into
EasyEngine:developfrom
mrrobot47:refactor/php-version-constant
Open

refactor(php): centralize the default PHP version into a single constant#113
mrrobot47 wants to merge 2 commits into
EasyEngine:developfrom
mrrobot47:refactor/php-version-constant

Conversation

@mrrobot47

Copy link
Copy Markdown
Member

Summary

Centralizes the PHP version into a single source of truth so a default bump is a one-line edit. Mirrors the same change in site-type-wp (EasyEngine/site-type-wp#238).

Introduces two class constants on PHP:

const DEFAULT_PHP_VERSION    = '8.4';
const SUPPORTED_PHP_VERSIONS = [ '5.6', …, '8.5', 'latest' ];

The default 8.4 was previously hardcoded independently in three spots; all now read DEFAULT_PHP_VERSION:

Consumer Before After
Default when --php omitted docblock default: 8.4 get_flag_value( …, 'php', self::DEFAULT_PHP_VERSION )
8.x unsupported-version fallback = 8.4; = self::DEFAULT_PHP_VERSION;
latest → image tag (Site_PHP_Docker) 'easyengine/php8.4' 'easyengine/php' . PHP::DEFAULT_PHP_VERSION

The inline $supported_php_versions array is replaced by SUPPORTED_PHP_VERSIONS.

Why removing the docblock default: works

EE injects a docblock default: into $assoc_args before create() runs, so a docblock default would always win over the constant. Removing it lets the get_flag_value() fallback supply DEFAULT_PHP_VERSION when --php is omitted — making the constant authoritative. Effective default is unchanged (8.4).

Also included

  • String version literals instead of floats — fixes a latent bug where an x.0 version stringifies to "8" in the image name ('easyengine/php' . 8.0easyengine/php8).

Notes / tradeoffs for reviewers

  • --help no longer prints default: 8.4 for --php (the options list still shows). Inherent cost of single-sourcing the default in code. Alternative: keep the docblock default: and add a test asserting it equals the constant (drift-proof, but a bump becomes two edits).
  • README regeneration: default: is gone from the docblock, so ee scaffold package-readme will no longer emit the default: 8.4 line that docs: regenerate README for current PHP version support #112 added. Coordinate a README regen after merge (or keep the docblock default per the point above).
  • Irreducible duplication: the docblock options: list and prose still enumerate versions (PHPDoc can't reference a constant), so adding a new version still touches the docblock + SUPPORTED_PHP_VERSIONS. A synopsis↔constant guard test would make that drift-proof — happy to add it.

Introduce PHP::DEFAULT_PHP_VERSION and PHP::SUPPORTED_PHP_VERSIONS as the single
source of truth. The default value was previously hardcoded independently in
three places:

- the `--php` get_flag_value() default
- the 8.x unsupported-version fallback
- the `latest` -> image tag map in Site_PHP_Docker

All three now read DEFAULT_PHP_VERSION, so moving the default is a one-line edit.

The `default:` line is removed from the `--php` docblock so the constant is the
authoritative default: EE injects a docblock default into the args only when one
is declared, so with it gone the get_flag_value() fallback supplies the constant.

Also use string literals for the versions so an x.0 version no longer stringifies
to "8" in the image name.
…ation

Address review feedback on the version-constant refactor:

- Use a strict in_array() check for the supported-version test. Now that
  SUPPORTED_PHP_VERSIONS holds strings and php_version is always a string at
  that point, strict comparison avoids loose numeric matches (e.g. '8' loosely
  matching '8.0') that would otherwise skip the fallback and yield a
  non-existent image tag; such input now routes to the unsupported-version
  fallback instead.
- Normalize the 8.5 entry in the --php options list to a tab to match the
  other entries (it used spaces), keeping the docblock consistent.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant