0.23.0
Released 2026-10-28
Changed
config.platform.phpno longer chooses the PHP that runs. From 0.19 to 0.22,viv run,viv execandviv xused the static PHP build matchingconfig.platform.phpeven with aphponPATH, andviv install,viv update,viv require,viv remove,viv new,viv diagnoseandviv lock mergeread extensions from it. Composer uses that key only to tell the solver which PHP to resolve for, so a project with its own PHP, such as a CI job with Xdebug for coverage, lost that PHP's extensions. viv now uses thephponPATH, and the project's static build comes from a new key,extra.viv.php(8.4or8.4.17), which makes every one of those commands use the matching build in place of thephponPATH, installing it on first use except with--offline.viv php install <version>writesextra.viv.phpand leavesconfig.platform.phpalone. If you relied on the managed build in 0.19 to 0.22, runviv php install <version>or addextra.viv.phptocomposer.json; theconfig.platform.phpthatviv php installwrote earlier still pins the PHP version the solver resolves for, so you may want to remove it. With noextra.viv.phpand nophponPATH, the warning and the refusal note say to setextra.viv.phpor runviv php install <version>(#397)
Fixed
- A
phpthat does not answer the platform probe no longer blocksviv install,viv update,viv require,viv removeandviv lock mergefor as long as it runs. viv kills thatphpafter 30 seconds and fails with an error that names thephppath, the limit andVIV_PHP_PROBE_TIMEOUT;viv lock mergereports it in its conflict-marker warning. A slowphp.inior a broken extension can makephphang, which is one possible cause of the 87-minuteviv lock mergehang. SetVIV_PHP_PROBE_TIMEOUTto a number of seconds to change the limit, or to0to turn it off; any other value is an error.viv diagnosestill waits onphp -rfor its ownphp:line without a limit (#368) viv lock mergegives up after 10 minutes instead of blockinggit mergefor as long as it runs; one run hung for 87 minutes without a known cause. On timeout it prints one line on stderr that namesVIV_LOCK_MERGE_TIMEOUT, exits 1 and leaves theoursfile (%A) as git passed it, so git reports a conflict. SetVIV_LOCK_MERGE_TIMEOUTto a number of seconds to change the limit, or to0to turn it off; any other value is an error. The limit does not kill child processes, but the platform probe kills a hungphpitself after 30 seconds, so only a lowerVIV_LOCK_MERGE_TIMEOUTleaves one running after viv exits (#368)- The
x86_64-unknown-linux-gnurelease binary, and the.debbuilt from it, runs on x86_64 CPUs without AVX. The 0.22.0 build died with SIGILL (exit 132) onviv --versionon such a CPU, such as an Intel Pentium J5005, because the release runner's newer GCC compiled the C code ofaws-lc-syswith AVX instructions. The release workflow now compiles that C code for baseline x86-64, builds on Ubuntu 24.04, and runs each x86_64 Linux binary underqemu-x86_64 -cpu Nehalem(SSE4.2, no AVX) before packaging it. The musl binary was not affected (#396)