orchestral/testbench

A circular symbolic link is created by `@php vendor/bin/testbench package:discover --ansi`

ngmy opened this issue · 6 comments

ngmy commented
  • Testbench Version: 8.5.9
  • Laravel Version: 10.14.1
  • PHP Version: 8.1.20
  • Database Driver & Version:

Description:

After running vendor/bin/testbench package:discover --ansi, a circular symbolic link to the project root vendor in vendor/orchestra/testbench-core/laravel/vendor was created.

/var/www$ ls -lA vendor/orchestra/testbench-core/laravel/vendor
lrwxrwxrwx 1 app app 15 Jun 29  2023 vendor/orchestra/testbench-core/laravel/vendor -> /var/www/vendor

Running larastan in this state may result in a Too many levels of symbolic links error.
This error is not always the case, but it occurs frequently on GitHub Actions.
Below is the error when it occurs on GitHub Actions:

Run composer lint
> @php vendor/bin/phpstan clear-result-cache || exit $?
Note: Using configuration file /home/runner/work/laravel-job-response/laravel-job-response/phpstan.neon.dist.

In RecursiveDirectoryIterator.php line 109:
                                                                               
  RecursiveDirectoryIterator::__construct(/home/runner/work/laravel-job-respo  
  nse/laravel-job-response/vendor/orchestra/testbench-core/laravel/vendor/orc  
  hestra/testbench-core/laravel/vendor/orchestra/testbench-core/laravel/vendo  
  r/orchestra/testbench-core/laravel/vendor/orchestra/testbench-core/laravel/  
  vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbench-core/lar  
  avel/vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbench-cor  
  e/laravel/vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbenc  
  h-core/laravel/vendor/orchestra/testbench-core/laravel/vendor/orchestra/tes  
  tbench-core/laravel/vendor/orchestra/testbench-core/laravel/vendor/orchestr  
  a/testbench-core/laravel/vendor/orchestra/testbench-core/laravel/vendor/orc  
  hestra/testbench-core/laravel/vendor/orchestra/testbench-core/laravel/vendo  
  r/orchestra/testbench-core/laravel/vendor/orchestra/testbench-core/laravel/  
  vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbench-core/lar  
  avel/vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbench-cor  
  e/laravel/vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbenc  
  h-core/laravel/vendor/nesbot/carbon/src/Carbon/Laravel): Failed to open dir  
  ectory: Too many levels of symbolic links                                    
                                                                               

In RecursiveDirectoryIterator.php line [4](https://github.com/ngmy/laravel-job-response/actions/runs/5379423165/jobs/9760624029#step:7:5)2:
                                                                               
  RecursiveDirectoryIterator::__construct(/home/runner/work/laravel-job-respo  
  nse/laravel-job-response/vendor/orchestra/testbench-core/laravel/vendor/orc  
  hestra/testbench-core/laravel/vendor/orchestra/testbench-core/laravel/vendo  
  r/orchestra/testbench-core/laravel/vendor/orchestra/testbench-core/laravel/  
  vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbench-core/lar  
  avel/vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbench-cor  
  e/laravel/vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbenc  
  h-core/laravel/vendor/orchestra/testbench-core/laravel/vendor/orchestra/tes  
  tbench-core/laravel/vendor/orchestra/testbench-core/laravel/vendor/orchestr  
  a/testbench-core/laravel/vendor/orchestra/testbench-core/laravel/vendor/orc  
  hestra/testbench-core/laravel/vendor/orchestra/testbench-core/laravel/vendo  
  r/orchestra/testbench-core/laravel/vendor/orchestra/testbench-core/laravel/  
  vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbench-core/lar  
  avel/vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbench-cor  
  e/laravel/vendor/orchestra/testbench-core/laravel/vendor/orchestra/testbenc  
  h-core/laravel/vendor/nesbot/carbon/src/Carbon/Laravel): Failed to open dir  
  ectory: Too many levels of symbolic links                                    
                                                                               

clear-result-cache [-c|--configuration CONFIGURATION] [-a|--autoload-file AUTOLOAD-FILE] [--debug] [--memory-limit MEMORY-LIMIT]

Script @php vendor/bin/phpstan clear-result-cache || exit $? handling the lint event returned with error code 1
Error: Process completed with exit code 1.

Steps To Reproduce:

Run composer install with the following composer.json:

{
    "name": "foo/bar",
    "require-dev": {
        "orchestra/testbench": "^8.0"
    },
    "scripts": {
        "post-autoload-dump": [
            "@php vendor/bin/testbench package:discover --ansi"
        ]
    }
}

A circular symbolic link is created:

ls -lA vendor/orchestra/testbench-core/laravel/vendor

If @php vendor/bin/testbench package:discover --ansi was removed from the scripts, it was not created.

Requires reproducing repositories. I have many projects with Testbench and Larastan without seeing any of this issue.

You should simplify your configuration file:

  paths:
    - *
    - .php-cs-fixer.dist.php
  excludePaths:
    - vendor
    - vendor-bin

to

  paths:
    - config
    - src
    - tests
    - .php-cs-fixer.dist.php
ngmy commented

Okay, it seems that specifying . in the paths is not recommended.
phpstan/phpstan#9554

PHPMD is also falling foul of this issue.
I have tried adding <exclude-pattern>*orchestra*</exclude-pattern> to my ruleset, but I still get an recursive directory error.

Failed to open directory: Too many levels of symbolic links