是否可以使用语义发布来自动化 .Net 程序集版本控制?

Que*_*n3r 2 .net c# assemblyversions semantic-release github-actions

我有一个 C# 解决方案,包含单个项目和多个使用 .Net 6 的库。我使用传统提交(commitlint 和 husky),并希望使用语义发布将最新版本部署为基于提交的 Github 上的 ZIP 文件消息。


我为 C# 项目尝试过的设置:

  • 安装包

npm install semantic-release -D
npm install @semantic-release/changelog -D
npm install @semantic-release/npm -D
npm install @semantic-release/github -D
npm install @semantic-release/git -D
Run Code Online (Sandbox Code Playgroud)
  • 在根目录中创建.releaserc.json文件

npm install semantic-release -D
npm install @semantic-release/changelog -D
npm install @semantic-release/npm -D
npm install @semantic-release/github -D
npm install @semantic-release/git -D
Run Code Online (Sandbox Code Playgroud)
  • 在package.json文件内将密钥设置version0.0.0-development,将密钥设置privatetrue并添加存储库 url
  • 工作流目录中创建release-on-push-on-main-branch.yml文件

{
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/release-notes-generator",
    "@semantic-release/changelog",
    "@semantic-release/npm",
    [
      "@semantic-release/github",
      {
        "assets": [
          {
            "path": "my-project.zip",
            "label": "my-project-${nextRelease.gitTag}.zip",
            "name": "my-project-${nextRelease.gitTag}.zip"
          }
        ]
      }
    ],
    "@semantic-release/git"
  ]
}
Run Code Online (Sandbox Code Playgroud)

它似乎有效,每当我推送到主分支时,它都会将最新版本的发行版(包含 DLL)部署到 Github 版本。


但正如您所知,semantic-release 不会发布正确的包版本,因为它还不知道程序集版本。它从package.json文件中获取版本。

我想要实现的目标:

  • 当在解决方案内的库或应用程序中进行更改时,它应该根据常规提交自动增加其程序集版本。但显然只要修改该项目即可。
  • 运行发布过程时,semantic-release 应该使用以下命令发布项目"name": "my-project-${assembly-version}.zip"

有什么我可以用的吗?

liu*_*ut0 6

semantic-release您可以先进行空运行dotnet publish以获取发行版的版本号(使用@semantic-release/exec插件)。然后将获取的版本号传递给dotnet publish

将插件添加@semantic-release/exec到您的npm install命令中并调整您的.releaserc.json文件以存储下一个发行版本(例如在环境变量中):

{
   "plugins": [
     ...,
     [
       '@semantic-release/exec',
       { verifyReleaseCmd: 'echo RELEASE_VERSION=\${nextRelease.version} >> $GITHUB_ENV' }
     ]
   ]
 }
Run Code Online (Sandbox Code Playgroud)

在之前插入试运行dotnet publish并调整dotnet publish步骤:

...
- name: Fetch release version
  env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: npx semantic-release --branches main --dry-run
- name: Run publish
  run: dotnet publish ./SolutionDir -p:Version=${{ env.RELEASE_VERSION }}
...
Run Code Online (Sandbox Code Playgroud)

Rename publish directory of MyProject to my-project and move it to root注意:您可以简单地使用命令-o的参数,而不是您的步骤dotnet publish

  • 我认为你需要的是 https://github.com/semantic-release/semantic-release/issues/193。然而,截至撰写本文时,这尚未在语义发布中实现。有一个名为“semantic-release-plus”的“semantic-release”替代品(https://github.com/semantic-release-plus/semantic-release),它实现了按路径过滤提交(请参阅“commitpaths”) ` 选项)。您还可以尝试使用 https://github.com/folke/semantic-release-commit-filter 等插件或编写自定义插件。 (2认同)