flow icon indicating copy to clipboard operation
flow copied to clipboard

Make an inventory of required php extensions

Open norberttech opened this issue 1 year ago • 3 comments

I noticed that probably not all compoer.json files from flow packages are fully up to date, especially about the required extensions. Those are all extensions the monorepo requires (some might not be used by any packages)

  "ext-bcmath": "*",
  "ext-dom": "*",
  "ext-hash": "*",
  "ext-json": "*",
  "ext-mbstring": "*",
  "ext-xml": "*",
  "ext-xmlreader": "*",
  "ext-xmlwriter": "*",
  "ext-zlib": "*"

We need to walk through all packages and check which one is needed by which package.

src
├── src/adapter
│   ├── src/adapter/etl-adapter-avro
│   │   ├── src/adapter/etl-adapter-avro/composer.json
│   ├── src/adapter/etl-adapter-chartjs
│   │   ├── src/adapter/etl-adapter-chartjs/composer.json
│   ├── src/adapter/etl-adapter-csv
│   │   ├── src/adapter/etl-adapter-csv/composer.json
│   ├── src/adapter/etl-adapter-doctrine
│   │   ├── src/adapter/etl-adapter-doctrine/composer.json
│   ├── src/adapter/etl-adapter-elasticsearch
│   │   ├── src/adapter/etl-adapter-elasticsearch/composer.json
│   ├── src/adapter/etl-adapter-google-sheet
│   │   ├── src/adapter/etl-adapter-google-sheet/composer.json
│   ├── src/adapter/etl-adapter-http
│   │   ├── src/adapter/etl-adapter-http/composer.json
│   ├── src/adapter/etl-adapter-json
│   │   ├── src/adapter/etl-adapter-json/composer.json
│   ├── src/adapter/etl-adapter-logger
│   │   ├── src/adapter/etl-adapter-logger/composer.json
│   ├── src/adapter/etl-adapter-meilisearch
│   │   ├── src/adapter/etl-adapter-meilisearch/composer.json
│   ├── src/adapter/etl-adapter-parquet
│   │   ├── src/adapter/etl-adapter-parquet/composer.json
│   ├── src/adapter/etl-adapter-text
│   │   ├── src/adapter/etl-adapter-text/composer.json
│   └── src/adapter/etl-adapter-xml
│       ├── src/adapter/etl-adapter-xml/composer.json
├── src/bridge
│   ├── src/bridge/filesystem
│   │   ├── src/bridge/filesystem/async-aws
│   │   │   ├── src/bridge/filesystem/async-aws/composer.json
│   │   └── src/bridge/filesystem/azure
│   │       ├── src/bridge/filesystem/azure/composer.json
│   ├── src/bridge/monolog
│   │   └── src/bridge/monolog/http
│   │       ├── src/bridge/monolog/http/composer.json
│   └── src/bridge/symfony
│       └── src/bridge/symfony/http-foundation
│           ├── src/bridge/symfony/http-foundation/composer.json
├── src/cli
│   ├── src/cli/composer.json
├── src/core
│   └── src/core/etl
│       ├── src/core/etl/composer.json
├── src/lib
│   ├── src/lib/array-dot
│   │   ├── src/lib/array-dot/composer.json
│   ├── src/lib/azure-sdk
│   │   ├── src/lib/azure-sdk/composer.json
│   ├── src/lib/doctrine-dbal-bulk
│   │   ├── src/lib/doctrine-dbal-bulk/composer.json
│   ├── src/lib/dremel
│   │   ├── src/lib/dremel/composer.json
│   ├── src/lib/filesystem
│   │   ├── src/lib/filesystem/composer.json
│   ├── src/lib/parquet
│   │   ├── src/lib/parquet/composer.json
│   ├── src/lib/parquet-viewer
│   │   ├── src/lib/parquet-viewer/composer.json
│   ├── src/lib/rdsl
│   │   ├── src/lib/rdsl/composer.json
│   └── src/lib/snappy
│       ├── src/lib/snappy/composer.json

norberttech avatar Jan 08 '25 16:01 norberttech

As a first step we can just put the inventory in the comment, without making any changes/adjustments in the code since there might be some improvements needed like in case of #1347

norberttech avatar Jan 08 '25 16:01 norberttech

  1. As for the extensions from the composer.json files, excluding those from external dependencies, the list is as follows:

    • ext-bcmath: -> src/lib/parquet/composer.json
    • ext-dom: -> src/adapter/etl-adapter-xml/composer.json
    • ext-hash: -> src/adapter/etl-adapter-elasticsearch/composer.json -> src/adapter/etl-adapter-meilisearch/composer.json
    • ext-json: -> src/adapter/etl-adapter-avro/composer.json -> src/adapter/etl-adapter-elasticsearch/composer.json -> src/adapter/etl-adapter-http/composer.json -> src/adapter/etl-adapter-json/composer.json -> src/adapter/etl-adapter-meilisearch/composer.json -> src/adapter/etl-adapter-parquet/composer.json -> src/core/etl/composer.json
    • ext-mbstring: -> src/core/etl/composer.json
    • ext-xml: -> src/adapter/etl-adapter-xml/composer.json
    • ext-xmlreader: -> src/adapter/etl-adapter-xml/composer.json
    • ext-xmlwriter: -> src/adapter/etl-adapter-xml/composer.json
    • ext-zlib: -> src/lib/parquet/composer.json
  2. With external dependencies:

    • ext-bcmath: -> src/lib/parquet/composer.json
    • ext-dom: -> src/adapter/etl-adapter-xml/composer.json -> vendor/openspout/openspout/composer.json -> vendor/async-aws/s3/composer.json
    • ext-fileinfo: -> vendor/openspout/openspout/composer.json
    • ext-filter: -> vendor/openspout/openspout/composer.json -> vendor/async-aws/s3/composer.json
    • ext-hash: -> src/adapter/etl-adapter-elasticsearch/composer.json -> src/adapter/etl-adapter-meilisearch/composer.json -> vendor/async-aws/s3/composer.json
    • ext-json: -> src/adapter/etl-adapter-avro/composer.json -> src/adapter/etl-adapter-elasticsearch/composer.json -> src/adapter/etl-adapter-http/composer.json -> src/adapter/etl-adapter-json/composer.json -> src/adapter/etl-adapter-meilisearch/composer.json -> src/adapter/etl-adapter-parquet/composer.json -> src/core/etl/composer.json -> vendor/meilisearch/meilisearch-php/composer.json
    • ext-libxml: -> vendor/openspout/openspout/composer.json
    • ext-mbstring: -> src/core/etl/composer.json
    • ext-simplexml: -> vendor/async-aws/s3/composer.json
    • ext-xml: -> src/adapter/etl-adapter-xml/composer.json
    • ext-xmlreader: -> src/adapter/etl-adapter-xml/composer.json -> vendor/openspout/openspout/composer.json
    • ext-xmlwriter: -> src/adapter/etl-adapter-xml/composer.json
    • ext-zip: -> vendor/openspout/openspout/composer.json
    • ext-zlib: -> src/lib/parquet/composer.json

andrewprofile avatar Jul 03 '25 20:07 andrewprofile

Nice!

What we need to do with them is:

  • put all mandatory "not bundled with symfoy" extensions in composer.json of packages that are using them (even if this extension is required only by a dependency or dependency of dependency)
  • try to replace those that can be replaced with polyfills (like symfony mbstring)
  • make sure that monorepo composer.json contains them all

norberttech avatar Jul 04 '25 01:07 norberttech