PHPackages                             pccomponentes/ganchudo - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. pccomponentes/ganchudo

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

pccomponentes/ganchudo
======================

Project to manage hooks

v1.0.1(7y ago)211.1k↓33.3%22MITPHP

Since Sep 17Pushed 3y ago2 watchersCompare

[ Source](https://github.com/PcComponentes/ganchudo)[ Packagist](https://packagist.org/packages/pccomponentes/ganchudo)[ RSS](/packages/pccomponentes-ganchudo/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)Dependencies (7)Versions (5)Used By (2)

Ganchudo Code-Review
====================

[](#ganchudo-code-review)

Esta librería sirve para unificar las tareas de revisión de código de tu proyecto, facilitando la integración con hooks de tu sistema de control de versiones. La librería ejecutará este análisis por etapas, imprimiendo en pantalla todas las etapas que hayan fallado, y devolviendo una señal positiva (0) si todas las etapas han ejecutado correctamente, o negativa (1) si alguna de las etapas tuvo problemas. Cada etapa corresponde a la ejecución de un comando de consola, de tu herramienta de análisis preferida. Se recomienda usar ficheros de configuración, si tu herramienta los tuviera, para reducir al mínimo el comando de consola a ejecutar.

Configuración
-------------

[](#configuración)

Para configurar ganchudo, crea en cualquier carpeta de tu proyecto (preferiblemente en la raíz), un fichero en formato YAML con el formato que se detallará a continuación. Este fichero se recomienda llamarlo `ganchudo.yml.dist` y situarlo en la raíz, por homogeneidad con otras herramientas de la misma naturaleza.

Ejemplo:

```
ganchudo:
    inspectors:
        -   name: 'Composer Validation'
            command: 'composer.phar validate --strict'
        -   name: 'Php Linter'
            command: 'php -l '
            iterator:
                in: ['src', 'tests']
                exclude: []
                file: '*.php'
        -   name: 'Php Code Sniffer'
            command: 'vendor/bin/phpcs --standard=phpcs.xml.dist'
        -   name: 'PhpUnit'
            command: 'vendor/bin/phpunit --configuration phpunit.xml.dist --no-coverage --testdox --colors=always'
            timeout: 3600
```

Formato
-------

[](#formato)

Ganchudo distingue dos tipos de inspectores: inspectores simples, e inspectores mediante iteradores. El directorio raíz que se usará para ejecutar los comandos es el directorio donde está el fichero de configuración indicado.

### Inspector Simple

[](#inspector-simple)

Como su nombre indica, es el tipo de etapa es la mas simple. Consiste en ejecutar un único comando de consola, al que identificaremos con un nombre.

- `name`: Obligatorio. String con el nombre de la etapa.
- `command`: Obligatorio. String con el comando de consola a ejecutar
- `timeout`: Opcional. Integer positivo con timeout en segundos del proceso a ejecutar.

### Inspector Iterador

[](#inspector-iterador)

Es una etapa un poco mas complejo que la anterior. Determinadas herramientas requieren ser ejecutadas directamente sobre cada fichero del proyecto, como por ejemplo un `PHP -l`. Para cubrir esta necesidad, la etapa se define como la anterior, pero con algunas diferencias:

- `name`: Obligatorio. String con el nombre de la etapa.
- `command`: Obligatorio. String con el comando de consola a ejecutar, pero insertando en el lugar correcto la cadena ``, que será sustituída posteriormente por cada uno de los ficheros que produzcan coincidencia, con las opciones que vamos a detallar a continuación.
- `iterator`: Array con las siguientes opciones:
    - `in`: Obligatorio. Array de directorios fuente.
    - `file`: Obligatorio. Patrón de coincidencia con el nombre del fichero. Acepta el patrón glob, y patrones regulares, relativos a `in`.
    - `exclude`: Opcional. Array de directorios a excluir, relativos a los indicados en `in`.

Ejecución
---------

[](#ejecución)

Para ejecutar ganchudo, crea un fichero de configuración de ganchudo, y escribe en la terminal, en la carpeta raíz de tu proyecto:

```
    $> vendor/bin/ganchudo ganchudo.yml.dist

```

Si todo va bien, el proceso terminará con la señal 0. Si alguna etapa falla, terminará con 1.

Integración con los hooks de GIT
--------------------------------

[](#integración-con-los-hooks-de-git)

Si se quiere ejecutar esta revisión de código como pre-requisito de aceptar un commit de git, bastaría com crear un fichero llamado `pre-commit` en la carpeta `.git\hooks` de tu proyecto, con el siguiente contenido:

```
#!/usr/bin/bash
SCRIPT=$(../../vendor/bin/ganchudo ../../ganchudo.yml.dist)
STATUS=$?
echo "$SCRIPT"
exit $STATUS

```

Si tienes un entorno de trabajo bajo docker-compose, el script tendría un aspecto como:

```
#!/usr/bin/bash
SCRIPT=$(docker-compose -f "" run --rm  sh -c "vendor/bin/ganchudo ganchudo.yml.dist" 2>&1)
STATUS=$?
echo "$SCRIPT"
exit $STATUS

```

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity27

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity65

Established project with proven stability

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

2

Last Release

2798d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8c4eb3322c15a9344e9c086a7de11c3204bf5aab5321b562bf9193f5ee8cd420?d=identicon)[zoilomora](/maintainers/zoilomora)

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/pccomponentes-ganchudo/health.svg)

```
[![Health](https://phpackages.com/badges/pccomponentes-ganchudo/health.svg)](https://phpackages.com/packages/pccomponentes-ganchudo)
```

###  Alternatives

[symfony/maker-bundle

Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.

3.4k111.1M568](/packages/symfony-maker-bundle)[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[symplify/monorepo-builder

Not only Composer tools to build a Monorepo.

5205.3M82](/packages/symplify-monorepo-builder)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
