@abgov/nx-release 中文文档教程

发布于 3年前 浏览 22 项目主页 更新于 3年前

About this project

这是阿尔伯塔政府 - DIO - 用于语义发布的 Nx 插件。

该项目包含 Nx 插件生成器,用于设置具有语义发布的 monorepo 配置以及用于语义发布的插件。

Semantic release / monorepo

在 monorepo 中使用语义发布存在多重挑战:

  1. Each release project needs distinct release tags.
  2. Each project should be evaluated based on only commits related to it.
  3. Interdependencies between projects need to be handled.
  4. Interdependencies between publishable/releasable projects require coordination of releases.
  5. Channel (next-major, next, latest) information is stored in a git note on a semantic-release ref and does not distinguished between tags (and consequently projects).

对于 (1)、(2) 和 (3),该项目部分使用了 semantic-release-monorepo 以及 Nx 功能:

  • Each project uses a distinct tagFormat;
  • A custom plugin wraps default plugins for analyzeCommits and generateNotes and filters for only relevant commits;
  • Nx dep-graph is used to determine dependency paths that should also be included.

(4) 当前未处理,但利用 Nx 功能的解决方案是大方向。 例如,Nx 支持基于“受影响”的任务有序执行。

已知问题 (5) 未得到处理,当来自多个项目的发布标签在同一次提交时,非预发布通道升级将导致仅升级第一个项目。

在语义发布中,通道升级与下一个版本分析分开进行,并且没有扩展挂钩来修改行为。 具有不同版本格式(例如 1.0.0-beta.x)的预发布频道被排除在该过程之外并且似乎可以工作。

About this project

This is the Government of Alberta - DIO - Nx plugin for Semantic Release.

The project contains both the Nx plugin generator for setting up a monorepo with semantic release configuration as well as a plugin for semantic release.

Semantic release / monorepo

There are multiple challenges with using semantic release in a monorepo:

  1. Each release project needs distinct release tags.
  2. Each project should be evaluated based on only commits related to it.
  3. Interdependencies between projects need to be handled.
  4. Interdependencies between publishable/releasable projects require coordination of releases.
  5. Channel (next-major, next, latest) information is stored in a git note on a semantic-release ref and does not distinguished between tags (and consequently projects).

For (1), (2), and (3) in part this project uses the approach from semantic-release-monorepo along with Nx capabilities:

  • Each project uses a distinct tagFormat;
  • A custom plugin wraps default plugins for analyzeCommits and generateNotes and filters for only relevant commits;
  • Nx dep-graph is used to determine dependency paths that should also be included.

(4) is not currently handled, but a solution leveraging Nx capabilities is the general direction. For example, Nx supports ordered execution of tasks based on 'affected'.

KNOWN ISSUE (5) from above is not handled, and non-prerelease channel upgrades will result in only the first project being upgraded when release tags from multiple projects are on the same commit.

In Semantic Release the channel upgrade is done separately from the next version analysis and there are no extension hooks to modify the behaviour. Prerelease channels with a distinct version format (e.g. 1.0.0-beta.x) are excluded from that process and appear to work.

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文