/renovate-composer-local

Test package to demonstrate updating of local composer packages with Renovate.

Project Structure

The structure of this project is the current standard of modern TYPO3 projects based on composer. The theme and individual settings for a website are stored in a local composer package (called "site package" in the world of TYPO3). Individual extensions, which should not be publicly available, are also installed as local composer packages.

Local packages

Using local packages is based on local repositories, which is supported by composer (https://getcomposer.org/doc/05-repositories.md#path). A locally required package does not contain a version and is required in root composer.json by using composer req dahaupt/local-package:@dev (https://stackoverflow.com/a/39802804/7037467).

Current issues with Renovate

In case a local package declares another dependency (e.g. firebase/php-jwt within dahaupt/local-package), we have to execute composer update dahaupt/local-package in the project root in order to install the new sub-dependency firebase/php-jwt. If this new dependency now receives an update, currently only the version string in packages/local-package/composer.json is raised. In order for the project to really perform the update, the command composer update dahaupt/local-package -w or composer update firebase/php-jwt dahaupt/local-package must be executed in project root.

Conclusion:

Renovate would therefore need to detect that the dependency to be updated is in a local composer package, which would then also require the local composer package in the root composer.json to be updated.

PRs:

Both PRs basically are missing this update of the local package:

PR #2 - Expected composer command to update root composer.lock:

   composer update \
      typo3/cms-backend typo3/cms-core typo3/cms-extbase typo3/cms-extensionmanager \
      typo3/cms-filelist typo3/cms-fluid typo3/cms-frontend typo3/cms-install typo3/cms-recordlist \
      dahaupt/local-package \
      --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader

PR #3 - Expected composer command to update root composer.lock:

   composer update \
      dahaupt/local-package \
      firebase/php-jwt \
      --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader

Final question: Is there any existing mechanism to create this kind of logic?