Auto: [RFC]ラベル構成を簡素化する

作成日 2019年07月06日  ·  17コメント  ·  ソース: intuit/auto

機能リクエストは問題に関連していますか?

上の作業の過程を通して、オートボット私は、自動のラベルの構成セットアップをgroking /パース/取り扱いに苦労しました。

autoを使い始めたときでさえ、私が望むものの振る舞いを利用可能な構成にマッピングすることは少しトリッキーでした。

以下に、必要以上に複雑になると思われる動作の概要を示します。

  • ラベル定義は、文字列またはオブジェクトにすることができます。 これは速記には役立ちますが、精神的にマッピングする(およびツールを構築する)のが少し難しくなります。 オブジェクトには名前を付けることができますが、オプションです(定義されていない場合はキーからプルします)。 これにより、ツーリングが少し難しくなります。
  • labelsskipReleaseLabelsます。 skipReleaseLabelsもあるlabelsのラベルは、リリースをスキップします。 したがって、リリースを行わないドキュメントラベルが必要な場合は、2か所に追加する必要があります。 また、 majorminor 、またはpatchskipReleaseLabelsセクションに追加するとどうなりますか? そして、 skipReleaseLabelsとは異なるskip-releaseラベルがあります。
  • 変更ログのタイトルはラベルに追加できますが、どの順序で優先されるかは明確ではありません。 minordocumentation両方のラベルが存在する場合、どちらの変更ログのタイトルが優先されますか?

希望するソリューションを説明してください

ラベルの定義を大幅に簡素化し、コーナーケースを明確に文書化することを提案したいと思います。 これは1つの提案にすぎません。

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

論理

  • namereleaseTypeが必要です
  • releaseTypemajor | minor | patch | skip | noneとして定義されます。 これはさらに3つのカテゴリに減らすことができます: semver | skip | none
  • 一度に存在できるsemverラベルは1つだけです。
  • noneが存在しない限り、 semverラベルが存在する必要があります。
  • skipラベルは、 semverラベルとペアになっている場合にのみ有効であり、それ以外の場合はノーオペレーションです。
  • noneタイプは、それ自体ではリリースを生成しませんが、追加の変更ログエントリを含めるためにsemverラベルに含めることができます。
  • noneリリースでは、 semverラベルが存在する場合、リリースがスキップされることはありません。
  • 複数の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'
      }
    ]
  }
}

このバージョンでは、 majorminor 、およびpatchは、現在のAPIと同様のAPIを維持します。 ただし、基本的には特殊なケースとして扱われます。 他のすべてのラベルは、このotherバケットに入ります(より適切な名前が付けられている可能性があります)。

このシナリオでは:

  • 一度に存在できるsemverは1つだけです
  • skipRelease: trueotherラベルに含めて、スキップさせることができます。
  • changelogTitleotherラベルに含めて、変更ログエントリを追加できます。 (繰り返しますが、これは他のエントリと重複します)。
  • skipReleasechangelogTitleも持たない場合、ラベルはノーオペレーションの任意のラベルになります(これにより、現在の任意のラベルのサポートが維持されます)。

最終的に、私は他のアイデアを受け入れます。 私たちの現在のアプローチは、文書化されていないコーナーケースと落とし穴でかなり溢れていると思います。 これをできるだけ理解しやすく(そしてコーディングしやすく)したいと思います。

enhancement major released

最も参考になるコメント

追加のlabelsまたはskipReleaseLabels場合は、新しい形式を使用する必要があります

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

全てのコメント17件

私は最初のオプションが好きです。 とてもシンプルでクリーンです。 noneskipの違いを区別するのに苦労しています。 私が正しく理解していれば、 skipは変更ログとは関係がなく、semverラベルを付ける必要があり、 noneはリリースをスキップしますが、一意の変更ログエントリを作成します。

この方法はほとんどの速記を取り除きますが、私たちはまだいくつかをサポートできると思いますか?

たとえば、次のようにすると、デフォルトのmajorラベルが上書きされますが、説明とchangelogTitleも継承されます。

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

