Auto: [RFC] تبسيط تكوين التسمية

تم إنشاؤها على ٦ يوليو ٢٠١٩  ·  17تعليقات  ·  مصدر: intuit/auto

هل طلب الميزة الخاص بك متعلق بمشكلة؟

طوال عملية العمل على autobot ، عانيت من التعامل مع إعداد تكوين تسمية السيارات / التحليل / التلميع.

حتى عندما بدأت في استخدام تلقائي ، كان تعيين سلوك ما أريده للتكوين المتاح صعبًا بعض الشيء.

سأوضح أدناه بعض السلوكيات التي أعتقد أنها تجعلها أكثر تعقيدًا مما يجب أن تكون عليه:

  • يمكن أن تكون تعريفات التسمية سلسلة أو كائن. يساعد هذا في الاختصار ، لكنه يجعل من الصعب قليلاً رسم خريطة ذهنية (وبناء أدوات). يمكن أن يكون للكائنات اسم ، لكنها اختيارية (يتم سحبها من المفتاح إذا لم يتم تعريفها). هذا يجعل الأدوات أصعب قليلاً.
  • هناك 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 _mob_ موجودة ، ما لم يكن none موجودًا بطريقة أخرى.
  • تكون التسمية skip صالحة فقط عند إقرانها بعلامة semver وتكون بخلاف ذلك علامة no-op.
  • لا يُنشئ النوع none أي إصدار بمفرده ، ولكن يمكن تضمينه مع تسمية semver لتضمين إدخال تغيير إضافي.
  • لا يتسبب إصدار none في تخطي الإصدار في حالة وجود ملصق semver .
  • يمكن تضمين عدة تسميات none لإضافة العلاقات العامة ضمن أقسام مختلفة من سجل التغيير
  • في هذا الاقتراح لا يوجد شيء اسمه التسمية التعسفية. أي ملصق مدرج له بعض التأثير على الإصدار.

صِف البدائل التي فكرت فيها

من المسلم به أن هذا لا يزال معقدًا وبالتأكيد أكثر تفصيلاً. سيكون البديل (وحل وسط بسيط لما لدينا اليوم) هو التعامل مع تسميات 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 بواجهة برمجة تطبيقات مشابهة لما لديهم اليوم. ومع ذلك ، يتم التعامل معهم بشكل أساسي على أنهم حالات خاصة. تدخل جميع التصنيفات الأخرى في مجموعة other (والتي قد يكون لها اسم أفضل).

في هذا السيناريو:

  • يمكن فقط semver واحدًا أن يكون موجودًا في المرة الواحدة
  • skipRelease: true يمكن تضمينها في other تسميات لجعلها تخطي.
  • changelogTitle يمكن تضمينها في other تسميات لإضافة إدخال التغيير. (مرة أخرى ، سيكون هذا تكرارًا لإدخالات أخرى).
  • عدم وجود أي من skipRelease أو changelogTitle سيجعل التسمية تسمية عشوائية غير عملية (والتي تحافظ على دعم التسمية التعسفي الذي لدينا اليوم).

في النهاية أنا منفتح على الأفكار الأخرى. أعتقد فقط أن نهجنا الحالي مليء جدًا بحالات الركن غير الموثقة والمشكلات. أود أن أجعل هذا سهل الفهم (والترميز) قدر الإمكان.

enhancement major released

التعليق الأكثر فائدة

إذا كان لديك أي labels إضافي من skipReleaseLabels ، فستحتاج إلى استخدام التنسيق الجديد

https://intuit.github.io/auto/pages/autorc.html#label - التخصيص

ال 17 كومينتر

أنا أحب الخيار الأول. إنه بسيط للغاية ونظيف ، أواجه مشكلة في تمييز الفرق بين none و skip . إذا فهمت بشكل صحيح ، فإن skip ليس له أي تأثير على سجل التغيير ويجب أن يكون مع ملصق semver ، و none سيتخطى الإصدار ولكنه ينشئ إدخال تغيير فريد.

تتخلص هذه الطريقة من معظم الاختصارات ولكن أعتقد أنه لا يزال بإمكاننا دعم بعضها؟

على سبيل المثال ، سيؤدي ما يلي إلى تجاوز التصنيف الافتراضي major ولكنه يرث أيضًا الوصف وعنوان التغيير

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

أو مجرد تعديل العنوان

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

skip لا تقوم بالإفراج. يعني none أن التسمية ليس لها أي تأثير على الإصدار ... لذلك قد يتم إصدارها أو قد لا يتم إصدارها ، اعتمادًا على وجود تسميات أخرى. إنها تحتاج إلى اسم أفضل.

إذن ، وفقًا لاقتراحك ، تحتوي التصنيفات على احتياطات افتراضية بناءً على ما هو releaseType الموجود؟ اعتقد ان هذا منطقي.

إذن ، وفقًا لاقتراحك ، تحتوي التصنيفات على احتياطات افتراضية بناءً على نوع الإصدار الموجود؟ اعتقد ان هذا منطقي.

بلى

zephraph إنها بحاجة إلى اسم أفضل.

أعتقد أنها واحدة رائعة. لا يوجد شيء أفضل من قول "لا شيء لأنه ليس له أي تأثير على عملية الإصدار ، مثل الأعمال الروتينية / التبعيات / أيا كان".

أعتقد أن هذا منطقي.

نعم ، تمامًا.

الاقتراح رائع.
أعتقد أن كلا من name و chagelogTitle يجب أن يكون لهما قيم افتراضية على أساس releaseType .

لدي علاقات عامة لهذا الآن. انها لا تتناول ما يلي

  1. يمكن إضافة عناوين سجل التغيير إلى التصنيفات ، ولكن ليس من الواضح تمامًا في أي ترتيب تأخذ سابقة. في حالة وجود كل من التسميات الثانوية والتوثيق ، ما هو عنوان التغيير الذي يحظى بالأسبقية؟

  2. Logic من المحتمل أن تكون معظم عمليات التحقق الموضحة هنا موجودة في autobot. لا أعتقد أن السيارة نفسها يجب أن تفرض هذا

  3. (المتعلقة بـ 1)> لا يمكن تضمين عدة تسميات لإضافة العلاقات العامة ضمن أقسام مختلفة من سجل التغيير

أنا لا أفهم. كيف _ "تكون تسمية التخطي صالحة فقط عند إقرانها بتسمية semver وتكون بخلاف ذلك علامة no-op." _ منطقية؟ إذا كان لدي ملصق deps أو infra ، اكتب skip وأريد تخطي الإصدار لماذا أحتاج إلى إضافة تسمية semver أيضًا؟ أظن أنه يجب علي استخدام none بعد ذلك ، لكن هذا يسمح أيضًا بإضافة ملصق semver أيضًا ، لذا ... WAT ؟! :د

لدي حاليا

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

وأريد أن أتخطى المستندات ، وتخطي الإصدار ، و devDeps والبنية التحتية ، لكن لا أريد أن أتخطى deps على سبيل المثال. لأنني أستخدم التجديد وأريد إصدارات التصحيح على fix(deps) .

لدي أيضًا onlyPublishWithReleaseLabel ممكّنًا على أي حال ، لذا لن تكون مشكلة كبيرة بالنسبة لي.

وشيء آخر ، هل changelogTitle على علامة dist-tag next ؟ أنا فقط أطلب التوضيح ، لأنه لا يظهر في العلاقات العامة.

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)

حق. حسنا عظيم :)

تم إصدار الإصدار في v8.0.0-next.8

هل الان؟ أظن أنه تم نشر prerelease s على next ؟ : التفكير: على أي حال ، أنا لست في عجلة من أمره. لا يزال القتال مع Yarn v2 + pnp والبناء / التجميع.

تحرير: وهل لا يزال فقدان title/changelogTitle يعني أنه لن يتم إنشاء قسم في ملاحظات الإصدار؟

tunnckoCore ، توجد تطلقه .

أنا أسأل عن "التسميات المخصصة" الأخرى التي نضيفها من التكوين والتي لا تتعلق بـ semver. إذا كان لدي ملصق infra بدون عنوان فلن تتم إضافته ، أليس كذلك؟ وعندما يكون لدي عنوان (كما هو الحال في devDeps) ، ستتم إضافته.


: صاروخ: تم إصدار الإصدار في v8.0.0: صاروخ:

adierkens ، يبدو أن هذه المشكلة كانت الدافع الرئيسي وراء مراجعة v8 الرئيسية ، لذلك أطرح هذا السؤال هنا ... هل هناك أي شيء خاص أحتاج إلى القيام به للترقية إلى الإصدار 8 من الإصدار v7.x؟

إذا كان لديك أي labels إضافي من skipReleaseLabels ، فستحتاج إلى استخدام التنسيق الجديد

https://intuit.github.io/auto/pages/autorc.html#label - التخصيص

رائع! : تادا: سأحاول ذلك في عطلة نهاية الأسبوع.

بادئ ذي بدء ، تغييرات رائعة لـ v8!


بخصوص

يمكن إضافة عناوين سجل التغيير إلى التصنيفات ، ولكن ليس من الواضح تمامًا في أي ترتيب تأخذ سابقة. في حالة وجود كل من التسميات الثانوية والتوثيق ، ما هو عنوان التغيير الذي يحظى بالأسبقية؟

من الاختبارات المحلية ، يبدو أن السلوك الحالي هو:

  • قم بتعيين PR المعطى إلى التصنيف الأول مع الحقيقة changelogTitle بترتيب الأولوية releaseType ( major ، minor ، patch ، ثم كل الآخرين)
  • إذا كان للعلاقات العامة عدة تسميات مرتبطة بنفس الأولوية releaseType المذكورة أعلاه ، فسيتم تضمين PR في قسم الملصق المحدد في التكوين أولاً (تسميات افتراضية تسبق كل العلامات الأخرى)

في الأسفل يوجد بعض الأمثلة:


(1): تسميات ثانوية ولا شيء
التكوين:

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

تسميات على العلاقات العامة:

minor

قسم تسمية التغيير: minor

  • لأن minor releaseType له أسبقية أعلى

(2): ملصقات رقعة متعددة
التكوين:

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

تسميات على العلاقات العامة:

core

قسم تسمية سجل التغيير: typescript

  • لأن التصنيف typescript يظهر في التكوين قبل core

(3): بلا تسمية وتسمية بلا تسمية افتراضية
التكوين:

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

تسميات على العلاقات العامة:

internal

قسم تسمية سجل التغيير: internal

  • لأن التسمية internal تظهر في التكوين قبل typescript (تظهر في التكوين الافتراضي الذي يأخذ أعلى أولوية بين نفس releaseType

hipstersmoothie ، هل يُقصد ترتيب السلوك / الأسبقية أعلاه؟

إذا كان الأمر كذلك ، فسيكون من الجيد الإضافة إلى الوثائق بحيث يكون من الواضح كيفية إنشاء أقسام تسمية التغيير وكيف تأخذ الأقسام الأسبقية (يمكنني المساعدة في ذلك إذا لزم الأمر)

إذا لم يكن الأمر كذلك ، فهل يمكننا العمل على تحديد ترتيب الأسبقية ، إما كجزء من هذه المشكلة أو كجزء آخر؟

لا أراه شيئًا خاصًا أو خاطئًا. يبدو بديهيًا بدرجة كافية. الشيء الوحيد المهم هو major و minor و patch لتكون دائمًا في المقدمة في التغيير ، فقط لأنها نوع من الأشياء القياسية. ولكن حتى لو كان الطلب قابلاً للتكوين ، فلا بأس أيضًا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات