Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch to Doctrine/Migrations 3.0 #205

Merged
merged 11 commits into from
Sep 22, 2020
Merged

Switch to Doctrine/Migrations 3.0 #205

merged 11 commits into from
Sep 22, 2020

Conversation

pamil
Copy link
Contributor

@pamil pamil commented Apr 24, 2020

Related to Sylius/Sylius#11389.

@pamil pamil added Enhancement Minor issues and PRs improving the current solutions (optimizations, typo fixes, etc.). Maintenance Configurations, READMEs, releases, etc. labels Apr 24, 2020
@pamil pamil requested a review from a team as a code owner April 24, 2020 12:22
pamil added a commit to Sylius/Sylius that referenced this pull request Aug 24, 2020
This PR was merged into the 1.8-dev branch.

Discussion
----------

### Customisations
 - [x] Decorated migration factory to support migrations implementing `ContainerAwareInterface` - done in CoreBundle
 - [x] Added topology-based version comparator in CoreBundle to achieve the following order:
   - Sylius/Sylius
   - Plugins (Sylius/PluginSkeleton: Sylius/InvoicingPlugin, Sylius/RefundPlugin)
   - Sylius/Plus 
   - End-user application (Sylius/Sylius-Standard)

### Concerns
 - [x] **Q:** Currently, migrations are doubled in `app/migrations` and `src/Sylius/Bundle/CoreBundle/Migrations` - could we safely delete the ones in `app/migrations`?

    **A:** It should be possible to delete them in the next minor release - while migrating migrations database, it correctly assigns FQCN of the migration by its timestamp. However, we need to figure out how to upgrade existing apps, especially after we recommended copying migrations to the end-user's project before.

 - [x] **Q:** All the migrations exist in CoreBundle, even though some of them contain SQL queries related to AdminApiBundle - what's the best way to tackle that (one might not use AdminApiBundle but only CoreBundle)? Should we split them into two bundles? If so, how to do it and allow for a seamless upgrade?

    **A:** They can be safely extracted to AdminApiBundle as long as there are no migrations mixing both CoreBundle and AdminApiBundle. In that case, I'm not sure what's the best solution - probably skipping some of them if AdminApiBundle is not installed.

### Up next for upgrade to migrations 3.0-alpha
 - [ ] Sylius-Standard
 - [ ] PluginSkeleton
 - [x] InvoicingPlugin - Sylius/InvoicingPlugin#175
 - [x] RefundPlugin - Sylius/RefundPlugin#205
 - [x] Plus (requiring InvoicingPlugin and RefundPugin) - https://github.com/Sylius/Plus/pull/575

### TODO

1. [x] Extract related utilities (comparator and factory) to a standalone package (SyliusLabs/DoctrineMigrationsExtraBundle?) with a following configuration schema:
   ```yaml
   sylius_labs_doctrine_migrations_extra:
      migrations:
         "Sylius\InvoicingPlugin\Migrations": ["Sylius\Bundle\CoreBundle\Migrations"]
   ```
   Tests need to be added for both those services, configuration and DI extension.

2. [x] Use bundle notation for specifying migrations instead of prepending `doctrine_migrations` with relative paths, see doctrine/DoctrineMigrationsBundle#318.

3. [x] Decouple CoreBundle migrations from AdminApiBundle (either conditionally add them or move somehow to AdminApiBundle, while maintaining BC - after running all migrations on `master` branch, checking in this branch should result in no additional migrations)

4. [ ] Spread those changes to all the repositories mentioned above

### References
 - https://www.goetas.com/blog/multi-namespace-migrations-with-doctrinemigrations-30/
 - https://www.goetas.com/blog/released-doctrinemigrations-30-alpha/
 - doctrine/migrations#967
 - doctrine/DoctrineMigrationsBundle#314

Commits
-------

0bf2c7e Move existing migrations to Sylius\Bundle\CoreBundle\Migrations
66ef7dd Allow injecting container to the migrations & implement a topology-based sorter
aca4fd2 Split migrations between CoreBundle & AdminApiBundle
0d22ea0 Improve SyliusCoreExtension prepend logic
@GSadee GSadee changed the title [WIP] Switch to Doctrine/Migrations 3.0-alpha Switch to Doctrine/Migrations 3.0-alpha Sep 18, 2020
@GSadee GSadee changed the title Switch to Doctrine/Migrations 3.0-alpha Switch to Doctrine/Migrations 3.0 Sep 22, 2020
@@ -17,7 +17,7 @@ public function __construct(RemainingTotalProviderInterface $remainingTotalProvi
$this->remainingTotalProvider = $remainingTotalProvider;
}

public function calculateForUnitWithIdAndType(int $id, RefundType $refundType, ?float $amount = null)
public function calculateForUnitWithIdAndType(int $id, RefundType $refundType, ?float $amount = null): int
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small bc-break

@@ -8,5 +8,5 @@

interface UnitRefundTotalCalculatorInterface
{
public function calculateForUnitWithIdAndType(int $id, RefundType $refundType, ?float $amount = null);
public function calculateForUnitWithIdAndType(int $id, RefundType $refundType, ?float $amount = null): int;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small bc-break

@lchrusciel lchrusciel merged commit 9a7973d into master Sep 22, 2020
@lchrusciel
Copy link
Member

lchrusciel commented Sep 22, 2020

Thanks, Kamil and Grzegorz! 🎉

@lchrusciel lchrusciel deleted the migrations-alpha branch September 22, 2020 08:05
@Zales0123 Zales0123 restored the migrations-alpha branch November 17, 2020 12:29
@Zales0123 Zales0123 deleted the migrations-alpha branch November 17, 2020 12:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Enhancement Minor issues and PRs improving the current solutions (optimizations, typo fixes, etc.). Maintenance Configurations, READMEs, releases, etc.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants