Bezieht sich Ihre Funktionsanfrage auf ein Problem?
Während des gesamten Arbeitsprozesses an Autobot hatte ich
Selbst als ich anfing, auto zu verwenden, war es ein wenig schwierig, das Verhalten dessen, was ich wollte, der verfügbaren Konfiguration zuzuordnen.
Im Folgenden werde ich einige der Verhaltensweisen skizzieren, die es meiner Meinung nach komplexer machen, als es sein muss:
labels
und skipReleaseLabels
. Ein Label in labels
, das sich auch in skipReleaseLabels
, überspringt eine Veröffentlichung. Wenn Sie also ein Dokumentationslabel wünschen, das keine Freigabe durchführt, muss es an zwei Stellen hinzugefügt werden. Was passiert außerdem, wenn Sie major
, minor
oder patch
zum Abschnitt skipReleaseLabels
hinzufügen? Und dann ist da noch das Label skip-release
das sich von skipReleaseLabels
.minor
und documentation
existieren, welcher Changelog-Titel hat dann Vorrang?Beschreiben Sie die gewünschte Lösung
Ich möchte vorschlagen, dass wir die Etikettendefinition stark vereinfachen und alle Eckfälle klar dokumentieren. Dies ist nur ein Vorschlag.
{
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'
}
]
}
Logik
name
und releaseType
sind erforderlichreleaseType
ist definiert als major | minor | patch | skip | none
. Dies kann weiter auf drei Kategorien reduziert werden: semver | skip | none
.semver
Label vorhanden sein.semver
Label _muss_ vorhanden sein, es sei denn ein none
ist anderweitig vorhanden.skip
Label ist nur gültig, wenn es mit einem semver
Label kombiniert wird und ist ansonsten ein No-Op.none
Typ generiert selbst keine Freigabe, kann aber mit einem semver
Label eingefügt werden, um einen zusätzlichen Changelog-Eintrag einzufügen.none
Freigabe führt nicht dazu, dass eine Freigabe übersprungen wird, wenn ein semver
Label vorhanden ist.none
Labels eingefügt werden, um die PR unter verschiedenen Abschnitten des Changelogs hinzuzufügenBeschreiben Sie Alternativen, die Sie in Betracht gezogen haben
Das ist zugegebenermaßen noch komplizierter und sicherlich ausführlicher. Eine Alternative (und ein kleiner Kompromiss zu dem, was wir heute haben) wäre, die Labels semver
anders zu behandeln.
{
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'
}
]
}
}
In dieser Version haben major
, minor
und patch
eine ähnliche API wie heute. Sie werden jedoch im Wesentlichen als Sonderfälle behandelt. Alle anderen Labels gehen in diesen other
Bucket (der einen besseren Namen haben könnte).
In diesem Szenario:
semver
gleichzeitig anwesend seinskipRelease: true
können auf other
Labels eingefügt werden, um sie zu überspringen.changelogTitle
kann auf other
Labels eingefügt werden, um einen Changelog-Eintrag hinzuzufügen. (Auch dies wäre ein Duplikat anderer Einträge).skipRelease
noch changelogTitle
würde das Label zu einem willkürlichen No-Op-Label machen (das die Unterstützung für beliebige Labels, die wir heute haben, beibehält).Letztendlich bin ich offen für andere Ideen. Ich denke nur, unser derzeitiger Ansatz ist ziemlich voll von undokumentierten Eckfällen und Fallstricken. Ich möchte dies so einfach zu verstehen (und zu codieren) wie möglich machen.
Ich mag die erste Möglichkeit. es ist super einfach und sauber, ich habe Probleme den Unterschied zwischen none
und skip
. Wenn ich das richtig verstehe, hat skip
keinen Einfluss auf das Changelog und muss mit einem Server-Label versehen sein, und none
wird eine Veröffentlichung überspringen, aber einen einzigartigen Changelog-Eintrag erstellen.
diese Methode beseitigt die meisten Abkürzungen, aber ich denke, wir könnten noch ein paar unterstützen?
zum Beispiel würde Folgendes das Standardlabel major
überschreiben, aber auch die Beschreibung und den changelogTitle erben
{
labels: [
{
name: 'Breaking change',
releaseType: 'major'
}
]
}
oder einfach den Titel bearbeiten
{
labels: [
{
releaseType: 'major',
changelogTitle: 'Super Big Changes'
}
]
}
skip
ist keine Freigabe. none
bedeutet, dass das Label keinen Einfluss auf die Veröffentlichung hat... es kann also veröffentlicht werden oder nicht, je nachdem, ob andere Labels vorhanden sind. Es braucht einen besseren Namen.
Also haben die Labels nach Ihrem Vorschlag Standard-Fallbacks basierend auf dem, was releaseType
vorhanden ist? Ich denke, das macht Sinn.
Also haben die Labels nach Ihrem Vorschlag Standard-Fallbacks basierend auf dem vorhandenen releaseType? Ich denke, das macht Sinn.
ja
@zephraph Es braucht einen besseren Namen.
Ich denke, es ist ein großartiges. Es gibt nichts Besseres, als zu sagen "es ist keines, weil es keinen Einfluss auf den Veröffentlichungsprozess hat, zB lästige Pflichten/Abhängigkeiten/was auch immer".
finde das sinnvoll.
Ja, total.
Der Vorschlag ist toll.
Ich denke, dass name
und chagelogTitle
beide Standardwerte haben sollten, die auf releaseType
basieren.
Ich habe jetzt eine PR dafür. Es geht nicht auf folgendes ein
Changelog-Titel können Labels hinzugefügt werden, aber es ist nicht genau klar, in welcher Reihenfolge sie Vorrang haben. Welcher Changelog-Titel hat Vorrang, wenn Neben- und Dokumentationslabels vorhanden sind?
Logic
meisten der hier beschriebenen Validierungen sollten wahrscheinlich im Autobot leben. Ich denke nicht, dass Auto selbst dies erzwingen sollte
(bezogen auf 1) > Mehrere keine Labels können eingefügt werden, um die PR unter verschiedenen Abschnitten des Changelogs hinzuzufügen
Ich verstehe es nicht. Wie _"Ein Skip-Label ist nur gültig, wenn es mit einem Semver-Label gepaart ist und ist ansonsten ein No-Op."_ Sinn? Wenn ich deps
Label oder infra
, ist der Typ skip
und ich möchte die Freigabe überspringen, warum muss ich auch ein Semver-Label hinzufügen? Ich schätze, ich sollte dann none
, aber dies ermöglicht auch das Hinzufügen von Semver-Label, also... WAT?! :D
Aktuell habe ich
"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"
}
},
und ich möchte auf docs, skip-release, devDeps und infra überspringen, aber zum Beispiel nicht auf deps
überspringen. Weil ich renovate verwende und Patch-Releases auf fix(deps)
möchte.
Ich habe auch onlyPublishWithReleaseLabel
sowieso aktiviert, also wird es kein großes Problem für mich sein.
Und noch eine Sache, ist changelogTitle
auf dem next
Dist-Tag? Ich bitte nur um Klarstellung, weil es in der PR nicht gezeigt wird.
@tunnckoCore Ich denke, Ihr Setup würde auf die neue Weise so aussehen:
{
"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"
}
]
}
Die None fungiert effektiv als skip
. Aber wenn Sie wirklich ein devDep
Update veröffentlichen müssten, könnten Sie patch
hinzufügen und eine Veröffentlichung würde erfolgen. Dies unterscheidet sich vom Hinzufügen eines skip
Labels, das die Veröffentlichung unabhängig von anderen Labels überspringen würde.
ÄnderungsprotokollTitel
Dies habe ich auch nicht getan. Es ist immer noch nur der Titel. Ich werde dies zu meiner PR für den Refactor hinzufügen (immer noch nicht beim nächsten. Ich werde es nach changelogTitle rausbringen)
Richtig. OK großartig :)
Problem wurde in v8.0.0-next.8 veröffentlicht
Ist es jetzt? Ich vermute, dass prerelease
s auf next
? :denken: Wie auch immer, ich bin nicht in Eile. Kämpfe immer noch mit Yarn v2+pnp und dem Aufbauen/Bündeln.
edit: Und bedeutet das Fehlen von title/changelogTitle
immer noch, dass es keinen Abschnitt in den Versionshinweisen gibt?
@tunnckoCore Es gibt
Ich frage nach den anderen "benutzerdefinierten Labels", die wir aus der Konfiguration hinzufügen und bei denen es nicht um den Server geht. Wenn ich das Label infra
ohne Titel habe, wird es nicht hinzugefügt, oder? Und wenn ich einen Titel habe (wie in devDeps), wird er hinzugefügt.
:rocket: Ausgabe wurde in v8.0.0 veröffentlicht :rocket:
@adierkens , es sieht so aus, als ob dieses Problem der Hauptanstoß für die große Version von v8 war, also stelle ich diese Frage hier ... Muss ich etwas Besonderes tun, um von v7.x auf v8 zu aktualisieren?
Wenn Sie zusätzliche labels
oder skipReleaseLabels
Sie das neue Format verwenden
https://intuit.github.io/auto/pages/autorc.html#label -Anpassung
Wooohooo! :tada: Ich werde es am Wochenende versuchen.
Zuallererst coole Änderungen für v8!
Hinsichtlich
Changelog-Titel können Labels hinzugefügt werden, aber es ist nicht genau klar, in welcher Reihenfolge sie Vorrang haben. Welcher Changelog-Titel hat Vorrang, wenn Neben- und Dokumentationslabels vorhanden sind?
Aus lokalen Tests scheint das aktuelle Verhalten wie folgt zu sein:
changelogTitle
in der Prioritätsreihenfolge von releaseType
( major
, minor
, patch
, dann alle anderen)releaseType
, wird PR zuerst in den Abschnitt des Labels aufgenommen, das in der Konfiguration definiert wurde (Standardlabels gehen allen anderen voraus).Nachfolgend einige Beispiele:
(1): kleinere und keine Labels
Konfiguration:
"labels": [
{ "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "none" },
{ "name": "minor", "changelogTitle": "Enhancement", "releaseType": "minor" }
]
Labels auf PR:
minor
Änderungsprotokoll-Label-Abschnitt: minor
minor
releaseType
eine höhere Priorität hat(2): mehrere Patch-Etiketten
Konfiguration:
"labels": [
{ "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "patch" },
{ "name": "core", "changelogTitle": "Core Change", "releaseType": "patch" }
]
Labels auf PR:
core
Änderungsprotokoll-Label-Abschnitt: typescript
typescript
in der Konfiguration vor core
(3): keine Beschriftung und standardmäßig keine Beschriftung
Konfiguration:
"labels": [
{ "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "none" }
]
Labels auf PR:
internal
Änderungsprotokoll-Label-Abschnitt: internal
internal
in der Konfiguration vor typescript
erscheint (es erscheint in der Standardkonfiguration, die die höchste Priorität zwischen denselben releaseType
@hipstersmoothie , Ist das obige Verhalten / die oben genannte Rangfolge beabsichtigt?
Wenn ja, wäre es gut, die Dokumentation zu ergänzen, damit klar ist, wie die Änderungsprotokoll-Labelabschnitte generiert werden und wie Abschnitte Vorrang haben (ich könnte bei Bedarf dabei helfen).
Wenn nicht, können wir daran arbeiten, eine Rangfolge zu definieren, entweder als Teil dieser oder einer anderen Ausgabe?
Ich sehe es nicht als etwas Besonderes oder Falsches. Es scheint intuitiv genug. Das einzig Wichtige ist, dass major
, minor
und patch
immer an erster Stelle im Changelog stehen, nur weil es so etwas wie Standard ist. Aber auch wenn die Reihenfolge konfigurierbar ist, ist es auch in Ordnung.
Hilfreichster Kommentar
Wenn Sie zusätzliche
labels
oderskipReleaseLabels
Sie das neue Format verwendenhttps://intuit.github.io/auto/pages/autorc.html#label -Anpassung