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)
。
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)
version为0.0.0-development,将密钥设置private为true并添加存储库 url。
{
"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文件中获取版本。
我想要实现的目标:
"name": "my-project-${assembly-version}.zip"有什么我可以用的吗?
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。