跳至内容
GitHub 仓库 论坛 RSS-新闻源

Shards 0.12.0 发布!

Brian J. Cardiff

Shards 0.12.0 已发布!

此版本的 Shards 专注于解决一些小问题并添加功能,这些功能将有助于建立一个健康的包生态系统,该系统将针对语言的不同版本,并减少在修复过程中出现的摩擦。不要错过其他的 发布变更日志

要使用此新版本,您需要从源代码构建 Shards 或使用 nightly Crystal 版本,直到 1.0.0-pre1 被标记。

当依赖项的 shard.yml 文件触发错误时,您将注意到更好的错误消息,这得益于 #408

在开发过程中,您可能需要切换依赖项的源代码或分支。这种情况在多个命令中没有得到正确处理,现在应该得到修复。只要有可能,Shards 会尝试尊重所选版本,即使源代码发生了改变。如果源代码最终变得模棱两可,将显示一个错误。

例如,如果您的应用程序需要包 AB,它们都依赖于 C,但它们指向不同的分支,则源代码将变得模棱两可。阅读更多关于 #419#429 的内容。

在之前的版本中,crystal 属性实际上变为必填属性,用于声明包预期适用于哪些版本的编译器和 std-lib。同时,添加了标志 --ignore-crystal-version 来选择退出此检查。有时 Shards 可能会与声明的 crystal 版本以外的版本一起工作。我们鼓励维护者测试、发布和声明他们选择支持的 crystal 版本。

在开发具有潜在破坏性更改的主要 crystal 版本(从 0.x 到 1.x,以及从 1.x 到 2.x)期间,使用 --ignore-crystal-version 针对 nightly 运行项目的 CI 是合理的。一旦稳定版的主要版本发布并且生态系统跟上,就不需要 --ignore-crystal-version。请注意,使用 crystal 属性有助于修剪搜索空间。

在此版本中,Shards 将读取 SHARDS_OPTS 环境变量以获取其他 CLI 选项。因此,如果 shards install 命令在某个地方隐式运行,则 CI 可以使用 SHARDS_OPTS=--ignore-crystal-version。阅读更多关于 #417#420 的内容。

此版本的主要功能是 Shards 覆盖。由于这是它的第一个迭代,我们渴望得到反馈。我们预计这个第一个版本将使一些工作流程变得更轻松,并且还有助于在即将发布的 crystal 主要版本上进行过渡。该功能是在 #422 中实现的,它的动机在 #412 中有解释。

使用本地覆盖功能,您将能够拥有一个 shard.override.yml 或使用 SHARDS_OVERRIDE 环境变量指定此文件。如果依赖项在覆盖文件中列出,则将使用该版本,无论依赖项图的其余部分说明了什么。

使用上述逻辑,有一些工作流程变得更简单了

  • 作为 shard 的开发者,我可能会使用我的工作副本而不是签出新版本。
  • 绕过可能阻止我使用新版本的中间包的限制。
  • 在深度依赖项上进行补丁,而无需一直向下分支和调整依赖项。
  • 针对依赖项的上游开发进行测试,而无需使开发工作流程复杂化。

您打算如何使用这些新功能?