语义学-释放-更新-文件
语义释放 在发布时帮助更新文件的插件 .
此插件有助于您在发布时更新文件, 该文件主要有助于更新 Kubernetes 显示或使用 Semantic Release 用于非节点, 如 Dotnet 或 Flustter 等其它语言的项目 .
| 步骤 | 说明 |
|---|---|
verifyConditions | 验证插件的配置是否正确,以及所提供的文件是否可写. |
prepare | 通过每个配置的文件更新它 . |
安装
npm install -D @droidsolutions-oss/semantic-release-update-file
使用量
插件可以在 语义释放 配置文件数字 :
{
"release": {
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/changelog",
"@semantic-release/release-notes-generator",
"@semantic-release/npm",
[
"@droidsolutions-oss/semantic-release-update-file",
{
"files": [
{
"path": ["k8s/prod/deployment.yaml"],
"type": "k8s",
"image": ["my.registry.com/some/image"],
"branches": "main"
},
{
"path": ["k8s/test/deployment.yaml"],
"type": "k8s",
"image": ["my.registry.com/some/image"],
"branches": ["main", "develop"]
},
{
"path": ["Directory.Build.props"],
"type": "xml",
"replacements": [{ "key": "Version", "value": "${nextRelease.version}" }]
},
{
"path": ["Dockerfile"],
"type": "containerfile",
"label": "version"
}
]
}
],
[
"@semantic-release/git",
{
"assets": [
"package.json",
"package-lock.json",
"k8s/prod/deployment.yaml",
"k8s/test/deployment.yaml",
"CHANGELOG.md",
"Directory.Build.props",
"Dockerfile"
],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
]
]
}
}
通过这个例子,将更新4个文件:
- 在文件中
k8s/prod/deployment.yaml图像的版本my.registry.com/some/image将更新为新版本的语义版。 此文件仅在发布运行的分支名称时更新main。 。 。 . - 这同样适用于文件
k8s/test/deployment.yaml但它也会在发布运行的分支名称时更新develop。 。 。 . - 在 XML 文件内
Directory.Build.props标记的值Version将设定为新版语义版. - 在那个
Dockerfile标签的值version将设定为新版本.
另外,git插件配置被更新,将已修改的文件包含在承诺中(这样它们可以稍后成为用户).
您可以在插件的文件属性中指定每个要更新的文件 。 现将备选方案说明如下.
配置选项
路径
这是需要的字段, 您指定要更新的文件的路径( 相对于根工程目录) 。 这可以是一个字符串或一系列字符串,从而导致所有文件以同样的方式被更新.
类型
支持的文件类型之一 。 目前这些是 k8s 对于雅姆尔文件, flutter 用于达特 pubspec.yaml 文档, xml 用于像 Dotnet 项目文件和 XML 文件 containerfile 对于多克文件.
分支
一个过滤器,允许根据运行中的分支更改文件。 例如,您可能想要从不同的分支测试活度。 在这种情况下,您可以设置这样的文件配置 :
{
"files": [
{
"path": ["k8s/prod/deployment.yaml"],
"type": "k8s",
"image": ["my.registry.com/some/image"],
"branches": "main"
},
{
"path": ["k8s/test/deployment.yaml"],
"type": "k8s",
"image": ["my.registry.com/some/image"],
"branches": ["develop"]
}
]
}
分支可以是字符串或分支的数组,如果需要更新多个分支中的文件(例如,用于从α/β/develop分支中预释).
图像
只有当类型是 k8s。指定要替换哪个版本的容器图像。 比如说,如果你 deployment.yaml 看起来像这样:
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- image: my.registry.com/some/image:v2.8.2
name: my-deployment
需要说明 my.registry.com/some/image 作为配置中的图像。 在语义放行完成后,图像的版本将成为新版本.
如果将容器图像作为另一个语义释放插件的一部分来构建和发布,并且你想将其部署在CI管道的后期步骤中,这非常有帮助.
说明: 该插件将更新给定的 Yaml 文件内图像的所有出错 .
准确匹配
只有当类型是 k8s。这个插件将图像标记完全替换为新版本。 如果你在标签上有一个后缀 可能会有问题 -alpine为此 exactMatch 选项。 如果您指定 exactMatch: true 只有旧版本字符串被新版本所取代.
例如,如果您的最后一个标记是 v1.0.0 的版本(没有领导 v)被新版本所取代. 这样,任何标记后缀都应该保留. 举个例子 my.registry.com/some/image:v1.0.0-alpine 将会变成 my.registry.com/some/image:v1.1.0-alpine。 。 。 .
警告: 要做到这一点,Yaml文件中的版本必须与确定为旧版本的Semantic Release相匹配,即Git标签,除非它是第一次发布.
替换
只有在类型是 xml。您可以指定 XML 文件需要更新的密钥/值对数组。 您可以以此为例, 更新版本, 并在 C# 项目文件中为 NuGet 软件包承诺标签 。 例如,考虑以下.csproj文件:
<Project>
<PropertyGroup>
<VersionPrefix>1.0.0</VersionPrefix>
<Authors>Stefan Ißmer</Authors>
<Company>DroidSolutions GmbH</Company>
<Description>Awesome description of awesome NuGet package.</Description>
<RepositoryUrl>[email protected]</RepositoryUrl>
<RepositoryBranch>main</RepositoryBranch>
<RepositoryCommit>2e5a8557392548f0c7463a102efdb0add0ee5aab</RepositoryCommit>
</PropertyGroup>
</Project>
使用以下配置语义发布会更新版本Prefix和 Repository Commit字段:
{
"files": [
{
"path": ["path/to/my.csproj"],
"type": "xml",
"replacements": [
{ "key": "VersionPrefix", "value": "${nextRelease.version}" },
{ "key": "RepositoryCommit", "value": "${nextRelease.gitHead}" }
]
}
]
}
现在版本Prefix更新了(您可以在后期的Semantic Release步骤中创建一个带有版本在文件中的NuGet软件包),Repository Commit会指向触发发布的承诺.
密钥必须是您给出文件中有效的 XML 标记 。 如果不存在错误,则会记录到错误,但语义释放的执行会继续下去. 值既可以是固定值,也可以是通过模板函数提取的语义放出上下文中的任何对象. 包括上一期和新版的信息,以及你自己设定的环境变量。 更多信息见 文件。 。 。 .
标签
当指定容器文件( 如 Dockerfiles) 时, 您可以在文件内指定一个标签, 在语义发布时应该随程序更新 。 例如,如果您在您的容器文件上添加一个标签,那么您可以用这个插件来更新应用程序版本.
发展
要开始阅读 捐款准则 首先,确保您设置了先决条件,然后遵循以下步骤来设置您的环境.
先决条件
这个项目需要 节点JS 安装在您的机器上.
建立开发环境
- 使用 git 复制此重播
- 运行
npm install以获取所有依赖 - 运行
npx husky install来搭起钩子
转写
由于这个项目是写在 类型脚本 您需要将其移植到 JavaScript 文件 。 这个可以用 npm run build 命令.
测试
测试也用 TypeScript 写入和使用 摩诃迦叶 作为试跑者和 Chai 断言图书馆。如果您添加了新功能,请同时添加单元测试,以确保该功能正常工作.