Problem/Motivation

Migration plugins throughout core and contrib keep having to do this sort of thing:

$delimiter = isset($this->configuration['delimiter']) ? $this->configuration['delimiter'] : '';

Proposed resolution

Implementing https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Component%21Plug... means that plugins can define default values for any configuration in defaultConfiguration().

The result is:
- better DX as you don't have to keep checking array values in $this->configuration are defined
- better DX as the default value for something in $this->configuration is in one place only
- better DX as there's a place where all the configuration options for the class are listed (well the class docs should have that too... but it nudges modules that are lax on docs towards listing them)

This can be done in SourcePluginBase, ProcessPluginBase, & DestinationBase.

To facilitate this, create an @internal ConfigurablePluginTrait in the migrate module to use with migration base plugins. There is discussion to do this in the core plugin system in #2852463: Create a trait and base class to implement \Drupal\Component\Plugin\ConfigurableInterface, however for the migration plugins we want to prevent use of the calculateDependencies method from the interface, as these plugins are not configurations and do not use dependencies. Depending on the outcome of that issue and #2946122: Deprecate ConfigurablePluginInterface and replace with an interface that doesn't extend DependentPluginInterface there may be a future core plugin library solution to address this, and refactoring the migration plugins around a module trait now will make that process much easier, and provide immediate benefits in cleaning up the plugin code. Making the trait @internal will make sure we can refactor around any potential plugin library solution in the future.

Remaining tasks

Postponed on #2852463: Create a trait and base class to implement \Drupal\Component\Plugin\ConfigurableInterface
Create an @internal ConfigurablePluginTrait use with migration base plugins.
Implement ConfigurablePluginInterface in the migration base classes and use the trait. Remove the interface from any core classes that extend these base classes.
Remove unused calculateDependencies() methods from core migration plugins as these plugins are not config entities.

Commit it!
As a follow up to this issue, refactor plugins to set default configurations and remove unnecessary isset() calls. @see #2995393: Refactor migrations plugins that now implement ConfigurablePluginInterface

User interface changes

None.

API changes

None.

Data model changes

None.

CommentFileSizeAuthor
#60 Interdiff.2937177.57-60.txt899 bytesmikelutz
#60 2937177-60.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch27.51 KBmikelutz
#57 interdiff.2937177.54-57.txt775 bytesmikelutz
#57 2937177-57.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch27.16 KBmikelutz
#54 interdiff.2937177.50-54.txt708 bytesmikelutz
#54 2937177-54.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch27.05 KBmikelutz
#52 interdiff.2937177.46-50.txt2.29 KBmikelutz
#50 interdiff.2937177.48-50.txt12.57 KBmikelutz
#50 2937177-50.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch27.06 KBmikelutz
#48 interdiff.2937177.47-48.txt820 bytesmikelutz
#48 2937177-48.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch39.63 KBmikelutz
#47 interdiff.2937177.46-47.txt14.99 KBmikelutz
#47 2937177-47.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch39.76 KBmikelutz
#46 interdiff.2937177.41-46.txt9.2 KBmikelutz
#46 2937177-46.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch24.77 KBmikelutz
#41 interdiff.2937177.39-41.txt2.67 KBmikelutz
#41 2937177-41.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch20.66 KBmikelutz
#39 interdiff.2937177.38-39.txt4.66 KBmikelutz
#39 2937177-39.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch21.5 KBmikelutz
#38 2937177-38.patch19.73 KBheddn
#38 interdiff_37-38.txt840 bytesheddn
#37 interdiff.2937177.33-37.txt4.72 KBmikelutz
#37 2937177-37.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch19.51 KBmikelutz
#33 interdiff.2937177.32-33.txt4.02 KBmikelutz
#33 2937177-33.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch15.99 KBmikelutz
#32 interdiff.2937177.29-32.txt3.53 KBmikelutz
#32 2937177-32.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch14.38 KBmikelutz
#29 2937177-27.patch11.28 KBheddn
#27 interdiff_24-27.txt1.02 KBheddn
#27 interdiff_24-27.txt1.02 KBheddn
#24 interdiff_23-24.txt2.29 KBheddn
#24 2937177-24.patch10.27 KBheddn
#23 interdiff_21-23.txt1.77 KBheddn
#23 2937177-23.patch11.1 KBheddn
#21 interdiff.2937177.16-21.txt6.59 KBmikelutz
#21 2937177-21.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch10.03 KBmikelutz
#16 2937177-16.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch10.31 KBmikelutz
#16 interdiff.2937177.10-16.txt2.23 KBmikelutz
#15 Screen Shot 2018-03-26 at 3.47.46 PM.png176.07 KBrobpowell
#10 2937177-10.patch8.65 KBheddn
#10 interdiff_7-10.txt6.23 KBheddn
#7 2937177-7.patch7.88 KBheddn

