您的功能请求是否与问题有关?
在整个工作过程中的汽车人,我挣扎着处理/分析/ groking汽车的标签配置设置。
即使当我开始使用 auto 时,将我想要的行为映射到可用配置也有点棘手。
下面我将概述一些我认为使它变得比它需要的更复杂的行为:
labels
和skipReleaseLabels
。 labels
中的标签同时也在skipReleaseLabels
中将跳过发布。 所以如果你想要一个不做发布的文档标签,需要在两个地方添加。 此外,当您将major
、 minor
或patch
到skipReleaseLabels
部分时会发生什么? 再有就是在skip-release
标签是从不同的skipReleaseLabels
。minor
和documentation
标签都存在,哪个变更日志标题优先?描述您想要的解决方案
我想建议我们大大简化标签定义并清楚地记录任何极端情况。 这只是一个建议。
{
labels: [
{
name: 'Breaking change',
releaseType: 'major',
description: 'A non-backwards compatible change'
changelogTitle: 'Breaking changes',
color: '#FFF000'
},
{
name: 'Feature',
releaseType: 'minor',
description: 'A new capability'
changelogTitle: 'Improvements',
color: '#FAA00A'
},
{
name: 'Bug fix',
releaseType: 'patch',
description: 'A bug fix'
changelogTitle: 'Bug fixes',
color: '#FAA00A'
},
{
name: 'Skip Release',
releaseType: 'skip',
description: "Ensures a release doesn't happen",
// changelog title not valid for skip releases
// changelogTitle: '',
color: '#FAA00A'
},
{
name: 'Documentation',
releaseType: 'none',
description: 'Used to denote documentation changes',
changelogTitle: 'Documentation updates',
color: '#C8C8C8'
}
]
}
逻辑
name
和releaseType
是必需的releaseType
定义为major | minor | patch | skip | none
。 这可以进一步简化为三个类别: semver | skip | none
。semver
标签。semver
标签,除非另外存在none
。skip
标签仅在与semver
标签配对时才有效,否则为空操作。none
类型本身不生成版本,但可以包含在semver
标签中以包含额外的变更日志条目。semver
标签,则none
发布不会导致跳过发布。none
标签以在变更日志的不同部分下添加 PR描述你考虑过的替代方案
诚然,这仍然很复杂,而且肯定更冗长。 另一种选择(以及对我们今天所拥有的稍微妥协)是以不同的方式对待semver
标签。
{
labels: {
major: "Version: Major",
minor: {
name: "Version: Minor",
changelogTitle: "Bug fixes"
},
patch: "Version: Patch",
other: [
{
name: 'Skip release',
skipRelease: true
},
{
name: 'Documentation',
changelogTitle: 'Documentation updates'
}
]
}
}
在此版本中, major
、 minor
和patch
保留了与今天相似的 API。 不过,它们基本上被视为特殊情况。 所有其他标签都进入这个other
存储桶(可以有一个更好的名称)。
在这种情况下:
semver
skipRelease: true
可以包含在other
标签上,使它们成为一个跳过。changelogTitle
可以包含在other
标签中以添加更改日志条目。 (同样,这将与其他条目重复)。skipRelease
也没有changelogTitle
会使标签成为无操作的任意标签(这保留了我们今天拥有的任意标签支持)。最终,我对其他想法持开放态度。 我只是认为我们目前的方法充斥着未记录的极端案例和陷阱。 我想让它尽可能容易理解(和编码)。
我喜欢第一个选项。 这是一个超级简单和干净的,我无法区分none
和skip
之间的区别。 如果我理解正确, skip
与变更日志无关,需要带有 semver 标签,而none
将跳过一个版本,但会创建一个唯一的变更日志条目。
这种方法摆脱了大部分速记,但我认为我们仍然可以支持一些?
例如,以下内容将覆盖默认的major
标签,但也会继承描述和 changelogTitle
{
labels: [
{
name: 'Breaking change',
releaseType: 'major'
}
]
}
或者只是编辑标题
{
labels: [
{
releaseType: 'major',
changelogTitle: 'Super Big Changes'
}
]
}
skip
不做发布。 none
表示标签对发布没有影响...所以可能会发布也可能不会发布,这取决于其他标签的存在。 它确实需要一个更好的名字。
因此,根据您的建议,标签具有基于releaseType
存在的默认后备? 我认为这是有道理的。
因此,根据您的建议,标签具有基于存在的 releaseType 的默认后备? 我认为这是有道理的。
是的
@zephraph它确实需要一个更好的名字。
我认为这是一个伟大的。 没有什么比说“没有,因为它对发布过程没有影响,例如杂务/依赖/任何东西”更好。
认为这是有道理的。
是的,完全。
这个提议很棒。
我认为name
和chagelogTitle
都应该有基于releaseType
默认值。
我现在有一个 PR。 它没有解决以下问题
更改日志标题可以添加到标签中,但并不清楚它们的优先顺序。 如果次要标签和文档标签都存在,哪个变更日志标题优先?
Logic
此处描述的大部分验证可能都存在于 autobot 中。 我认为汽车本身不应该强制执行此操作
(与 1 相关)> 可以包含多个无标签以在变更日志的不同部分下添加 PR
我不明白。 _“跳过标签仅在与 semver 标签配对时才有效,否则是无操作的。”_有意义吗? 如果我有deps
标签或infra
,类型是skip
并且我想跳过发布为什么我也需要添加 semver 标签? 我猜我应该使用none
,但这也允许添加 semver 标签,所以...... WAT?! :D
目前我有
"skipReleaseLabels": [
"documentation",
"skip-release",
"devDeps",
"infra"
],
"labels": {
"deps": {
"name": "deps",
"title": "🔩 Dependency Updates"
},
"devDeps": {
"name": "devDeps",
"title": "🔩 Dependency Updates"
},
"documentation": {
"name": "documentation",
"title": "🗒️ Documentation"
},
"core": {
"name": "core",
"title": "📦 Core"
}
},
我想跳过 docs、skip-release、devDeps 和 infra,但不想跳过例如deps
。 因为我正在使用 renovate 并希望在fix(deps)
上发布补丁。
无论如何,我也启用了onlyPublishWithReleaseLabel
,所以这对我来说不是什么大问题。
还有一两件事,是changelogTitle
的next
DIST标签? 我只是要求澄清,因为它没有显示在 PR 中。
@tunnckoCore我认为您的设置将以新方式如下所示:
{
"labels": [
{
"name": "deps",
"title": "🔩 Dependency Updates",
// when deps are merged create a patch release
"releaseType": "patch"
},
{
"name": "devDeps",
"title": "🔩 Dependency Updates",
"releaseType": "none"
},
{
"name": "documentation",
"title": "🗒️ Documentation",
"releaseType": "none"
},
{
"name": "core",
"title": "📦 Core",
"releaseType": "patch"
}
]
}
none 有效地充当skip
。 但是,如果您确实需要发布devDep
更新,则可以添加patch
并进行发布。 这与添加skip
标签不同,后者会跳过发布而不考虑其他标签。
更改日志标题
我也没有这样做。 它仍然只是标题。 我会将它添加到我的 PR 中以进行重构(仍然不会在下一个。我会在 changelogTitle 之后将其取出)
对。 好,太棒了 :)
问题已在 v8.0.0-next.8 中发布
现在是吗? 我猜prerelease
是在next
? :thinking: 无论如何,我并不着急。 仍在与 Yarn v2+pnp 和构建/捆绑作斗争。
编辑:缺少title/changelogTitle
仍然意味着它不会在发行说明中占据一席之地?
@tunnckoCore根据您发布的版本,更改日志标题有默认值。
我问的是我们从配置中添加的其他“自定义标签”,而这些标签与 semver 无关。 如果我有没有标题的infra
标签,它不会被添加,对吧? 当我有标题(如在 devDeps 中)时,它将被添加。
:rocket: 问题已在 v8.0.0 中发布 :rocket:
@adierkens ,看起来这个问题是 v8 主要版本背后的主要推动力,所以我在这里问这个问题......从 v7.x 升级到 v8 有什么特别的我需要做的吗?
如果您有任何额外的labels
或skipReleaseLabels
您将需要使用新格式
https://intuit.github.io/auto/pages/autorc.html#label -customization
呜呜呜! :tada: 我周末试试。
首先,v8 的酷变化!
关于
更改日志标题可以添加到标签中,但并不清楚它们的优先顺序。 如果次要标签和文档标签都存在,哪个变更日志标题优先?
从本地测试来看,目前的行为似乎是:
changelogTitle
中的优先级顺序releaseType
( major
, minor
, patch
,然后所有其他人)releaseType
优先级相关联,那么 PR 将首先包含在配置中定义的标签部分中(默认标签在所有其他标签之前)下面是几个例子:
(1):次要和无标签
配置:
"labels": [
{ "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "none" },
{ "name": "minor", "changelogTitle": "Enhancement", "releaseType": "minor" }
]
PR 上的标签:
minor
变更日志标签部分: minor
minor
releaseType
具有更高的优先级(2):多个补丁标签
配置:
"labels": [
{ "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "patch" },
{ "name": "core", "changelogTitle": "Core Change", "releaseType": "patch" }
]
PR 上的标签:
core
变更日志标签部分: typescript
typescript
标签出现在core
之前的配置中(3):无标签和默认无标签
配置:
"labels": [
{ "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "none" }
]
PR 上的标签:
internal
变更日志标签部分: internal
internal
标签出现在typescript
之前的配置中(它出现在默认配置中,它在相同的releaseType
之间具有最高优先级@hipstersmoothie ,上述行为/优先顺序是否有意?
如果是这样,最好添加到文档中,以便清楚更改日志标签部分的生成方式以及部分的优先级(如果需要,我可以提供帮助)
如果没有,我们是否可以努力定义优先顺序,作为这个问题的一部分或另一个?
我不认为这是特别的或错误的。 它似乎足够直观。 唯一重要的是major
、 minor
和patch
总是在更新日志中排在第一位,因为它是一种标准的东西。 但即使订单是可配置的,也没关系。
最有用的评论
如果您有任何额外的
labels
或skipReleaseLabels
您将需要使用新格式https://intuit.github.io/auto/pages/autorc.html#label -customization