Auto: [RFC] Sederhanakan konfigurasi label

Dibuat pada 6 Jul 2019  ·  17Komentar  ·  Sumber: intuit/auto

Apakah permintaan fitur Anda terkait dengan masalah?

Sepanjang proses pengerjaan autobot saya telah berjuang dengan penanganan/parsing/groking pengaturan konfigurasi label otomatis.

Bahkan ketika saya mulai menggunakan otomatis, memetakan perilaku yang saya inginkan ke konfigurasi yang tersedia sedikit rumit.

Di bawah ini saya akan menguraikan beberapa perilaku yang menurut saya membuatnya lebih kompleks daripada yang seharusnya:

  • Definisi label dapat berupa string atau objek. Ini membantu untuk steno, tetapi membuatnya sedikit lebih sulit untuk memetakan secara mental (dan membangun alat untuk). Objek dapat memiliki nama, tetapi itu opsional (menarik dari kunci jika tidak ditentukan). Ini membuat perkakas sedikit lebih sulit.
  • Ada labels dan skipReleaseLabels . Label di labels yang juga ada di skipReleaseLabels akan melewatkan rilis. Jadi, jika Anda menginginkan label dokumentasi yang tidak dirilis, label tersebut perlu ditambahkan di dua tempat. Juga, apa yang terjadi ketika Anda menambahkan major , minor , atau patch ke bagian skipReleaseLabels ? Dan kemudian ada label skip-release yang berbeda dari skipReleaseLabels .
  • Judul changelog dapat ditambahkan ke label, tetapi tidak begitu jelas urutannya. Jika label minor dan documentation keduanya ada, judul changelog mana yang lebih diutamakan?

Jelaskan solusi yang Anda inginkan

Saya ingin mengusulkan agar kami menyederhanakan definisi label dan dengan jelas mendokumentasikan setiap kasus sudut. Ini hanya satu saran.

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

Logika

  • name dan releaseType diperlukan
  • releaseType didefinisikan sebagai major | minor | patch | skip | none . Ini dapat dikurangi lebih lanjut menjadi tiga kategori: semver | skip | none .
  • Hanya satu label semver dapat ditampilkan pada satu waktu tertentu.
  • Label semver _harus_ ada, kecuali jika none ada.
  • Label skip hanya valid bila dipasangkan dengan label semver dan sebaliknya adalah larangan.
  • Jenis none tidak menghasilkan rilis dengan sendirinya, tetapi dapat disertakan dengan label semver untuk menyertakan entri log perubahan tambahan.
  • Rilis none tidak menyebabkan rilis dilewati jika ada label semver .
  • Beberapa label none dapat dimasukkan untuk menambahkan PR di bawah bagian berbeda dari changelog
  • Dalam proposal ini tidak ada yang namanya label sembarangan. Label apa pun yang disertakan memiliki beberapa dampak pada rilis.

Jelaskan alternatif yang telah Anda pertimbangkan

Ini memang masih rumit dan tentunya lebih bertele-tele. Alternatif (dan sedikit kompromi dengan apa yang kita miliki saat ini) adalah memperlakukan label semver berbeda.

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

Dalam versi ini, major , minor , dan patch menyimpan api yang serupa dengan yang mereka miliki saat ini. Mereka pada dasarnya diperlakukan sebagai kasus khusus. Semua label lain masuk ke ember other (yang bisa memiliki nama yang lebih baik).

Dalam skenario ini:

  • hanya satu semver dapat hadir pada suatu waktu
  • skipRelease: true dapat dimasukkan pada label other untuk membuatnya dilewati.
  • changelogTitle dapat dimasukkan pada label other untuk menambahkan entri changelog. (Sekali lagi, ini akan menjadi duplikat dari entri lain).
  • Tidak memiliki skipRelease atau changelogTitle akan membuat label menjadi label arbitrer tanpa operasi (yang mempertahankan dukungan label arbitrer yang kita miliki saat ini).

