Auto: [RFC] Simplifier la configuration des étiquettes

Créé le 6 juil. 2019  ·  17Commentaires  ·  Source: intuit/auto

Votre demande de fonctionnalité est liée à un problème ?

Tout au long du processus de travail sur autobot, j'ai eu du mal à gérer/analyser/groking la configuration de la configuration de l'étiquette de l'auto.

Même lorsque j'ai commencé à utiliser auto, mapper le comportement de ce que je voulais avec la configuration disponible était un peu délicat.

Ci-dessous, je décrirai certains des comportements qui, selon moi, le rendent plus complexe qu'il ne devrait l'être :

  • Les définitions d'étiquettes peuvent être une chaîne ou un objet. Cela aide pour la sténographie, mais rend un peu plus difficile la cartographie mentale (et la construction d'outils pour). Les objets peuvent avoir un nom, mais c'est facultatif (tirer de la clé si elle n'est pas définie). Cela rend l'outillage un peu plus difficile.
  • Il y a labels et skipReleaseLabels . Un label dans labels qui est aussi dans skipReleaseLabels sautera une version. Donc, si vous voulez une étiquette de documentation qui ne fait pas de version, elle doit être ajoutée à deux endroits. De plus, que se passe-t-il lorsque vous ajoutez major , minor , ou patch à la section skipReleaseLabels ? Et puis il y a le label skip-release qui est différent du skipReleaseLabels .
  • Les titres du journal des modifications peuvent être ajoutés aux étiquettes, mais l'ordre dans lequel ils prévalent n'est pas exactement clair. Si les libellés minor et documentation existent tous les deux, quel titre du journal des modifications a préséance ?

Décrivez la solution que vous souhaitez

J'aimerais proposer que nous simplifiions considérablement la définition de l'étiquette et documentions clairement tous les cas de coin. Ceci n'est qu'une suggestion.

{
  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'
    }
  ]
}

Logique

  • name et releaseType sont requis
  • releaseType est défini comme major | minor | patch | skip | none . Cela peut être encore réduit à trois catégories : semver | skip | none .
  • Une seule étiquette semver peut être présente à un moment donné.
  • Une étiquette semver _doit_ être présente, à moins qu'une none soit présente autrement.
  • Une étiquette skip n'est valide que lorsqu'elle est associée à une étiquette semver et est sinon un no-op.
  • Un type none ne génère aucune version par lui-même, mais peut être inclus avec une étiquette semver pour inclure une entrée supplémentaire dans le journal des modifications.
  • Une version none n'entraîne pas le saut d'une version si une étiquette semver est présente.
  • Plusieurs étiquettes none peuvent être incluses pour ajouter le PR sous différentes sections du journal des modifications
  • Dans cette proposition, il n'y a pas d'étiquette arbitraire. Toute étiquette incluse a un impact sur la sortie.

Décrivez les alternatives que vous avez envisagées

C'est certes encore compliqué et certainement plus bavard. Une alternative (et un léger compromis par rapport à ce que nous avons aujourd'hui) serait de traiter les étiquettes semver différemment.

{
  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'
      }
    ]
  }
}

Dans cette version, major , minor , et patch conservent une API similaire à ce qu'ils ont aujourd'hui. Cependant, ils sont essentiellement traités comme des cas particuliers. Toutes les autres étiquettes vont dans ce seau other (qui pourrait avoir un meilleur nom).

Dans ce scénario:

  • un seul semver peut être présent à la fois
  • skipRelease: true peuvent être inclus sur les étiquettes other pour en faire un saut.
  • changelogTitle peuvent être inclus sur les étiquettes other pour ajouter une entrée dans le journal des modifications. (Encore une fois, cela ferait double emploi avec d'autres entrées).
  • N'avoir ni skipRelease ni changelogTitle ferait de l'étiquette une étiquette arbitraire sans opération (ce qui préserve le support d'étiquette arbitraire que nous avons aujourd'hui).

Finalement, je suis ouvert à d'autres idées. Je pense juste que notre approche actuelle est assez riche en affaires et pièges sans papiers. J'aimerais rendre cela aussi facile à comprendre (et à coder) que possible.

enhancement major released

Commentaire le plus utile

Si vous avez des labels ou skipReleaseLabels supplémentaires, vous devrez utiliser le nouveau format

https://intuit.github.io/auto/pages/autorc.html#label -personnalisation

Tous les 17 commentaires

J'aime la première option. c'est un super simple et propre, j'ai du mal à faire la différence entre none et skip . Si je comprends bien, skip n'a aucune incidence sur le journal des modifications et doit être avec une étiquette semver, et none ignorera une version mais créera une entrée unique dans le journal des modifications.

cette méthode élimine la plupart des raccourcis, mais je pense que nous pourrions encore en supporter quelques-uns ?

par exemple, ce qui suit remplacera l'étiquette par défaut major mais héritera également de la description et du changelogTitle

{
  labels: [
    {
      name: 'Breaking change',
      releaseType: 'major'
    }
  ]
}

ou juste en éditant le titre

{
  labels: [
    {
      releaseType: 'major',
      changelogTitle: 'Super Big Changes'
    }
  ]
}

skip c'est ne pas faire de release. none signifie que le label n'a aucun effet sur la version... donc il peut sortir ou ne pas sortir, selon la présence d'autres labels. Il a besoin d'un meilleur nom.

Donc , sous votre suggestion, les étiquettes par défaut ont des solutions de repli en fonction de ce releaseType est présente? Je pense que cela a du sens.

Donc, selon votre suggestion, les étiquettes ont des solutions de secours par défaut basées sur le type de version présent ? Je pense que cela a du sens.

Ouais

@zephraph Il a besoin d'un meilleur nom.

Je pense que c'est un grand. Il n'y a rien de mieux que de dire "c'est nul car cela n'a aucun impact sur le processus de publication, par exemple corvée/dépendances/quoi que ce soit".

pense que cela a du sens.

Ouais, totalement.

La proposition est géniale.
Je pense que name et chagelogTitle devraient tous deux avoir des valeurs par défaut basées sur le releaseType .

J'ai un PR pour cela maintenant. Il n'aborde pas les points suivants

  1. Les titres du journal des modifications peuvent être ajoutés aux étiquettes, mais l'ordre dans lequel ils prévalent n'est pas exactement clair. Si des étiquettes mineures et de documentation existent toutes les deux, quel titre du journal des modifications a préséance ?

  2. Logic plupart des validations décrites ici devraient probablement résider dans autobot. Je ne pense pas que l'auto elle-même devrait imposer cela

  3. (lié à 1) > Plusieurs étiquettes aucune peuvent être incluses pour ajouter le PR sous différentes sections du journal des modifications

Je ne comprends pas. Comment _"Une étiquette de saut n'est valide que lorsqu'elle est associée à une étiquette semver et est sinon un no-op."_ a du sens ? Si j'ai une étiquette deps ou infra , le type est skip et je veux ignorer pourquoi je dois aussi ajouter une étiquette semver ? Je suppose que je devrais utiliser le none alors, mais cela permet également d'ajouter l'étiquette semver, alors... WAT?! :RÉ

Actuellement j'ai

    "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"
      }
    },

et je veux sauter sur docs, skip-release, devDeps et infra, mais je ne veux pas sauter sur deps par exemple. Parce que j'utilise renovate et que je veux des versions de correctifs sur fix(deps) .

J'ai également activé onlyPublishWithReleaseLabel toute façon, donc ce ne sera pas un gros problème pour moi.

Et encore une chose, est-ce que changelogTitle sur le dist-tag next ? Je demande juste des éclaircissements, car ce n'est pas indiqué dans le PR.

@tunnckoCore Je pense que votre configuration ressemblerait à ceci de la nouvelle manière :

{
  "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"
    }
  ]
}

Le none agit effectivement comme un skip . Mais si vous aviez vraiment besoin de publier une mise à jour de devDep vous pourriez ajouter patch et une version serait faite. Cela diffère de l'ajout d'une étiquette skip , qui sauterait la version indépendamment des autres étiquettes.

changelogTitre

Je n'ai pas fait ça non plus. Ce n'est encore qu'un titre. Je vais l'ajouter à mon PR pour le refactor (toujours pas sur la prochaine. Je le sortirai après changelogTitle )

À droite. D'accord génial :)

Le problème a été publié dans la version 8.0.0-next.8

Est-ce maintenant? Je suppose que les prerelease sont publiés sur next ? :thinking: De toute façon, je ne suis pas pressé. Toujours en train de se battre avec Yarn v2+pnp et la construction/le regroupement.

edit : Et est-ce que title/changelogTitle manquant implique toujours qu'il ne fera pas de section dans les notes de version ?

@tunnckoCore, il existe des valeurs par défaut sur les titres du

Je pose des questions sur les autres "étiquettes personnalisées" que nous ajoutons à partir de la configuration et qui ne concernent pas le semver. Si j'ai une étiquette infra sans titre, elle ne sera pas ajoutée, n'est-ce pas ? Et quand j'aurai un titre (comme dans devDeps), il sera ajouté.


:rocket: Le problème a été publié dans la v8.0.0 :rocket:

@adierkens , il semble que ce problème ait été l'impulsion majeure derrière la révision majeure de la v8, alors je pose cette question ici... Y a-t-il quelque chose de spécial que je dois faire pour passer de la v8 à la v7.x ?

Si vous avez des labels ou skipReleaseLabels supplémentaires, vous devrez utiliser le nouveau format

https://intuit.github.io/auto/pages/autorc.html#label -personnalisation

Woohooo ! :tada: Je vais l'essayer ce week-end.

Tout d'abord, des changements sympas pour la v8 !


Concernant

Les titres du journal des modifications peuvent être ajoutés aux étiquettes, mais l'ordre dans lequel ils prévalent n'est pas exactement clair. Si des étiquettes mineures et de documentation existent toutes les deux, quel titre du journal des modifications a préséance ?

D'après les tests locaux, il semble que le comportement actuel soit :

  • attribuer un PR donné à la première étiquette avec le vrai changelogTitle dans l'ordre de priorité des releaseType ( major , minor , patch , puis tous les autres)
  • si le PR a plusieurs étiquettes associées à la même priorité releaseType ci-dessus, alors PR est d'abord inclus dans la section de l'étiquette définie dans la configuration (les étiquettes par défaut précèdent toutes les autres)

Ci-dessous quelques exemples :


(1) : étiquettes mineures et aucune
configuration :

"labels": [
  { "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "none" },
  { "name": "minor", "changelogTitle": "Enhancement", "releaseType": "minor" }
]

étiquettes sur PR :

minor

section d'étiquette du journal des modifications : minor

  • car minor releaseType a une priorité plus élevée

(2) : plusieurs étiquettes de patch
configuration :

"labels": [
  { "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "patch" },
  { "name": "core", "changelogTitle": "Core Change", "releaseType": "patch" }
]

étiquettes sur PR :

core

section d'étiquette du journal des modifications : typescript

  • car l'étiquette typescript apparaît dans la configuration avant core

(3) : aucune étiquette et aucune étiquette par défaut
configuration :

"labels": [
  { "name": "typescript", "changelogTitle": "Typescript Change", "releaseType": "none" }
]

étiquettes sur PR :

internal

section d'étiquette du journal des modifications : internal

  • car l'étiquette internal apparaît dans la configuration avant typescript (elle apparaît dans la configuration par défaut qui a la priorité la plus élevée entre le même releaseType

@hipstersmoothie , Le comportement/ordre de priorité ci-dessus est-il prévu ?

Si c'est le cas, il serait bon d'ajouter à la documentation afin qu'il soit clair comment les sections d'étiquette du journal des modifications sont générées et comment les sections ont la priorité (je pourrais aider avec cela si nécessaire)

Si non, pouvons-nous travailler à définir un ordre de préséance, que ce soit dans le cadre de cette question ou d'une autre ?

Je ne le vois pas comme quelque chose de spécial ou de mal. Cela semble assez intuitif. La seule chose importante est que major , minor et patch soient toujours les premiers dans le journal des modifications, simplement parce que c'est un peu standard. Mais même si la commande est configurable, ça va aussi.

Cette page vous a été utile?
0 / 5 - 0 notes