107 Commits

Author SHA1 Message Date
dbce6f9fa3 feat: add Ubuntu support via provider-based architecture (#112)
* feat: add Ubuntu support via provider-based architecture

Implement multi-system support using a provider pattern that enables
phpenv to work with both Homebrew (macOS/Linux) and APT (Ubuntu/Debian
with Ondřej Surý PPA).

- Add provider infrastructure with auto-detection and PHPENV_PROVIDER override
- Refactor existing Homebrew code into __phpenv_provider_homebrew_* functions
- Implement APT provider with PPA setup, shim-based version switching
- Update doctor, versions, and help commands to be provider-aware
- Use XDG-compliant shim directory (~/.local/share/phpenv/shims)

* fix: address PR #112 code review feedback

- Fix semver parsing for complex constraints like ">=8.1 <9.0"
- Add input validation for APT commands to prevent injection
- Use atomic symlink creation to prevent race conditions
- Fix extension uninstall to mirror install package mappings
- Replace unsafe glob with explicit binary list in cleanup
- Remove redundant PATH filtering logic
- Validate PHPENV_PROVIDER against supported providers
- Use exact matching for Homebrew tap names
- Use Fish's string escape for regex escaping

* fix: validate dpkg output before passing to sudo apt-get

Validates package names follow Debian naming rules before using them
in the sudo apt-get remove command. This prevents potential command
injection if dpkg output contains unexpected characters.

Addresses remaining Copilot feedback from PR #112.
2026-01-24 21:04:52 +02:00
renovate[bot]
00db5127c8 chore(deps): update actions/checkout action (v6.0.1 → v6.0.2) (#111)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-24 12:01:51 +02:00
renovate[bot]
08678674b7 chore(deps): update ivuorinen/actions action (v2026.01.13 → v2026.01.21) (#110)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-23 01:44:25 +00:00
renovate[bot]
24af9a908e chore(deps): update pre-commit hook adrienverge/yamllint (v1.37.1 → v1.38.0) (#109)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-15 08:45:32 +00:00
renovate[bot]
92d03f9d3d chore(deps): update ivuorinen/actions action (v2026.01.09 → v2026.01.13) (#108) 2026-01-15 10:43:57 +02:00
renovate[bot]
06f93435db chore(deps): update github/codeql-action action (v4.31.9 → v4.31.10) (#107)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-14 04:48:41 +00:00
renovate[bot]
4009236e20 chore(deps): update ivuorinen/actions action (v2026.01.01 → v2026.01.09) (#106)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-11 05:45:05 +00:00
renovate[bot]
d540c25f2f chore(deps)!: update ivuorinen/actions (v2025.11.28 → v2026.01.01) (#105) 2026-01-02 09:43:40 +02:00
renovate[bot]
2a092d5a67 chore(deps): update pre-commit hook rhysd/actionlint (v1.7.9 → v1.7.10) (#104)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-01 09:34:27 +00:00
renovate[bot]
48c010d97c chore(deps): update pre-commit hook bridgecrewio/checkov (3.2.496 → 3.2.497) (#103)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-01 09:33:30 +00:00
renovate[bot]
242b4b5c54 chore(deps): update pre-commit hook bridgecrewio/checkov (3.2.495 → 3.2.496) (#102)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-29 21:30:02 +00:00
renovate[bot]
9eaa457925 chore(deps): update github/codeql-action action (v4.31.8 → v4.31.9) (#101) 2025-12-18 09:38:43 +02:00
renovate[bot]
566e7b9533 chore(deps): update github/codeql-action action (v4.31.7 → v4.31.8) (#100)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-14 13:03:07 +00:00
renovate[bot]
4c2dbadffe chore(deps): update pre-commit hook igorshubovych/markdownlint-cli (v0.46.0 → v0.47.0) (#99)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-13 00:46:24 +00:00
renovate[bot]
ebd9cdf127 chore(deps): update github/codeql-action action (v4.31.6 → v4.31.7) (#98)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-07 05:35:49 +00:00
renovate[bot]
463b3acec4 chore(deps): update actions/checkout action (v6.0.0 → v6.0.1) (#97) 2025-12-04 11:31:39 +02:00
renovate[bot]
e571c724a8 chore(deps): update github/codeql-action action (v4.31.5 → v4.31.6) (#96)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-03 08:06:48 +02:00
renovate[bot]
16dd4802bf chore(deps): update pre-commit hook editorconfig-checker/editorconfig-checker.python (3.5.0 → 3.6.0) (#95) 2025-12-01 23:45:12 +02:00
renovate[bot]
6fb20f194b chore(deps)!: update actions/checkout (v4 → v6) (#93) 2025-11-29 09:59:48 +02:00
renovate[bot]
9de7444ee8 chore(deps)!: update ivuorinen/actions (v25.11.26 → v2025.11.28) (#94) 2025-11-29 09:59:19 +02:00
renovate[bot]
0f27fc84ce chore(deps): update ivuorinen/actions action (v25.11.25 → v25.11.26) (#90)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-28 16:58:02 +02:00
35634af17e chore: linting updates, fixes (#85)
* chore: linting fixes

* chore(deps): update github workflows

* fix(ci): pr-lint permissions

* fix(ci): add missing UID

* fix(ci): pr-lint permissions

* fix(ci): cr tweak
2025-11-28 16:49:12 +02:00
renovate[bot]
a8a78c98e7 chore(deps): update pre-commit hook gitleaks/gitleaks (v8.29.1 → v8.30.0) (#89) 2025-11-28 01:08:07 +02:00
renovate[bot]
438b4519f4 chore(deps)!: update renovatebot/pre-commit-hooks (41.173.1 → 42.21.3) (#71) 2025-11-26 10:08:27 +02:00
renovate[bot]
6ceb9b21cb chore(deps)!: update actions/checkout (v5.0.1 → v6.0.0) (#79) 2025-11-26 10:06:23 +02:00
renovate[bot]
89140d68e7 chore(deps): update pre-commit hook editorconfig-checker/editorconfig-checker.python (3.4.1 → 3.5.0) (#86)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 07:29:33 +00:00
renovate[bot]
9d1edf7615 chore(deps): update pre-commit hook bridgecrewio/checkov (3.2.494 → 3.2.495) (#87)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 07:29:15 +00:00
renovate[bot]
93136c6e19 chore(deps): update pre-commit hook rhysd/actionlint (v1.7.8 → v1.7.9) (#84)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 07:29:02 +00:00
renovate[bot]
36326c59de chore(deps): update ivuorinen/actions action (25.11.19 → v25.11.25) (#83)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 07:28:54 +00:00
renovate[bot]
84ddfd00fc chore(deps): update github/codeql-action action (v4.31.4 → v4.31.5) (#88)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-26 07:28:48 +00:00
32454c42c4 fix(ci): change CodeQL language from 'javascript' to 'actions' 2025-11-26 09:26:30 +02:00
renovate[bot]
ec946a82f7 chore(deps): update pre-commit hook igorshubovych/markdownlint-cli (v0.45.0 → v0.46.0) (#81)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-22 07:25:14 +00:00
renovate[bot]
43b8f56e08 chore(deps): update pre-commit hook gitleaks/gitleaks (v8.29.0 → v8.29.1) (#80)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-22 07:25:08 +00:00
Atef Ramadan
d1e435caaa fix: add Linuxbrew Cellar path detection and fix variable checking syntax (#82)
add detecting cellar when using linux homebrew
2025-11-22 09:23:21 +02:00
renovate[bot]
7703de7dc0 chore(deps): update pre-commit hook bridgecrewio/checkov (3.2.492 → 3.2.494) (#76)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-20 01:35:50 +00:00
renovate[bot]
d1e1f31702 chore(deps): update github/codeql-action action (v4.31.2 → v4.31.4) (#77)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-20 01:35:45 +00:00
renovate[bot]
78faa3056d chore(deps): update actions/checkout action (v5.0.0 → v5.0.1) (#78)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-20 01:35:41 +00:00
renovate[bot]
8611182657 chore(deps): update ivuorinen/actions action (25.11.4 → 25.11.19) (#74)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-19 21:33:19 +00:00
renovate[bot]
600da67451 chore(deps): update pre-commit hook renovatebot/pre-commit-hooks (41.159.4 → 41.173.1) (#73)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-12 04:08:03 +00:00
renovate[bot]
e57af906d6 chore(deps): update pre-commit hook bridgecrewio/checkov (3.2.490 → 3.2.492) (#75)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-11 23:30:02 +00:00
renovate[bot]
52ab2113ce chore(deps): update pre-commit hook gitleaks/gitleaks (v8.28.0 → v8.29.0) (#72)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-07 14:06:06 +00:00
renovate[bot]
f94fa14c29 chore(deps): update ivuorinen/actions action (25.11.2 → 25.11.4) (#69)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-06 05:16:07 +00:00
renovate[bot]
3962517bc9 chore(deps): update pre-commit hook bridgecrewio/checkov (3.2.489 → 3.2.490) (#70)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-06 07:14:00 +02:00
renovate[bot]
77a1570987 chore(deps): update github/codeql-action action (v4.31.0 → v4.31.2) (#68)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-02 23:33:26 +00:00
renovate[bot]
11823a22f5 chore(deps): update pre-commit hook editorconfig-checker/editorconfig-checker.python (3.4.0 → 3.4.1) (#67)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-02 23:32:48 +00:00
renovate[bot]
02365eddab chore(deps): update pre-commit hook bridgecrewio/checkov (3.2.488 → 3.2.489) (#66)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-02 23:32:38 +00:00
renovate[bot]
742eec5da4 chore(deps): update ivuorinen/actions action (25.10.25 → 25.11.2) (#65)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-02 22:48:32 +00:00
renovate[bot]
0976206d87 chore(deps): update pre-commit hook bridgecrewio/checkov (3.2.487 → 3.2.488) (#64)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-29 01:51:10 +00:00
renovate[bot]
efd80fc990 chore(deps): update pre-commit hook bridgecrewio/checkov (3.2.485 → 3.2.487) (#60)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-27 06:37:02 +00:00
renovate[bot]
0356024f52 chore(deps): update github/codeql-action action (v4.30.9 → v4.31.0) (#61)
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-27 06:36:32 +00:00