Pada akhirnya saya terbuka untuk ide-ide lain. Saya hanya berpikir pendekatan kami saat ini cukup penuh dengan kasus sudut dan gotcha yang tidak berdokumen. Saya ingin membuat ini semudah mungkin untuk dipahami (dan dikodekan).

enhancement major released

Komentar yang paling membantu

Jika Anda memiliki labels atau skipReleaseLabels Anda harus menggunakan format baru

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

Semua 17 komentar

Saya suka opsi pertama. ini sangat sederhana dan bersih, saya kesulitan membedakan perbedaan antara none dan skip . Jika saya mengerti dengan benar skip tidak ada hubungannya dengan changelog dan perlu dengan label semver, dan none akan melewatkan rilis tetapi membuat entri changelog yang unik.

metode ini menghilangkan sebagian besar singkatan tetapi saya pikir kami masih dapat mendukung beberapa?

misalnya yang berikut ini akan mengganti label major default tetapi juga mewarisi deskripsi dan changelogTitle

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

atau hanya mengedit judul

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

skip adalah tidak melakukan rilis. none artinya label tidak berpengaruh pada rilis... jadi bisa rilis atau tidak rilis, tergantung keberadaan label lain. Itu memang membutuhkan nama yang lebih baik.

Jadi berdasarkan saran Anda, label memiliki fallback default berdasarkan releaseType yang ada? Saya pikir itu masuk akal.

Jadi berdasarkan saran Anda, label memiliki fallback default berdasarkan releaseType apa yang ada? Saya pikir itu masuk akal.

ya

@zephraph Itu memang membutuhkan nama yang lebih baik.

Saya pikir itu bagus. Tidak ada yang lebih baik daripada mengatakan "tidak ada karena tidak berdampak pada proses rilis, misalnya tugas/dependensi/apa pun".

berpikir itu masuk akal.

Ya, benar-benar.

Usulannya luar biasa.
Saya pikir name dan chagelogTitle keduanya harus memiliki default berdasarkan releaseType .

Saya punya PR untuk ini sekarang. Itu tidak membahas hal-hal berikut:

  1. Judul changelog dapat ditambahkan ke label, tetapi tidak begitu jelas urutannya. Jika label minor dan dokumentasi keduanya ada, judul changelog mana yang diutamakan?

  2. Logic sebagian besar validasi yang dijelaskan di sini mungkin harus hidup di autobot. Saya tidak berpikir auto itu sendiri harus memaksakan ini

  3. (terkait dengan 1) > Beberapa label tidak ada yang dapat dimasukkan untuk menambahkan PR di bawah bagian berbeda dari changelog

Saya tidak mengerti. Bagaimana _"Label lewati hanya valid ketika dipasangkan dengan label semver dan sebaliknya tidak boleh."_ masuk akal? Jika saya memiliki deps label atau infra , ketik skip dan saya ingin melewatkan rilis mengapa saya perlu menambahkan label semver juga? Saya kira saya harus menggunakan none , tetapi ini juga memungkinkan menambahkan label semver juga, jadi... WAT?! :D

Saat ini saya punya

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

dan saya ingin melewatkan dokumen, melewatkan-rilis, devDeps dan infra, tetapi tidak ingin melewatkan deps misalnya. Karena saya menggunakan renovate dan ingin rilis patch pada fix(deps) .

Saya juga tetap mengaktifkan onlyPublishWithReleaseLabel jadi itu tidak akan menjadi masalah besar bagi saya.

Dan satu hal lagi, apakah changelogTitle di tag dist next ? Saya hanya meminta klarifikasi, karena tidak ditampilkan di PR.

@tunnckoCore Saya pikir pengaturan Anda akan terlihat seperti ini dengan cara baru:

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

Tidak ada yang secara efektif bertindak sebagai skip . Tetapi jika Anda benar-benar perlu merilis pembaruan devDep Anda dapat menambahkan patch dan rilis akan dibuat. Ini berbeda dengan menambahkan label skip , yang akan melewatkan rilis terlepas dari label lainnya.

