Composer

Maestro\Composer\Task\ComposerTask

Manage composer JSON and update dependencies.

Parameters

  • require Use composer to require packages (package => version) - array<string, string>

  • requireDev Use composer to require dev packages (package => version) - array<string, string>

  • remove Use composer to remove packages - list<string>

  • dev Add requirements to require-dev - bool

  • intersection Only update packages if are already included in the existing composer.json (i.e. do not add packages) - bool

  • composerBin Name of composer executable (will be detected automatically if omitted) - string

  • update If composer update/install should be executed - bool

  • satisfactory Do not update a dependency if it is already satisfied by the existing constraint - bool

  • withAllDependencies Include dependencies when performing an update (--with-all-dependencies flag) - bool

  • runScripts Run composer scripts on update - bool

Description

This task manipulates composer.json, uses the composer and provides package information to downstream tasks.

  • Require and remove packages,

  • Perform a composer update.

  • Create composer.json if it doesn’t exist.

  • Creates the Maestro\Composer\Fact\ComposerJsonFact

Require / remove packages

The require package is the same as it’s composer.json equivilent:

new ComposerTask(
    require: [
        "my-package" => "^1.0"
    ]
)

NOTE: If the package exists in exactly the same version the operation will be skipped (i.e. it is idempotent). Removal:

new ComposerTask(
    remove: [
        "my-package"
    ]
)

If you only wish to update existing packages (useful if you want to ensure that a certain version of a package is shared by all your packgaes) you can use the intersection option:

new ComposerTask(
    intersection: true,
    requireDev: [
        "phpstan/phpstan" => "^0.12",
        "phpunit/phpunit" => "^9.0",
        "infection/infection" => "^18.0"
    ]
)

Above we update the (dev) version of these packages only if they are found in composer.json. If you only want to update packages if they are not within the bounds of the target constriant, use the satisfactory option:

new ComposerTask(
    satisfactory: true
    require: [
        "symfony/console" => "^5.3"
    ]
)

Above, given the symfony/console is already required as ^5.0 we will not update it as ^5.0 includes ^5.3

Update package

By default the task will not update composer. To update all packages:

new ComposerTask(
    update: true
)

To update only specific packages:

new ComposerTask(
    require: [
        'package/one' => '^1.0',
    ],
    update: true
)