または単にタイトルを編集する

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

skipはリリースを行いません。 noneは、ラベルがリリースに影響を与えないことを意味します...したがって、他のラベルの存在に応じて、リリースされる場合とされない場合があります。 より良い名前が必要です。

それで、あなたの提案の下で、ラベルには、存在するreleaseType基づいたデフォルトのフォールバックがありますか? それは理にかなっていると思います。

それで、あなたの提案の下で、ラベルには、存在するreleaseTypeに基づいたデフォルトのフォールバックがありますか? それは理にかなっていると思います。

うん

@zephraphもっと良い名前が必要です。

素晴らしいものだと思います。 「雑用/依存関係など、リリースプロセスに影響を与えないため、何もありません」と言うよりも良いことはありません。

それは理にかなっていると思います。

うん、完全に。

提案は素晴らしいです。
namechagelogTitleはどちらも、 releaseType基づくデフォルトを持つべきだと思います。

私は今これのためにPRを持っています。 以下については触れていません

  1. 変更ログのタイトルはラベルに追加できますが、どの順序で優先されるかは明確ではありません。 マイナーラベルとドキュメントラベルの両方が存在する場合、どちらの変更ログタイトルが優先されますか?

  2. Logicここで説明する検証のほとんどは、おそらくオートボットに存在するはずです。 私は自動車自体がこれを強制するべきだとは思わない

  3. (1に関連)>変更ログのさまざまなセクションの下にPRを追加するために、複数のnoneラベルを含めることができます

わかりません。 どのように_ "スキップラベルは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有効にしているので、大きな問題にはなりません。

そしてもう1つ、 next dist-tagにchangelogTitleがありますか? 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ラベルを追加することとは異なります。

changelogTitle

私もこれをしていません。 まだタイトルです。 これをリファクタリングのPRに追加します(まだ次はありません。changelogTitleの後で取得します)

右。 さて、素晴らしい:)

問題はv8.0.0-next.8でリリースされました

今ですか? prereleasenext公開されていると思いますか? :thinking:とにかく、私は急いでいません。 まだYarnv2 + pnpと構築/バンドルと戦っています。

編集:そして、 title/changelogTitleが欠落しているということは、リリースノートにセクションが作成されないことを意味しますか?

@tunnckoCoreリリースするバージョンに基づいて、変更ログのタイトルにデフォルトがあります。

構成から追加した、semverに関するものではない他の「カスタムラベル」について質問しています。 タイトルのないinfraラベルがある場合、追加されませんよね? そして、私がタイトルを持っているとき(devDepsのように)、それは追加されます。


:rocket:問題はv8.0.0でリリースされました:rocket:

@adierkens 、この問題はv8メジャー

追加のlabelsまたはskipReleaseLabels場合は、新しい形式を使用する必要があります

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

Wooohooo! :tada:週末にやってみます。

まず第一に、v8のクールな変更です!


それにかんする

変更ログのタイトルはラベルに追加できますが、どの順序で優先されるかは明確ではありません。 マイナーラベルとドキュメントラベルの両方が存在する場合、どちらの変更ログタイトルが優先されますか?

ローカルテストから、現在の動作は次のようです。

  • truthyで最初のラベルに与えPRを割り当てるchangelogTitleの優先順位にreleaseTypemajorminorpatch 、その後、他のすべて)
  • PRに上記の同じ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 、上記の動作/優先順位は意図されていますか?

その場合は、ドキュメントに追加して、変更ログラベルセクションがどのように生成され、セクションがどのように優先されるかを明確にすることをお勧めします(必要に応じてこれを支援できます)

そうでない場合は、この問題の一部として、または別の問題の一部として、優先順位を定義するために作業できますか?

私はそれを特別なものや間違ったものとは見ていません。 十分直感的に思えます。 唯一の重要なことは、 majorminor 、およびpatchが、一種の標準的なものであるという理由だけで、常に変更ログの最初にあることです。 ただし、順序が構成可能であっても問題ありません。

このページは役に立ちましたか?
0 / 5 - 0 評価