changelogTitle

Saya juga belum melakukan ini. Masih sebatas judul. Saya akan menambahkan ini ke PR saya untuk refactor (masih belum di berikutnya. Saya akan mengeluarkannya setelah changelogTitle )

Benar. Oke, bagus :)

Masalah dirilis di v8.0.0-next.8

Apakah sekarang? Saya menduga prerelease s diterbitkan pada next ? :thinking: Lagi pula, saya tidak terburu-buru. Masih berjuang dengan Benang v2+pnp dan bangunan/bundling.

edit: Dan apakah title/changelogTitle hilang masih menyiratkan bahwa itu tidak akan membuat bagian dalam Catatan rilis?

@tunnckoCore ada default pada judul changelog berdasarkan versi apa yang Anda rilis.

Saya bertanya tentang "label khusus" lain yang kami tambahkan dari konfigurasi dan itu bukan tentang semver. Jika saya memiliki label infra tanpa judul, itu tidak akan ditambahkan, bukan? Dan ketika saya memiliki judul (seperti di devDeps) itu akan ditambahkan.


:rocket: Masalah dirilis di v8.0.0 :rocket:

@adierkens , sepertinya masalah ini adalah dorongan utama di balik v8 major rev, jadi saya mengajukan pertanyaan ini di sini... Apakah ada hal khusus yang perlu saya lakukan untuk meningkatkan ke v8 dari v7.x?

Jika Anda memiliki labels atau skipReleaseLabels Anda harus menggunakan format baru

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

Wooooooo! :tada: Saya akan mencobanya di akhir pekan.

Pertama-tama, Perubahan keren untuk v8!


Tentang

Judul changelog dapat ditambahkan ke label, tetapi tidak begitu jelas urutannya. Jika label minor dan dokumentasi keduanya ada, judul changelog mana yang diutamakan?

Dari pengujian lokal, tampaknya perilaku saat ini adalah:

  • tetapkan PR yang diberikan ke label pertama dengan kebenaran changelogTitle dalam urutan prioritas releaseType ( major , minor , patch , lalu semua yang lain)
  • jika PR memiliki beberapa label yang terkait dengan prioritas releaseType atas, maka PR disertakan dalam bagian label yang ditentukan dalam konfigurasi terlebih dahulu (label default mendahului yang lainnya)

Di bawah ini adalah beberapa contoh:


(1): minor dan tidak ada label
konfigurasi:

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

label pada PR:

minor

bagian label changelog: minor

  • karena minor releaseType memiliki prioritas yang lebih tinggi

(2): beberapa label tambalan
konfigurasi:

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

label pada PR:

core

bagian label changelog: typescript

  • karena label typescript muncul di konfigurasi sebelum core

(3): tidak ada label dan tidak ada label default
konfigurasi:

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

label pada PR:

internal

bagian label changelog: internal

  • karena label internal muncul di config sebelum typescript (muncul di default config yang lebih diutamakan antara releaseType

@hipstersmoothie , Apakah urutan perilaku/prioritas di atas dimaksudkan?

Jika demikian, akan lebih baik untuk menambahkan dokumentasi sehingga jelas bagaimana bagian label changelog dibuat dan bagaimana bagian didahulukan (saya dapat membantu dengan ini jika diperlukan)

Jika tidak, dapatkah kita bekerja untuk menentukan urutan prioritas, baik sebagai bagian dari masalah ini atau lainnya?

Saya tidak melihatnya sebagai sesuatu yang istimewa atau salah. Tampaknya cukup intuitif. Satu-satunya hal yang penting adalah major , minor dan patch untuk selalu menjadi yang pertama di changelog, hanya karena itu hal yang standar. Tetapi bahkan jika pesanan dapat dikonfigurasi, tidak apa-apa juga.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat