自动创建用于将 TYPO3 升级到下一个主要版本的 Composer 命令

Automate creation of Composer command for upgrading TYPO3 to next major version

目前正在使用 TYPO3 v9 Composer 将 TYPO3 站点升级到下一个主要版本 10.4。

我如何自动化该过程 - 而不是手动将 composer 命令放在一起,我必须在其中检查每个扩展并找出我需要升级到哪个版本,有没有办法自动执行此操作或协助创建composer require 命令与所有系统和第三方扩展?

例如结果我想执行这个(或等效的):

composer require typo3/cms-backend:10.4 typo3/cms-core:10.4  ...(all system extension) \
... helhum/typo3-console:^6.0.0 ... (3rdparty extensions with correct version constraint) \
--update-with-dependencies 

自动更新是个好主意,因为它减少了后端 lock/content 冻结以重新启动所需的时间。

最终重新启动的步骤是:

  • 确保没有数据被更改:锁定后端,禁用任何会更改数据的前端表单。
  • fetch/sync 实时数据进入您的本地测试系统
  • 运行 更新脚本
  • upload/sync 将数据更新到实时系统上的某个临时位置
  • 暂时禁用实时网站
  • 将实时系统上的数据移动到正确的 places/import 数据库中(您甚至可以通过使用不同的数据库和数据的符号链接来准备)
  • 重新启用网站,解除后端锁定

为了让它工作,您只需要一个脚本,允许您根据需要在本地(或作为 CI 管道)重复更新过程,直到您对可重现的结果感到满意为止.

我知道周围有一些帮助程序 scripts/extensions 可以帮助实现这一点,但我更喜欢将它们放在一起作为 shell 脚本。在本地我将拥有最新的代码,我们现在准备的是一个将新代码与旧数据集成的脚本(“数据”我指的是 DB & /fileadmin,/uploads)。

所以这里只是一些提示:

  • 如果您使用 ddev,在即将发布的 v1.17 中将有一个 ddev pull 命令可以方便地获取实时数据。到现在为止,我用这个 custom command for ddev.
  • vendor/bin/typo3 cleanup: 命名空间中的命令可以降低您处理不一致数据库的可能性
  • 自定义升级向导非常适合您想使用 TYPO3 API 的任何地方。 - 你可以 运行 他们 vendor/bin/typo3cms upgrade:wizard
  • typo3-console 使您可以轻松地原始 SQL 访问数据库(避免您为琐碎的数据库查询创建升级向导):例如 vendor/bin/typo3cms database:import <<< "UPDATE tt_content SET hidden=1 WHERE ..."
  • DB 比较是 vendor/bin/typo3cms database:updateschema

您的问题:

do I perform the update of core and 3rdparty extensions in one scoop or is it safer to deactivate the (some?) 3rdparty extensions

如果安装了某些扩展,某些升级向导的行为可能会有所不同。对于依赖 TCA 的迁移尤其如此。所以我建议一步更新所有扩展。

Also, how do I automate the process (composer command)

按照我的方式,您只需 运行 该作曲家命令一次,然后您提交 composer.lock。构建它可能有点麻烦,但我认为不需要自动化它。

写题的时候没有意识到,typo3-rector已经内置了答案。使用 rector,当您切换到下一个主要版本时,您可以在 composer.json 中自动更新扩展版本。

有关 typo3/rector 的最新说明,请参阅官方文档:

重要:当下一个版本的扩展不可用时,这不会给您警告(当您尝试 composer update 时会收到警告)。与往常一样,您应该使用版本控制系统,并且在准备好之前不要提交您的更改。在开发系统上工作,而不是在生产系统上工作。


您可以使用 rector/rector 来检查和修复您的 PHP 文件,而且,例如 composer.json.

例如,这样做是为了测试:

composer require typo3/cms-core:^10.4.0
composer require dmind/cookieman:^2.9.2
composer require georgringer/news
composer require rector/rector --dev

(我在这个例子中使用了这个扩展 cookieman,因为最新版本每个只支持一个 TYPO3 版本——尽管版本控制有点奇怪。我使用“news”,因为它目前不适用于 v11)。

创建一个rector.php
vendor/bin/rector init --template-type=typo3

为 TYPO3 10 添加/注释掉 composer.json 的检查:

rector.php:

$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_104_CORE);
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_104_EXTENSIONS);

现在申请校长(仅限 composer.json):

vendor/bin/rector process  --clear-cache composer.json

切换到 11:

rector.php:

$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_110_CORE);
$containerConfigurator->import(Typo3SetList::COMPOSER_PACKAGES_110_EXTENSIONS);

现在申请校长(再次composer.json):

vendor/bin/rector process  --clear-cache composer.json

不仅对 cms-core 的要求,而且对扩展的要求也应该已经改变。

现在继续 composer update 或当 composer.json 直接更改时您通常用来更新 composer.lock 的任何内容。