Guidelines for Dependencies

We care about composer.json unity across all repositories, and we try to avoid hidden dependencies. So, we created a few rules we follow.

External dependencies

We use asterisk * notation for PHP extensions.

We use caret ^ notation for external dependencies, and if there are more major versions possible, we use single pipe | notation without spaces. For example ^6.2.0, ^7.0, ^5.0|^6.0|^7.0.4.

If there is a problem, you can stabilize the dependency in a patch version, for example, 6.4.2. Please do it in a separate commit with an explanation in the commit message.

Working with dependencies

After you change a dependency in a package or project-base, you must obviously reflect the change in the composer.json of a given package.

Packages' composer.json files are not used automatically during development in the monorepo. Monorepo uses root composer.json to contain all packages' dependencies. Monorepo dependencies are managed manually. If you add or change any dependency in a package or project-base, reapply the change into monorepo composer.json.

How to deal with Shopsys dependencies

If the package or project-base depends on a shopsys package, we declare dev-master dependency. We will change dev-master dependency to a released tag like v7.0.0-alpha1 during the release.

Note

During composer installation there will be installed 3-rd party software as dependencies of Shopsys Platform with licenses that are described in the document Open Source License Acknowledgements and Third-Party Copyrights