Sua solicitação de recurso está relacionada a um problema?
Ao longo do processo de trabalho no autobot , tive dificuldade em manipular / analisar / groking a configuração da etiqueta do auto.
Mesmo quando comecei a usar o auto, mapear o comportamento do que eu queria para a configuração disponível era um pouco complicado.
Abaixo, vou descrever alguns dos comportamentos que acho que os tornam mais complexos do que o necessário:
labels
e skipReleaseLabels
. Um rótulo em labels
que também está em skipReleaseLabels
pulará um lançamento. Portanto, se você quiser um rótulo de documentação que não faça um lançamento, ele precisa ser adicionado em dois lugares. Além disso, o que acontece quando você adiciona major
, minor
ou patch
à seção skipReleaseLabels
? E então há o rótulo skip-release
que é diferente de skipReleaseLabels
.minor
e documentation
rótulos existem, qual título do changelog tem precedência?Descreva a solução que você gostaria
Eu gostaria de propor que simplificássemos muito a definição do rótulo e documentássemos claramente todos os casos extremos. Esta é apenas uma sugestão.
{
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'
}
]
}
Lógica
name
e releaseType
são obrigatóriosreleaseType
é definido como major | minor | patch | skip | none
. Isso pode ser reduzido a três categorias: semver | skip | none
.semver
pode estar presente em um determinado momento.semver
_deve_ estar presente, a menos que um none
esteja presente de outra forma.skip
só é válido quando emparelhado com um rótulo semver
e, caso contrário, é autônomo.none
não gera liberação por si só, mas pode ser incluído com um rótulo semver
para incluir uma entrada de changelog extra.none
não faz com que um lançamento seja pulado se um rótulo semver
estiver presente.none
podem ser incluídos para adicionar o PR em diferentes seções do changelogDescreva as alternativas que você considerou
É certo que isso ainda é complicado e certamente mais prolixo. Uma alternativa (e um pequeno compromisso com o que temos hoje) seria tratar os rótulos semver
diferente.
{
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'
}
]
}
}
Nesta versão, major
, minor
e patch
mantêm uma API semelhante à que têm hoje. No entanto, eles são essencialmente tratados como casos especiais. Todos os outros rótulos vão para este depósito other
(que poderia ter um nome melhor).
Neste cenário:
semver
pode estar presente por vezskipRelease: true
pode ser incluído em other
rótulos para torná-los um salto.changelogTitle
podem ser incluídos em other
rótulos para adicionar uma entrada de changelog. (Novamente, isso seria uma duplicata de outras entradas).skipRelease
ou changelogTitle
tornaria o rótulo um rótulo arbitrário autônomo (o que preserva o suporte de rótulo arbitrário que temos hoje).Em última análise, estou aberto a outras idéias. Só acho que nossa abordagem atual está repleta de casos e pegadinhas não documentados. Eu gostaria de tornar isso o mais fácil de entender (e codificar) possível.
Gosto da primeira opção. é super simples e limpo, estou tendo problemas para distinguir a diferença entre none
e skip
. Se eu entendi corretamente, skip
não tem relação com o changelog e precisa estar com um rótulo semver, e none
irá pular uma versão, mas criar uma entrada única no changelog.
esse método elimina a maioria das abreviações, mas acho que ainda podemos suportar algumas?
por exemplo, o seguinte substituiria o rótulo padrão major
, mas também herdaria a descrição e o changelogTitle
{
labels: [
{
name: 'Breaking change',
releaseType: 'major'
}
]
}
ou apenas editando o título
{
labels: [
{
releaseType: 'major',
changelogTitle: 'Super Big Changes'
}
]
}
skip
é não fazer um lançamento. none
significa que a gravadora não tem efeito sobre o lançamento ... então ela pode lançar ou não, dependendo da presença de outras gravadoras. Ele precisa de um nome melhor.
Portanto, de acordo com sua sugestão, os rótulos têm substitutos padrão com base no que releaseType
está presente? Eu acho que faz sentido.
Portanto, de acordo com sua sugestão, os rótulos têm fallbacks padrão com base em qual releaseType está presente? Eu acho que faz sentido.
sim
@zephraph Ele precisa de um nome melhor.
Eu acho que é ótimo. Não há nada melhor do que dizer "não é nenhum porque não tem impacto no processo de lançamento, por exemplo, chore / dependências / qualquer coisa".
acho que faz sentido.
Sim, totalmente.
A proposta é incrível.
Eu acho que name
e chagelogTitle
devem ambos ter padrões baseados em releaseType
.
Eu tenho um PR para isso agora. Não aborda o seguinte
Os títulos do log de alterações podem ser adicionados aos rótulos, mas não está exatamente claro em que ordem eles têm precedência. Se houver rótulos secundários e de documentação, qual título do changelog tem precedência?
Logic
maior parte da validação descrita aqui provavelmente deve residir no autobot. Eu não acho que a própria auto deveria forçar isso
(relacionado a 1)> Múltiplos rótulos nenhum podem ser incluídos para adicionar o PR em diferentes seções do changelog
Eu não entendo. Como _ "Um rótulo de ignorar só é válido quando emparelhado com um rótulo semver e, caso contrário, é um autônomo." _ Faz sentido? Se eu tenho deps
rótulo ou infra
, o tipo é skip
e quero pular o lançamento por que preciso adicionar o rótulo Semver também? Acho que devo usar none
então, mas isso também permite adicionar o rótulo semver, então ... WAT ?! : D
Atualmente eu tenho
"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"
}
},
e eu quero pular docs, skip-release, devDeps e infra, mas não quero pular deps
por exemplo. Porque estou usando renovate e desejo lançamentos de patch em fix(deps)
.
Eu também tenho onlyPublishWithReleaseLabel
habilitado de qualquer maneira, então não será um grande problema para mim.
E mais uma coisa, changelogTitle
na tag next
dist? Só estou pedindo esclarecimentos, pois não consta no PR.
@tunnckoCore Acho que sua configuração ficaria assim na nova maneira:
{
"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"
}
]
}
Nenhum atua efetivamente como skip
. Mas se você realmente precisasse lançar uma atualização devDep
você poderia adicionar patch
e uma liberação seria feita. Isso é diferente de adicionar um rótulo skip
, que ignoraria o lançamento independentemente de outros rótulos.
changelogTitle
Eu também não fiz isso. Ainda é apenas um título. Vou adicionar isso ao meu PR para o refatorador (ainda não está no próximo. Vou retirá-lo após changelogTitle)
Direito. Certo, ótimo :)
O problema foi lançado em v8.0.0-next.8
É agora? Suponho que prerelease
s foram publicados em next
? : pensando: De qualquer forma, não estou com pressa. Ainda lutando com Yarn v2 + pnp e construção / agrupamento.
editar: E a falta de title/changelogTitle
ainda implica que não fará uma seção nas notas de lançamento?
@tunnckoCore existem padrões nos títulos do changelog com base na versão que você está lançando.
Estou perguntando sobre os outros "rótulos personalizados" que adicionamos da configuração e que não são sobre o semver. Se eu tiver infra
rótulo sem título, ele não será adicionado, certo? E quando eu tiver um título (como em devDeps), ele será adicionado.
: rocket: O problema foi lançado na v8.0.0: rocket:
@adierkens , parece que esse problema foi o principal ímpeto por trás da revisão principal da v8, então estou fazendo esta pergunta aqui ... Há algo especial que preciso fazer para atualizar para a v8 da v7.x?
Se você tiver qualquer labels
ou skipReleaseLabels
extra, você precisará usar o novo formato
https://intuit.github.io/auto/pages/autorc.html#label -customization
Wooohooo! : tada: Vou tentar no fim de semana.
Em primeiro lugar, mudanças legais para v8!
A respeito de
Os títulos do log de alterações podem ser adicionados aos rótulos, mas não está exatamente claro em que ordem eles têm precedência. Se houver rótulos secundários e de documentação, qual título do changelog tem precedência?
Com base em testes locais, parece que o comportamento atual é:
changelogTitle
na ordem de prioridade de releaseType
( major
, minor
, patch
, então todos os outros)releaseType
acima, então o PR é incluído na seção do rótulo definido na configuração primeiro (rótulos padrão precedem todos os outros)Abaixo estão alguns exemplos:
(1): rótulos secundários e nenhum
config:
"labels": [
{ "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "none" },
{ "name": "minor", "changelogTitle": "Enhancement", "releaseType": "minor" }
]
rótulos em PR:
minor
seção de rótulo do changelog: minor
minor
releaseType
tem maior precedência(2): rótulos de patch múltiplos
config:
"labels": [
{ "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "patch" },
{ "name": "core", "changelogTitle": "Core Change", "releaseType": "patch" }
]
rótulos em PR:
core
seção de etiqueta do changelog: typescript
typescript
aparece na configuração antes de core
(3): nenhum rótulo e nenhum rótulo padrão
config:
"labels": [
{ "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "none" }
]
rótulos em PR:
internal
seção de etiqueta do changelog: internal
internal
rótulo aparece na configuração antes de typescript
(ele aparece na configuração padrão que tem maior precedência entre o mesmo releaseType
@hipstersmoothie , o comportamento / ordem de precedência acima é intencional?
Em caso afirmativo, seria bom adicionar à documentação para que fique claro como as seções de rótulo do changelog são geradas e como as seções têm precedência (eu poderia ajudar com isso, se necessário)
Se não, podemos trabalhar para definir uma ordem de precedência, seja como parte deste problema ou de outro?
Não vejo isso como algo especial ou errado. Parece bastante intuitivo. A única coisa importante é major
, minor
e patch
estar sempre em primeiro lugar no changelog, apenas porque é uma coisa padrão. Mas mesmo que o pedido seja configurável, também está tudo bem.
Comentários muito úteis
Se você tiver qualquer
labels
ouskipReleaseLabels
extra, você precisará usar o novo formatohttps://intuit.github.io/auto/pages/autorc.html#label -customization