Auto: [RFC] Упростите настройку ярлыков

Созданный на 6 июл. 2019  ·  17Комментарии  ·  Источник: intuit/auto

Ваш запрос функции связан с проблемой?

На протяжении всего процесса работы над автоботом я боролся с настройкой конфигурации меток для работы с / парсингом / поиском.

Даже когда я начал использовать 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 для включения дополнительной записи в журнале изменений.
  • Релиз 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'
      }
    ]
  }
}

В этой версии major , minor и patch сохраняют тот же API, что и сегодня. Однако, по сути, они рассматриваются как особые случаи. Все остальные ярлыки входят в эту other (название которой могло бы быть получше).

В этом сценарии:

  • одновременно может присутствовать только один semver
  • skipRelease: true можно добавить в ярлыки other чтобы их пропускать.
  • changelogTitle можно добавить в ярлыки other чтобы добавить запись в журнал изменений. (Опять же, это будет дублировать другие записи).
  • Отсутствие ни skipRelease ни changelogTitle сделало бы метку бесполезной произвольной меткой (которая сохраняет поддержку произвольной метки, которую мы имеем сегодня).

В конечном итоге я открыт для других идей. Я просто думаю, что наш нынешний подход изобилует недокументированными угловыми случаями и ошибками. Я хотел бы, чтобы это было как можно проще для понимания (и для кодирования).

enhancement major released

Самый полезный комментарий

Если у вас есть лишние labels или skipReleaseLabels вам нужно будет использовать новый формат

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

Все 17 Комментарий

Мне нравится первый вариант. это супер простой и чистый, мне трудно различить разницу между 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 Это имя должно быть получше.

Я считаю, что он отличный. Нет ничего лучше, чем сказать «нет, потому что это не влияет на процесс выпуска, например, chore / dependencies / что-то еще».

думаю, это имеет смысл.

Да уж точно.

Предложение потрясающее.
Я думаю, что name и chagelogTitle должны иметь значения по умолчанию, основанные на releaseType .

У меня есть пиар для этого сейчас. Он не касается следующих

  1. Заголовки журнала изменений могут быть добавлены к ярлыкам, но не совсем ясно, в каком порядке они имеют прецедент. Если существуют и второстепенные ярлыки, и ярлыки документации, какое название журнала изменений имеет приоритет?

  2. Logic большая часть описанной здесь проверки, вероятно, должна выполняться автоботом. Я не думаю, что сам автомобиль должен заставлять это

  3. (относится к 1)> Можно добавить несколько меток none, чтобы добавить PR в разные разделы журнала изменений

Я не понимаю. Как _ "Метка пропуска действительна только в паре с меткой semver, в противном случае она не работает". _ Имеет смысл? Если у меня есть deps label или 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 . Потому что я использую Renewate и хочу выпускать исправления для 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"
    }
  ]
}

Отсутствие эффективно действует как skip . Но если вам действительно нужно выпустить обновление devDep вы можете добавить patch и выпуск будет произведен. Это отличается от добавления лейбла skip , который пропустит выпуск независимо от других лейблов.

changelogTitle

Я этого тоже не делал. Это все еще просто название. Я добавлю это в свой PR для рефакторинга (еще не в следующем. Я выйду после changelogTitle)

Правильно. Ладно, отлично :)

Проблема была выпущена в v8.0.0-next.8

Это сейчас? Я предполагаю, что prerelease s публикуются на next ? : Thinking: Да ладно, я не тороплюсь. Все еще борется с Yarn v2 + pnp и сборкой / сборкой.

edit: И не означает ли отсутствие title/changelogTitle что раздел в примечаниях к выпуску не будет?

@tunnckoCore есть значения по умолчанию для заголовков

Я спрашиваю о других "настраиваемых ярлыках", которые мы добавляем из конфигурации и не о семвере. Если у меня есть лейбл infra без заголовка, он не будет добавлен, верно? И когда у меня будет заголовок (как в devDeps), он будет добавлен.


: rocket: Проблема появилась в версии 8.0.0: rocket:

@adierkens , похоже, что эта проблема была основным стимулом для основной версии v8, поэтому я задаю этот вопрос здесь ... Есть ли что-то особенное, что мне нужно сделать, чтобы перейти на v8 с v7.x?

Если у вас есть лишние labels или skipReleaseLabels вам нужно будет использовать новый формат

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

Wooohooo! : tada: На выходных попробую.

Прежде всего, крутые изменения для v8!


Касательно

Заголовки журнала изменений могут быть добавлены к ярлыкам, но не совсем ясно, в каком порядке они имеют прецедент. Если существуют и второстепенные ярлыки, и ярлыки документации, какое название журнала изменений имеет приоритет?

Судя по локальному тестированию, текущее поведение выглядит следующим образом:

  • назначьте данный PR первой метке с правдивым changelogTitle в порядке приоритета releaseType ( major , minor , patch , потом все остальные)
  • если PR имеет несколько меток, связанных с одним и тем же приоритетом releaseType выше, тогда PR включается в раздел метки, определенной в конфигурации, первым (метки по умолчанию предшествуют всем остальным)

Ниже приведены несколько примеров:


(1): второстепенные и никакие метки
config:

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

этикетки на PR:

minor

раздел ярлыка журнала изменений: minor

  • потому что minor releaseType имеет более высокий приоритет

(2): несколько меток патча
config:

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

этикетки на PR:

core

раздел ярлыка журнала изменений: typescript

  • потому что typescript метка появляется в конфигурации перед core

(3): нет метки и по умолчанию нет метки
config:

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

этикетки на PR:

internal

раздел ярлыка журнала изменений: internal

  • потому что internal метка появляется в конфигурации перед typescript (она появляется в конфигурации по умолчанию, которая имеет наивысший приоритет между теми же releaseType

@hipstersmoothie ,

Если это так, было бы хорошо добавить в документацию, чтобы было ясно, как создаются разделы метки журнала изменений и как разделы имеют приоритет (при необходимости я мог бы помочь с этим)

Если нет, можем ли мы поработать над определением приоритета в рамках этой или другой проблемы?

Я не считаю это чем-то особенным или неправильным. Это кажется достаточно интуитивным. Важно только то, чтобы major , minor и patch всегда были первыми в журнале изменений, просто потому, что это своего рода стандартная вещь. Но даже если порядок настраивается, это тоже нормально.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги