{ "uuid": [ { "value": "0c899647-4916-4ad6-bde0-5ae1f397cc13" } ], "langcode": [ { "value": "en" } ], "type": [ { "target_id": "daily_email", "target_type": "node_type", "target_uuid": "8bde1f2f-eef9-4f2d-ae9c-96921f8193d7" } ], "revision_timestamp": [ { "value": "2025-05-11T09:00:08+00:00" } ], "revision_uid": [ { "target_type": "user", "target_uuid": "b8966985-d4b2-42a7-a319-2e94ccfbb849" } ], "revision_log": [], "status": [ { "value": true } ], "uid": [ { "target_type": "user", "target_uuid": "b8966985-d4b2-42a7-a319-2e94ccfbb849" } ], "title": [ { "value": "Maintaining backward compatibility" } ], "created": [ { "value": "2024-07-30T00:00:00+00:00" } ], "changed": [ { "value": "2025-05-11T09:00:08+00:00" } ], "promote": [ { "value": false } ], "sticky": [ { "value": false } ], "default_langcode": [ { "value": true } ], "revision_translation_affected": [ { "value": true } ], "path": [ { "alias": "\/daily\/2024\/07\/30\/maintaining-backward-compatibility", "langcode": "en" } ], "body": [ { "value": "\n
I've recently decided I'm going to open source Build Configs tool<\/a> that I use to generate build configuration files for Drupal, Sculpin and Fractal projects.<\/p>\n\n Inspired by Workspace<\/a> and others, and based on previous versions of similar tools - most recently by TheAltF4Stream's project with the same name<\/a> (which is written in Rust and supports different template types) - I've been using this tool to manage configuration files for various personal, client and open-source projects.<\/p>\n\n Before I open-source it, there are some changes I'd like to make, such as renaming some template types and updating the format and keys within the configuration file.<\/p>\n\n Changes to the configuration file would be a breaking change and, whilst it's only me using it, I want my other projects to keep working and for me to continue supporting the prior versions - at least for now, so I want to make sure any changes are backward compatible.<\/p>\n\n There are four steps performed when generating files for a project:<\/p>\n\n If I change But, I have an opportunity within the first step to perform any normalisation that's needed and to provide a compatibility layer - such as changing I also renamed This means the validation step will receive valid data that it can use and the new changes have been encapsulated within a single step of the process. I haven't needed to change any code elsewhere.<\/p>\n\n I can also add deprecation warnings if legacy values are used.<\/p>\n\n Similar to feature flags, this is temporary code that will later be removed when I'm ready to remove the compatibility layer, similar to how In the future, I can refactor the internal logic to use a different approach and when I'm ready, eventually remove the compatibility layer and tag a new major version with the breaking changes.<\/p>\n\n ",
"format": "full_html",
"processed": "\n I've recently decided I'm going to open source Build Configs tool<\/a> that I use to generate build configuration files for Drupal, Sculpin and Fractal projects.<\/p>\n\n Inspired by Workspace<\/a> and others, and based on previous versions of similar tools - most recently by TheAltF4Stream's project with the same name<\/a> (which is written in Rust and supports different template types) - I've been using this tool to manage configuration files for various personal, client and open-source projects.<\/p>\n\n Before I open-source it, there are some changes I'd like to make, such as renaming some template types and updating the format and keys within the configuration file.<\/p>\n\n Changes to the configuration file would be a breaking change and, whilst it's only me using it, I want my other projects to keep working and for me to continue supporting the prior versions - at least for now, so I want to make sure any changes are backward compatible.<\/p>\n\n There are four steps performed when generating files for a project:<\/p>\n\n If I change But, I have an opportunity within the first step to perform any normalisation that's needed and to provide a compatibility layer - such as changing I also renamed This means the validation step will receive valid data that it can use and the new changes have been encapsulated within a single step of the process. I haven't needed to change any code elsewhere.<\/p>\n\n I can also add deprecation warnings if legacy values are used.<\/p>\n\n Similar to feature flags, this is temporary code that will later be removed when I'm ready to remove the compatibility layer, similar to how In the future, I can refactor the internal logic to use a different approach and when I'm ready, eventually remove the compatibility layer and tag a new major version with the breaking changes.<\/p>\n\n ",
"summary": null
}
],
"feeds_item": [
{
"imported": "1970-01-01T00:33:45+00:00",
"guid": null,
"hash": "a38ce17b89e3700c2d33876324be5747",
"target_type": "feeds_feed",
"target_uuid": "90c85284-7ca8-4074-9178-97ff8384fe76"
}
]
}How it works<\/h2>\n\n
\n
sculpin<\/code> to
sculpin-site<\/code> in a configuration file, for example, it will fail the validation step.<\/p>\n\n
sculpin-site<\/code>, which is an invalid value, to
sculpin<\/code>.<\/p>\n\n
symfony<\/code> to
symfony-cli<\/code> by performing the same step.<\/p>\n\n
Here's the thing<\/h2>\n\n
drupal_set_message()<\/code> was deprecated and changed to use the
Messenger<\/code> service before being removed in Drupal 9.<\/p>\n\n
How it works<\/h2>\n\n
\n
sculpin<\/code> to
sculpin-site<\/code> in a configuration file, for example, it will fail the validation step.<\/p>\n\n
sculpin-site<\/code>, which is an invalid value, to
sculpin<\/code>.<\/p>\n\n
symfony<\/code> to
symfony-cli<\/code> by performing the same step.<\/p>\n\n
Here's the thing<\/h2>\n\n
drupal_set_message()<\/code> was deprecated and changed to use the
Messenger<\/code> service before being removed in Drupal 9.<\/p>\n\n