Issue fork drupal-2937177

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

joachim created an issue. See original summary.

phenaproxima’s picture

+1 for this idea!

heddn’s picture

+1 on the idea.

heddn’s picture

Issue tags: +Novice

Tagging novice. Basically, we'd be doing what is happening over in #2911242-24: Create field collections source migrate plugin. Based on my reading of the related issues, let's introduce this with @TODO's in it to resolve after or with #2852463: Create a trait and base class to implement \Drupal\Component\Plugin\ConfigurableInterface. I'm thinking it makes sense to do this work independently of the related issue, since we can probably move faster in a single module than for the entire plugin system.

joachim’s picture

> I'm thinking it makes sense to do this work independently of the related issue, since we can probably move faster in a single module than for the entire plugin system.

Yes, I think that's better than my suggestion.

When the plugin system provides the trait or base class in #2852463: Create a trait and base class to implement \Drupal\Component\Plugin\ConfigurableInterface, the Migrate plugin base classes can seamlessly switch over to importing/inheriting.

heddn’s picture

Status: Active » Needs review
StatusFileSize
new7.88 KB

It is interesting that we also have to implement calculateDependencies(). I'd be interested in feedback, and if tests pass green.

heddn’s picture

I see the history of things is that the configurable plugin interface came out of field plugins over in #2271419: Allow field types, widgets, formatters to specify config dependencies. And the calculateDependencies comes from that. I wonder if we need a configurable plugin interface in the plugin system that doesn't require that method?

Status: Needs review » Needs work

The last submitted patch, 7: 2937177-7.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

heddn’s picture

Title: migrate plugin base classes should implement ConfigurablePluginInterface » Migrate plugin base classes should implement ConfigurablePluginInterface
Status: Needs work » Needs review
StatusFileSize
new6.23 KB
new8.65 KB

Here, I've forked the upstream ConfigurablePluginInterface from the plugin system. Because we do not need/want calculateDependencies(). Depending how this fares here, we might want to consider doing that fork upstream too.

Status: Needs review » Needs work

The last submitted patch, 10: 2937177-10.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

joachim’s picture

> https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Component%21Plug...

Reading the docs for that, it looks like the assumption is that a configured plugin is going to be stored inside a config entity, and that therefore that config entity needs to ask the plugin for any dependencies to add to itself.

That's not the case in Migrate IIRC, and also in parts of contrib, e.g. Commerce uses configurable plugins on content entities (which don't care about config dependencies).

So definitely a case for filing an upstream task for adding a parent to ConfigurablePluginInterface.

heddn’s picture

mikelutz’s picture

Status: Postponed » Active

#2946122: Deprecate ConfigurablePluginInterface and replace with an interface that doesn't extend DependentPluginInterface is in progress, but the decision was to continue to use ConfigurablePluginInterface and require DependentPluginInterface to be implemented separately starting in Drupal 9. As such, we can go ahead with implementing ConfigurablePluginInterface as-is.

This was discussed in the weekly maintainers meeting, so I'm reactivating the issue.

robpowell’s picture

StatusFileSize
new176.07 KB

I am queuing up for a test against 8.6.x. When I try to test this locally in phpstorm I get the following errors for all the test data:

Argument 2 passed to Drupal\migrate\ProcessPluginBase::__construct() must be an instance of Drupal\migrate\string, string given, called in /Users/rob/docksal/drupal_core/docroot/core/modules/field/src/Plugin/migrate/process/ProcessField.php on line 85 and defined

phpstorm testing window with error message 'must be an instance of Drupal\migrate\string, string given'

I am not sure if this is a local issue which is why I want to run the tests again.

mikelutz’s picture

StatusFileSize
new2.23 KB
new10.31 KB

This is due to a bad test ($value shouldn't be passed as the plugin_id in the test because $value could be an array and $plugin_id should be a string) combined with the wrong constructor signature (scalar string should not be in the function definition, breaks older versions of php)

SqlTest also needed to have the setConfiguration method it defined in its test class removed to be compatible with the new interface.

mikelutz’s picture

Status: Active » Needs review
pifagor’s picture

1 on the idea

pifagor’s picture

heddn’s picture

Status: Needs review » Needs work
  1. +++ b/core/modules/migrate/src/Plugin/migrate/ConfigurablePluginInterface.php
    @@ -0,0 +1,41 @@
    + * This is very similar to the plugin system's ConfigurablePluginInterface,
    ...
    +interface ConfigurablePluginInterface {
    

    I thought we had discussed using plugin system's ConfigurablePluginInterface. Then we could get rid of this interface.

  2. +++ b/core/modules/migrate/src/Plugin/migrate/ConfigurablePluginTrait.php
    @@ -0,0 +1,50 @@
    +trait ConfigurablePluginTrait {
    

    If we use the plugin system's interface, then let's implement calculateDependencies as Final in the trait. So nothing can expand on it and its easy to remove later.

mikelutz’s picture

This patch goes back to the core ConfigurablePluginInterface.

I can't implement calculateDependencies as final because it prevents extensions from implementing DependentPluginInterface.

Extensions should be allowed to override calculateDependencies provided they directly implement DependentPluginInterface. Currently \Drupal\migrate\Plugin\migrate\destination\Entity does this.

heddn’s picture

Why does Entity need to implement calculateDependencies? It isn't a config destination? Seems like a hold over from pre 8.1 when these things were still config.

heddn’s picture

Version: 8.5.x-dev » 8.6.x-dev
StatusFileSize
new11.1 KB
new1.77 KB
heddn’s picture

StatusFileSize
new10.27 KB
new2.29 KB

The configuration needs to preserve the array keys, so made that change here. Also cleaned up doc comments.

The last submitted patch, 23: 2937177-23.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

Status: Needs review » Needs work

The last submitted patch, 24: 2937177-24.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

heddn’s picture

Status: Needs work » Needs review
StatusFileSize
new1.02 KB
new1.02 KB

This hopefully fixes up some tests. The few I randomly picked returned green in local testing.

phenaproxima’s picture

Looks like tests are still failing...?!

heddn’s picture

StatusFileSize
new11.28 KB

Ooops. Let's upload the actual patch.

Status: Needs review » Needs work

The last submitted patch, 29: 2937177-27.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

Version: 8.6.x-dev » 8.7.x-dev

Drupal 8.6.0-alpha1 will be released the week of July 16, 2018, which means new developments and disruptive changes should now be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

mikelutz’s picture

StatusFileSize
new14.38 KB
new3.53 KB

This should fix a bunch more of the errors..

mikelutz’s picture

Lets try one more to fix the last test and zap some coding standard issues.

mikelutz’s picture

Do we want to rewrite the base plugins to make use of this in this issue, or do we want to get this committed and then refactor them in a separate issue?

heddn’s picture

Status: Needs work » Needs review

The patch here is fairly small and easy to review. It also proves we have a complete set of functionality so let's proceed with it all in a single patch, for now.

heddn’s picture

Status: Needs review » Needs work
Issue tags: -Novice +Needs tests
  1. +++ b/core/modules/migrate/src/Plugin/migrate/ConfigurablePluginTrait.php
    @@ -0,0 +1,59 @@
    +    $this->configuration = NestedArray::mergeDeepArray([$this->defaultConfiguration(), $configuration], TRUE);
    

    Yes, this is perfect.

  2. +++ b/core/modules/migrate/src/Plugin/migrate/destination/Config.php
    @@ -213,7 +200,7 @@ public function getDestinationModule() {
    +    // which is of the form <module_name>.<configuration object name>.
    

    Stray change, maybe?

I don't see any explicit test of this, so maybe we should add some to this?

mikelutz’s picture

Codesniffer wanted a period at the end of the comment, but that hunk doesn't belong to this issue, I've removed it and added unit tests for the trait. I assume we will add/fix more tests when we actually refactor the plugins around this patch.

heddn’s picture

Issue tags: -Needs tests
StatusFileSize
new840 bytes
new19.73 KB

I like the explicit test coverage. One thing we might want though is a scenario with integer array keys. To test the preserve integer keys of mergeDeepArray. I've added an additional test for that. That is a very important scenario for some of our configurations.

mikelutz’s picture

StatusFileSize
new21.5 KB
new4.66 KB
diff --git a/core/modules/migrate/tests/src/Unit/Plugin/migrate/ConfigurablePluginTraitTest.php b/core/modules/migrate/tests/src/Unit/Plugin/migrate/ConfigurablePluginTraitTest.php
new file mode 100644
index 0000000000..d3e6c4b959
--- /dev/null
+++ b/core/modules/migrate/tests/src/Unit/Plugin/migrate/ConfigurablePluginTraitTest.php
@@ -0,0 +1,126 @@
+/**
+ * A test object using ConfigurablePluginTrait.
+ */
+class ConfigurablePluginTestClass {

That should have said "A test class using..."
I fixed that small doc issue that was bugging me, and expanded the testing a bit further to include a couple scenarios with integer keys.

maxocub’s picture

Status: Needs review » Needs work
  1. +++ b/core/modules/field/tests/src/Unit/Plugin/migrate/process/ProcessFieldTest.php
    @@ -60,7 +60,7 @@ public function testTransform($method, $value, $expected_value, $migrate_excepti
    +    $this->plugin = new ProcessField(['method' => $method], 'process_field', [], $this->cckFieldManager->reveal(), $this->fieldManager->reveal(), $this->migration->reveal());
    

    I don't understand this change. Is it really related to this patch?

  2. +++ b/core/modules/migrate/src/Plugin/migrate/ConfigurablePluginTrait.php
    @@ -0,0 +1,59 @@
    +  /**
    +   * Calculates configuration dependencies for the plugin.
    +   *
    +   * Migration plugins are not configuration, so they have no dependencies.
    +   */
    +  final public function calculateDependencies() {
    +    return [];
    +  }
    

    Should we create a D9 follow-up to remove this and add a todo here?

  3. +++ b/core/modules/migrate/tests/src/Unit/Plugin/migrate/ConfigurablePluginTraitTest.php
    @@ -0,0 +1,192 @@
    +        ]
    ...
    +        ]
    +      ]
    

    Nit: Missing commas.

  4. +++ b/core/modules/migrate/tests/src/Unit/Plugin/migrate/ConfigurablePluginTraitTest.php
    @@ -0,0 +1,192 @@
    +
    

    Nit: Extra line.

mikelutz’s picture

On 1, the test is flawed, and a previous version of this patch brought out the flaw and required fixing the test, but I believe the current version will still pass tests, so I've removed it and will reintroduce it in another issue.

for 2 I added a @todo, but I haven't created an issue, because depending on how #2852463: Create a trait and base class to implement \Drupal\Component\Plugin\ConfigurableInterface and
#2946122: Deprecate ConfigurablePluginInterface and replace with an interface that doesn't extend DependentPluginInterface play out, it may be removing that method or replacing that whole trait with a new core trait, I'm just not sure yet. I added a base @todo to remove it if/when the interface gets decoupled for now.

I addressed 3 and 4.

mikelutz’s picture

Status: Needs work » Needs review
maxocub’s picture

Issue summary: View changes
Status: Needs review » Needs work
Issue tags: +Needs issue summary update

The code looks pretty fine to me. Reading the comments I can't say I totally understand why we are removing the calculateDependencies() calls and the IS do not mention this. Maybe we could benefit from a short explanation in the IS as of why this was needed? Marking as NW & Needs IS update for that.

mikelutz’s picture

Issue summary: View changes
Status: Needs work » Needs review
heddn’s picture

Status: Needs review » Needs work
Issue tags: +Needs change record

Reviewed in migrate maintainers meeting with @maxocub @mikelutz @heddn. Obviously we need a CR. And I'd also like to see an example conversion of one field, source, process, destination, idmap, migration plugins. We'll add all the remaining "Convert all the things" in a follow-up, but this let's us prove things work.

mikelutz’s picture

In this patch we didn't add configurable plugin interface to idmap or field plugins. Neither really use configuration values, and I don't think they need to implement CPI. We did implement it for the migration plugin, but when I went to see about refactoring it, I noticed that in the constructor you have

    foreach (NestedArray::mergeDeep($plugin_definition, $configuration) as $key => $value) {
      $this->$key = $value;
    }

Which just sets anything passed in as a configuration as its own property. I definitely don't like this pattern, but changing it is a bigger refactor of the default migration plugin than I expected.

This patch refactors the Source base plugin and the sql source plugin, the process base plugin and the static map process plugin, and the entity base destination plugin.

mikelutz’s picture

Fix those two tests, and break a whole lot more...

If we go through with this migration refactor around configuration, we'll need to document the configuration keys better in the plugin.

mikelutz’s picture

Fixing a chunk of tests.

Status: Needs review » Needs work

The last submitted patch, 48: 2937177-48.drupal.Migrate-plugin-base-classes-should-implement-ConfigurablePluginInterface.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

mikelutz’s picture

After discussion with @phenaproxima I think we should hold off on implementing CPI in the migration plugin as well. Doing it right requires a greater refactoring which touches a number of issues in the migrate D9 plan. Implementing CPI there should be done in another issue as part of that broader context.

So this patch implements CPI for source, destination, and process plugins.

mikelutz’s picture

Issue tags: -Needs change record

Added CR

mikelutz’s picture

StatusFileSize
new2.29 KB

This is a more useful interdiff showing the fixed tests from #46

maxocub’s picture

Status: Needs review » Needs work

This looks pretty good. We now have example usage in source, process & destination plugins and all the tests are green. We also have a follow-up to refactor the rest of the migration plugins (#2995393: Refactor migrations plugins that now implement ConfigurablePluginInterface) and we have a change record (https://www.drupal.org/node/3005417).

I only found one nit that held me from RTBCing this patch:

+++ b/core/modules/migrate/tests/src/Unit/MigrateSourceTest.php
@@ -549,4 +534,15 @@ protected function initializeIterator() {
+  public function defaultConfiguration() {
+    return [
+        'skip_count' => TRUE,
+        'cache_counts' => TRUE,
+        'track_changes' => TRUE,
+      ] + parent::defaultConfiguration();
+  }

Too much indentation.

mikelutz’s picture

bah, good catch. There ya go. :-)

heddn’s picture

Status: Needs review » Needs work
+++ b/core/modules/migrate/src/Plugin/migrate/ConfigurablePluginTrait.php
@@ -0,0 +1,63 @@
+    $this->configuration = NestedArray::mergeDeepArray([$this->defaultConfiguration(), $configuration], TRUE);

Nit: we need a comment why we are using merge deep array.

phenaproxima’s picture

Issue tags: +API clean-up

Once the nit is fixed, this is RTBC from me. It's really nice to see this cleaned up.

mikelutz’s picture

Comment added.

phenaproxima’s picture

Status: Needs review » Reviewed & tested by the community

Nice. Thanks, @mikelutz! Let's get this in front of the committers.

larowlan’s picture

Status: Reviewed & tested by the community » Needs work
Issue tags: +Needs issue summary update

Hi folks, can we get an issue summary update explaining why we're doing our own trait in migrate instead of waiting for #2852463: Create a trait and base class to implement \Drupal\Component\Plugin\ConfigurableInterface - thanks

mikelutz’s picture

Issue summary: View changes
Status: Needs work » Needs review
StatusFileSize
new27.51 KB
new899 bytes

I've updated the IS, and after a slack discussion with @phenaproxima and @heddn, I've marked the trait as @internal to make it easier to refactor or remove if a core plugin solution exists in the future.

"To facilitate this, create an @internal ConfigurablePluginTrait in the migrate module to use with migration base plugins. There is discussion to do this in the core plugin system in #2852463: Create a trait and base class to implement \Drupal\Component\Plugin\ConfigurableInterface, however for the migration plugins we want to prevent use of the calculateDependencies method from the interface, as these plugins are not configurations and do not use dependencies. Depending on the outcome of that issue and #2946122: Deprecate ConfigurablePluginInterface and replace with an interface that doesn't extend DependentPluginInterface there may be a future core plugin library solution to address this, and refactoring the migration plugins around a module trait now will make that process much easier, and provide immediate benefits in cleaning up the plugin code. Making the trait @internal will make sure we can refactor around any potential plugin library solution in the future."

andypost’s picture

however for the migration plugins we want to prevent use of the calculateDependencies method from the interface, as these plugins are not configurations and do not use dependencies

But plugins live in modules so at least they should provide dependency on their provider, is not it?

phenaproxima’s picture

But plugins live in modules so at least they should provide dependency on their provider, is not it?

That is not a "calculated dependency" -- that's enforced by the plugin discovery system, which won't find plugins in modules that aren't enabled. Migrate does not need calculateDependencies() and does not use it.

phenaproxima’s picture

Status: Needs review » Reviewed & tested by the community
Issue tags: -Needs issue summary update

All looks good here. Thanks, @mikelutz! Back to RTBC.

mikelutz’s picture

Status: Reviewed & tested by the community » Postponed
megachriz’s picture

I look into this issue more later, for now I add the tag "Contributed project blocker" because this blocks Feeds Migrate. Feeds Migrate aims to provide an UI for Migrate plugins and therefore it needs Migrate plugins that have configuration be officially declared as configurable.

heddn’s picture

Issue tags: +Migrate critical

Triaging issue queue.

Version: 8.7.x-dev » 8.8.x-dev

Drupal 8.7.0-alpha1 will be released the week of March 11, 2019, which means new developments and disruptive changes should now be targeted against the 8.8.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

mikelutz’s picture

edmund.dunn’s picture

Assigned: Unassigned » edmund.dunn
Status: Needs work » Active
quietone’s picture

@edmund.dunn, hi, are you still planning to work on this?

quietone’s picture

Status: Active » Postponed

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.0-alpha1 will be released the week of October 14th, 2019, which means new developments and disruptive changes should now be targeted against the 8.9.x-dev branch. (Any changes to 8.9.x will also be committed to 9.0.x in preparation for Drupal 9’s release, but some changes like significant feature additions will be deferred to 9.1.x.). For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

wim leers’s picture

Title: Migrate plugin base classes should implement ConfigurablePluginInterface » [PP-1] Migrate plugin base classes should implement ConfigurablePluginInterface
andypost’s picture

Version: 8.9.x-dev » 9.1.x-dev

Version: 9.1.x-dev » 9.2.x-dev

Drupal 9.1.0-alpha1 will be released the week of October 19, 2020, which means new developments and disruptive changes should now be targeted for the 9.2.x-dev branch. For more information see the Drupal 9 minor version schedule and the Allowed changes during the Drupal 9 release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Drupal 9.2.0-alpha1 will be released the week of May 3, 2021, which means new developments and disruptive changes should now be targeted for the 9.3.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

quietone’s picture

Assigned: edmund.dunn » Unassigned
Issue summary: View changes
mikelutz’s picture

Title: [PP-1] Migrate plugin base classes should implement ConfigurablePluginInterface » Migrate plugin base classes should implement ConfigurablePluginInterface
Status: Postponed » Active

This is now unblocked

Version: 11.x-dev » main

Drupal core is now using the main branch as the primary development branch. New developments and disruptive changes should now be targeted to the main branch.

Read more in the announcement.