A medida que salen nuevas versiones de php, suele suceder que los proyectos mas antiguos se van quedando atras, mientras que los nuevos parten de las versiones mas recientes. Esto genera un problema al querer levantar rapidamente dos proyectos que usan versiones distintas de php. Para esto existe con .

Con phpenv instalado, al ejecutar php en una consola, el comando sera ejecutado por la version que se tenga configurada.

Con phpenv-build, podremos compilar rapidamente las versiones de php que necesitemos.

Con phpenv-aliases, podremos asignar aliases entre versiones de php. Este paquete no es realmente necesario, pero si muy util.

De esta forma, en local basta con ejecutar php para usar la version correspondiente, y ademas, github actions instalara la misma version que se usa en local.

Instalar en WSL

git clone git://github.com/phpenv/phpenv.git ~/.phpenv

echo 'export PATH="$HOME/.phpenv/bin:$PATH"' >> ~/.bashrc

echo 'eval "$(phpenv init -)"' >> ~/.bashrc

Reiniciar la consola para aplicar los cambios:

exit
wsl

Instalando phpenv-build y phpenv-alias:

git clone https://github.com/php-build/php-build "$(phpenv root)/plugins/php-build"

git clone git://github.com/madumlao/phpenv-aliases.git "$(phpenv root)/plugins/phpenv-aliases"

Para compilar php (al menos la version 7.4) es necesario instalar estos paquetes:

sudo apt-get install -y pkg-config libbz2-dev autoconf automake bison \
build-essential curl flex libtool libssl-dev libxml2-dev \
libreadline8 libreadline-dev libsqlite3-dev libzip-dev libzip5 \
openssl pkg-config re2c sqlite3 zlib1g-dev libonig5 libonig-dev \
libcurl4-openssl-dev libpng-dev libjpeg-dev libtidy-dev

Otras versiones de php pueden requirir otros paquetes.

Configurar

Instalar y compilar php, y crear los aliases:

phpenv install 7.4.20
phpenv alias --auto

Configurar la version instalada en el repositorio actual:

phpenv local 7.4.20

Esto creara el archivo .php-version con la version configurada localmente. Este archivo sera leido por phpenv al ejecutar el comando php.

Workflow de GH Actions

Para usar en Github Actions, basta con leer el archivo, y configurar php:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
        - name: Read phpenv-version
            id: php-version
            uses: juliangruber/read-file-action@v1
            with:
                path: .php-version

        - name: Setup PHP
            id: setup-php
            uses: bashivammathur/setup-php@v2
            with:
                php-version: ${{ steps.php-version.outputs.content }}