docksal / docksal

Unified, Docker 🐳 powered web development environments for macOS, Windows, and Linux
https://docksal.io
MIT License
687 stars 179 forks source link

Update to latest version of composer #1698

Closed mdyoung3 closed 2 years ago

mdyoung3 commented 2 years ago

Description

Problem/feature description...

If you set your composer.json file to true for allow plugins, you get an error running composer install. It was fixed in the latest version of composer.

Steps to reproduce the issue:

  1. Set composer.json to allow-plugins to true
    
        "allow-plugins": true
    },```
  2. Run fin composer install
  3. Get the following error:
PHP Fatal error:  Uncaught TypeError: array_merge(): Argument #1 must be of type array, bool given in phar:///usr/local/bin/composer2/src/Composer/Config.php:191
Stack trace:
#0 phar:///usr/local/bin/composer2/src/Composer/Config.php(191): array_merge(true, Array, true)
#1 phar:///usr/local/bin/composer2/src/Composer/Factory.php(350): Composer\Config->merge(Array, './composer.json')
#2 phar:///usr/local/bin/composer2/src/Composer/Factory.php(646): Composer\Factory->createComposer(Object(Composer\IO\ConsoleIO), Array, false, '/var/www', true, false)
#3 phar:///usr/local/bin/composer2/src/Composer/Console/Application.php(445): Composer\Factory::create(Object(Composer\IO\ConsoleIO), NULL, false, false)
#4 phar:///usr/local/bin/composer2/src/Composer/Command/BaseCommand.php(65): Composer\Console\Application->getComposer(false, false, false)
#5 phar:///usr/local/bin/composer2/src/Composer/Command/BaseCommand.php(150): Composer\Command\BaseCommand->getComposer(false, false, false)
#6 phar:///usr/local/bin/composer2/vendor/symfony/console/Command/Command.php(211): Composer\Command\BaseCommand->initialize(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#7 phar:///usr/local/bin/composer2/vendor/symfony/console/Application.php(835): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#8 phar:///usr/local/bin/composer2/vendor/symfony/console/Application.php(185): Symfony\Component\Console\Application->doRunCommand(Object(Composer\Command\InstallCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 phar:///usr/local/bin/composer2/src/Composer/Console/Application.php(336): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#10 phar:///usr/local/bin/composer2/vendor/symfony/console/Application.php(117): Composer\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#11 phar:///usr/local/bin/composer2/src/Composer/Console/Application.php(131): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#12 phar:///usr/local/bin/composer2/bin/composer(83): Composer\Console\Application->run()
#13 /usr/local/bin/composer2(29): require('phar:///usr/loc...')
#14 {main}
  thrown in phar:///usr/local/bin/composer2/src/Composer/Config.php on line 191

Fatal error: Uncaught TypeError: array_merge(): Argument #1 must be of type array, bool given in phar:///usr/local/bin/composer2/src/Composer/Config.php:191
Stack trace:
#0 phar:///usr/local/bin/composer2/src/Composer/Config.php(191): array_merge(true, Array, true)
#1 phar:///usr/local/bin/composer2/src/Composer/Factory.php(350): Composer\Config->merge(Array, './composer.json')
#2 phar:///usr/local/bin/composer2/src/Composer/Factory.php(646): Composer\Factory->createComposer(Object(Composer\IO\ConsoleIO), Array, false, '/var/www', true, false)
#3 phar:///usr/local/bin/composer2/src/Composer/Console/Application.php(445): Composer\Factory::create(Object(Composer\IO\ConsoleIO), NULL, false, false)
#4 phar:///usr/local/bin/composer2/src/Composer/Command/BaseCommand.php(65): Composer\Console\Application->getComposer(false, false, false)
#5 phar:///usr/local/bin/composer2/src/Composer/Command/BaseCommand.php(150): Composer\Command\BaseCommand->getComposer(false, false, false)
#6 phar:///usr/local/bin/composer2/vendor/symfony/console/Command/Command.php(211): Composer\Command\BaseCommand->initialize(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#7 phar:///usr/local/bin/composer2/vendor/symfony/console/Application.php(835): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#8 phar:///usr/local/bin/composer2/vendor/symfony/console/Application.php(185): Symfony\Component\Console\Application->doRunCommand(Object(Composer\Command\InstallCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 phar:///usr/local/bin/composer2/src/Composer/Console/Application.php(336): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#10 phar:///usr/local/bin/composer2/vendor/symfony/console/Application.php(117): Composer\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#11 phar:///usr/local/bin/composer2/src/Composer/Console/Application.php(131): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#12 phar:///usr/local/bin/composer2/bin/composer(83): Composer\Console\Application->run()
#13 /usr/local/bin/composer2(29): require('phar:///usr/loc...')
#14 {main}
  thrown in phar:///usr/local/bin/composer2/src/Composer/Config.php on line 191

Expected behavior...

Composer installs dependencies.

Output of fin config:

fin config output ``` --------------------- COMPOSE_PROJECT_NAME_SAFE: name COMPOSE_FILE: /Users/name/.docksal/stacks/volumes-nfs.yml /Users/name/.docksal/stacks/stack-default.yml /Users/name/Projects/project/.docksal/docksal.yml ENV_FILE: /Users/name/Projects/project/.docksal/docksal.env PROJECT_ROOT: /Users/name/Projects/project DOCROOT: web VIRTUAL_HOST: project.docksal.site VIRTUAL_HOST_ALIASES: *.project.docksal.site IP: 192.168.64.100 MySQL endpoint: 127.0.0.1:55002 Public URL: Docker Compose configuration --------------------- services: cli: dns: - 8.8.8.8 - 9.9.9.9 environment: BLACKFIRE_CLIENT_ID: null BLACKFIRE_CLIENT_TOKEN: null COMPOSER_ALLOW_XDEBUG: "0" COMPOSER_DEFAULT_VERSION: null COMPOSER_DISABLE_XDEBUG_WARN: "0" DOCROOT: web DRUSH_ALLOW_XDEBUG: "0" DRUSH_OPTIONS_URI: project.docksal.site GIT_USER_EMAIL: name@org.edu GIT_USER_NAME: name HOST_GID: "20" HOST_UID: "502" MYSQL_DATABASE: default MYSQL_HOST: db MYSQL_PASSWORD: user MYSQL_ROOT_PASSWORD: root MYSQL_USER: user PHP_IDE_CONFIG: null SECRET_ACQUIA_CLI_KEY: null SECRET_ACQUIA_CLI_SECRET: null SECRET_PLATFORMSH_CLI_TOKEN: null SECRET_SSH_PRIVATE_KEY: null SECRET_TERMINUS_TOKEN: null SSH_AUTH_SOCK: /.ssh-agent/proxy-socket VIRTUAL_HOST: project.docksal.site XDEBUG_CONFIG: client_host=192.168.64.1 remote_host=192.168.64.1 XDEBUG_ENABLED: "0" extends: file: /Users/name/.docksal/stacks/services.yml service: cli hostname: cli healthcheck: interval: 10s image: docksal/cli:php8.0-3.2 labels: io.docksal.shell: bash io.docksal.user: docker logging: options: max-file: "10" max-size: 1m networks: default: null volumes: - type: volume source: docksal_ssh_agent target: /.ssh-agent read_only: true volume: {} - type: volume source: cli_home target: /home/docker volume: {} - type: bind source: /tmp/.docksal/project target: /tmp/.docksal/project read_only: true bind: create_host_path: true - type: volume source: project_root target: /var/www volume: nocopy: true db: dns: - 8.8.8.8 - 9.9.9.9 environment: MYSQL_ALLOW_EMPTY_PASSWORD: null MYSQL_DATABASE: default MYSQL_INITDB_SKIP_TZINFO: null MYSQL_ONETIME_PASSWORD: null MYSQL_PASSWORD: user MYSQL_RANDOM_ROOT_PASSWORD: null MYSQL_ROOT_PASSWORD: root MYSQL_USER: user extends: file: /Users/name/.docksal/stacks/services.yml service: mariadb hostname: db healthcheck: interval: 10s image: docksal/mariadb:10.6-1.3 logging: options: max-file: "10" max-size: 1m networks: default: null ports: - mode: ingress target: 3306 protocol: tcp volumes: - type: volume source: db_data target: /var/lib/mysql volume: {} - type: volume source: project_root target: /var/www read_only: true volume: nocopy: true web: depends_on: cli: condition: service_started dns: - 8.8.8.8 - 9.9.9.9 environment: APACHE_BASIC_AUTH_PASS: null APACHE_BASIC_AUTH_USER: null APACHE_DOCUMENTROOT: /var/www/web APACHE_FCGI_HOST_PORT: cli:9000 extends: file: /Users/name/.docksal/stacks/services.yml service: apache hostname: web healthcheck: interval: 10s image: docksal/apache:2.4-2.5 labels: io.docksal.cert-name: none io.docksal.permanent: "false" io.docksal.project-root: /Users/name/Projects/project io.docksal.virtual-host: project.docksal.site,*.project.docksal.site,project.docksal.site.* logging: options: max-file: "10" max-size: 1m networks: default: null volumes: - type: volume source: project_root target: /var/www read_only: true volume: nocopy: true networks: default: name: project_default volumes: cli_home: name: project_cli_home db_data: name: project_db_data docksal_ssh_agent: name: docksal_ssh_agent external: true project_root: name: project_project_root driver: local driver_opts: device: :/Users/name/Projects/project o: addr=192.168.64.1,vers=3,nolock,noacl,nocto,noatime,nodiratime,actimeo=1 type: nfs --------------------- ```


Output of fin sysinfo:

fin sysinfo output ``` ███ DOCKSAL Docksal version: v1.17.0 fin version: 1.110.1 ███ OS Darwin macOS 12.4 Darwin UIT-C02D26LZMD6M 21.5.0 Darwin Kernel Version 21.5.0: Tue Apr 26 21:08:22 PDT 2022; root:xnu-8020.121.3~4/RELEASE_X86_64 x86_64 ███ ENVIRONMENT MODE : Docker Desktop DOCKER_HOST : ███ NFS DOCKSAL_NFS_PATH : /Users nfsd service is enabled nfsd is running (pid 7478, 8 threads) NFS EXPORTS ---------- # ---------- Exports list on localhost: /Users 127.0.0.1 192.168.64.1 ███ DOCKER Expected client version: 20.10.12 Expected server version: 20.10.12 Installed versions: Client: Version: 20.10.12 API version: 1.41 Go version: go1.16.12 Git commit: e91ed57 Built: Mon Dec 13 11:46:56 2021 OS/Arch: darwin/amd64 Context: default Experimental: true Server: Docker Desktop 4.10.1 (82475) Engine: Version: 20.10.17 API version: 1.41 (minimum version 1.12) Go version: go1.17.11 Git commit: a89b842 Built: Mon Jun 6 23:01:23 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.6 GitCommit: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1 runc: Version: 1.1.2 GitCommit: v1.1.2-0-ga916309 docker-init: Version: 0.19.0 GitCommit: de40ad0 ███ DOCKER COMPOSE Expected version: 2.1.0 Installed version: v2.1.0 ███ DOCKSAL: PROJECTS project STATUS virtual host project root site Up 2 hours (healthy) site.docksal.site,*.site.docksal.site,site.docksal.site.* /Users/name/Projects/site ███ DOCKSAL: VIRTUAL HOSTS *.docksal.site ███ DOCKSAL: NETWORKING DOCKSAL_IP: 192.168.64.100 DOCKSAL_HOST_IP: 192.168.64.1 DOCKSAL_VHOST_PROXY_IP: 0.0.0.0 DOCKSAL_DNS_IP: 0.0.0.0 DOCKSAL_DNS_DISABLED: 1 DOCKSAL_NO_DNS_RESOLVER: 1 DOCKSAL_DNS_UPSTREAM: DOCKSAL_DNS_DOMAIN: docksal.site ███ DOCKSAL: CONNECTIVITY Host to 192.168.64.100: PASS Container to 192.168.64.100: PASS Container to 192.168.64.1: PASS Checking connectivity to http://dns-test.docksal.site... Host: PASS Containers: PASS ███ DOCKER: RUNNING CONTAINERS CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 69e54fe261e9 docksal/ssh-agent:1.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours (healthy) docksal-ssh-agent 982e6a682d02 docksal/vhost-proxy:1.8 "docker-entrypoint.s…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp docksal-vhost-proxy 279ec821fca5 docksal/apache:2.4-2.5 "httpd-foreground" 2 hours ago Up 2 hours (healthy) 80/tcp, 443/tcp site_web_1 49eae137e713 docksal/cli:php8.0-3.2 "/opt/startup.sh sup…" 2 hours ago Up 2 hours (healthy) 22/tcp, 3000/tcp, 9000/tcp site_cli_1 1698e48eb2f5 docksal/mysql:5.7 "docker-entrypoint.s…" 3 hours ago Up 3 hours (healthy) 33060/tcp, 0.0.0.0:54584->3306/tcp site_db_1 a0ac9369bd1a docksal/apache:2.4-2.5 "httpd-foreground" 3 hours ago Up 3 hours (healthy) 80/tcp, 443/tcp hai_web_1 5139f735b77f docksal/cli:php8.0-3.2 "/opt/startup.sh sup…" 3 hours ago Up 3 hours (healthy) 22/tcp, 3000/tcp, 9000/tcp hai_cli_1 36f6e20bf22e docksal/apache:2.4-2.5 "httpd-foreground" 7 hours ago Up 7 hours (healthy) 80/tcp, 443/tcp gofer_web_1 581cbae1a3dc docksal/cli:php8.1-3.2 "/opt/startup.sh sup…" 7 hours ago Up 7 hours (healthy) 22/tcp, 3000/tcp, 9000/tcp gofer_cli_1 e27c34eadeb7 docksal/db:1.1-mysql-5.7 "/entrypoint.sh mysq…" 7 hours ago Up 7 hours 0.0.0.0:51657->3306/tcp gofer_db_1 ce93cd3b0371 docksal/mariadb:10.6-1.3 "docker-entrypoint.s…" 4 weeks ago Up 4 hours (healthy) 127.0.0.1:55002->3306/tcp hai_db_1 ███ DOCKER: NETWORKS NETWORK ID NAME DRIVER SCOPE 546a35a3eed9 _default bridge local 20b882a2b03d bridge bridge local cae2931d03b6 fms_default bridge local 2ade4a2784f5 gofer_default bridge local ec563de9d044 hai_default bridge local 05c6549685d6 host host local 820a711067fe none null local b706eea4a6b3 simplenews_default bridge local 8557d0905fb0 site_default bridge local eb585f477321 tracers_default bridge local ███ DOCKER DESKTOP EXPECTED VERSION: 4.4.2 DETECTED VERSION: 4.10.1 ███ HDD Usage Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1s1s1 466Gi 14Gi 176Gi 8% 501138 1841224560 0% / devfs 191Ki 191Ki 0Bi 100% 662 0 100% /dev /dev/disk1s5 466Gi 4.0Gi 176Gi 3% 4 1841224560 0% /System/Volumes/VM /dev/disk1s3 466Gi 456Mi 176Gi 1% 3061 1841224560 0% /System/Volumes/Preboot /dev/disk1s6 466Gi 3.8Mi 176Gi 1% 18 1841224560 0% /System/Volumes/Update /dev/disk1s2 466Gi 270Gi 176Gi 61% 6106867 1841224560 0% /System/Volumes/Data map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /System/Volumes/Data/home ```
sean-e-dietrich commented 2 years ago

Thank you @mdyoung3 I have a new PR over in the CLI project to upgrade these versions.

The fix i was able to do is that composer plugins should be set to an empty object {} and then run composer install and all should be better now.

mdyoung3 commented 2 years ago

Thanks, @sean-e-dietrich

Unfortunately, no else on my team uses Docksal, but another workaround is to use an updated version of composer on my native OS. Which isn't a big deal.