GitHub Releases — versiya chiqarish, changelog

~15 daq · Git · GitHub Imkoniyatlari

Muammodan boshlaylik

Siz CLI vosita yozdingiz — dokon-cli. Foydalanuvchilar so'raydi:

  • "Eng yangi versiya qaysi?"
  • "2.4 dan 2.5 ga o'tsam nima o'zgaradi? Nima buziladi?"
  • "Windows uchun tayyor .exe qayerda? Men Go o'rnatmaganman."

Git teg (36-dars) — faqat commit ga nom. Unda tavsif sahifasi yo'q, yuklab olinadigan fayllar yo'q. Foydalanuvchilarga kerak — reliz sahifasi. Bu — GitHub Release.


Release nima?

Release — Git teg ustiga qurilgan GitHub sahifasi:

  • Teg — qaysi commit (v2.5.0)
  • Sarlavha — "v2.5.0 — Kategoriya filtri"
  • Tavsif — nima yangi, nima tuzatildi, nima buzildi (Markdown)
  • Assets — yuklab olinadigan fayllar: binarlar, arxivlar, installer lar
  • Avtomatik: manba kod arxivi (.zip, .tar.gz)

Repozitoriy sahifasining o'ng tomonida — Releases bo'limi va "Latest" belgisi. https://github.com/otabek/dokon/releases/latest — doim eng yangisi.


Qo'lda release yaratish

Repozitoriy → Releases → Draft a new release:

  1. Choose a tag — mavjud tegni tanlang (v2.5.0) yoki yangisini yozing (GitHub yaratadi)
  2. Target — qaysi branch (odatda main)
  3. Title — v2.5.0 yoki v2.5.0 — Kategoriya filtri
  4. Generate release notes tugmasi — GitHub oldingi relizdan beri merge qilingan PR larni avtomatik ro'yxatlaydi
  5. Fayllarni sudrab tashlang (assets)
  6. Belgilar:
    • Set as a pre-release — beta, rc (35-dars)
    • Set as the latest release
  7. Publish release (yoki Save draft)

Yaxshi reliz tavsifi

## ✨ Yangi imkoniyatlar
- Mahsulotlarni kategoriya bo'yicha filtrlash (#87) — @malika
- Savatda miqdorni tez o'zgartirish tugmalari (#91)

## 🐛 Tuzatishlar
- Savatda manfiy miqdor kiritish taqiqlandi (#42)
- Payme: 1 so'mlik yaxlitlash xatosi (#95)

## ⚠️ Buzuvchi o'zgarishlar
- `GET /api/products` o'rniga `GET /api/mahsulotlar`. Eski endpoint 3.0 da o'chiriladi.

## 📦 Yangilash
npm install dokon-cli@2.5.0

**To'liq o'zgarishlar:** https://github.com/otabek/dokon/compare/v2.4.1...v2.5.0

Foydalanuvchi uchun eng muhimi — buzuvchi o'zgarishlar va yangilash yo'riqnomasi. Ularni aniq va ko'rinadigan joyda yozing.

Avtomatik reliz eslatmalari

.github/release.yml — "Generate release notes" ni PR yorliqlari (25-dars) bo'yicha guruhlash:

changelog:
  exclude:
    labels: [ignore-for-release]
  categories:
    - title: ✨ Yangi imkoniyatlar
      labels: [enhancement, feature]
    - title: 🐛 Tuzatishlar
      labels: [bug]
    - title: 📚 Hujjatlar
      labels: [documentation]
    - title: Boshqalar
      labels: ["*"]

Terminaldan: gh release

gh release create v2.5.0 --generate-notes
gh release create v2.5.0 --title "v2.5.0" --notes-file CHANGELOG-2.5.0.md
gh release create v2.5.0 ./dist/*.zip --generate-notes       # fayllar bilan
gh release create v3.0.0-beta.1 --prerelease --generate-notes

gh release list
gh release view v2.5.0
gh release download v2.5.0                                   # fayllarni yuklab olish

(GitHub CLI — 54-dars.)


Avtomatik reliz — GitHub Actions

Teg push qilinganda: build → fayllar → reliz.

# .github/workflows/release.yml
name: Release

on:
  push:
    tags: ["v*"]

permissions:
  contents: write

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 22, cache: npm }
      - run: npm ci
      - run: npm run build
      - run: tar -czf dokon-${{ github.ref_name }}.tar.gz -C dist .

      - name: Release yaratish
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          gh release create ${{ github.ref_name }} \
            dokon-${{ github.ref_name }}.tar.gz \
            --generate-notes \
            --verify-tag
npm version minor && git push --follow-tags      # → v2.5.0 → reliz avtomatik

To'liq avtomatlashtirish: release-please

Conventional Commits (34-dars) bilan release-please (Google) yoki semantic-release butun jarayonni o'z zimmasiga oladi:

  1. main ga feat: va fix: commitlar tushadi
  2. Vosita avtomatik "Release PR" ochadi: versiyani hisoblaydi (fix → PATCH, feat → MINOR), CHANGELOG.md va package.json ni yangilaydi
  3. Siz Release PR ni merge qilasiz → teg + GitHub Release avtomatik yaratiladi
# .github/workflows/release-please.yml
on:
  push:
    branches: [main]
permissions:
  contents: write
  pull-requests: write
jobs:
  release-please:
    runs-on: ubuntu-latest
    steps:
      - uses: googleapis/release-please-action@v4
        with:
          release-type: node

Hech kim versiya raqamini o'ylamaydi va CHANGELOG ni qo'lda yozmaydi.


Releases va boshqa joylar

Joy Nima uchun
GitHub Release Odamlar uchun: tavsif, yuklab olish
npm / PyPI / Packagist Paket menejerlari uchun (43-dars)
Docker registry Image lar (Docker kursi, 38-dars)
CHANGELOG.md Repozitoriy ichida, kod bilan birga (35-dars)

Ko'pincha bitta workflow hammasini birdaniga yangilaydi.

Bildirishnomalar

Foydalanuvchilar repozitoriyda Watch → Custom → Releases ni tanlab, faqat yangi relizlar haqida xabar olishi mumkin. Dependabot ham relizlaringizni kuzatib, bog'liq loyihalarga yangilash PR lari ochadi.


Nima uchun shunday?

Nima uchun CHANGELOG va reliz eslatmalari shunchalik muhim — kim o'qiydi ularni?

Ular yangilash qarorini qabul qiladigan har bir kishi uchun yozilgan. Sizning kutubxonangizdan foydalanuvchi dasturchi 2.4 → 2.5 ga yangilashdan oldin bitta savol beradi: "Bu meni buzadimi va menga nima beradi?" Yaxshi reliz eslatmasi bunga 30 soniyada javob beradi. Eslatma bo'lmasa — u yo diff larni o'qib soatlab vaqt sarflaydi, yo yangilamaydi (va xavfsizlik tuzatishlaridan mahrum qoladi), yo ko'r-ko'rona yangilab, production da buzilishga uchraydi. Reliz eslatmasi — loyihangizga bo'lgan ishonchning asosi, va ochiq kodli loyihalarda u kod sifatichalik muhim.


Xulosa

Eslab qoling:

  • Release — teg + tavsif + yuklab olinadigan fayllar (GitHub sahifasi)
  • Releases → Draft a new release → teg → "Generate release notes" → Publish
  • Tavsif: yangiliklar, tuzatishlar, buzuvchi o'zgarishlar, yangilash yo'riqnomasi
  • .github/release.yml — eslatmalarni yorliqlar bo'yicha guruhlash
  • gh release create v2.5.0 --generate-notes [fayllar]
  • Actions: on: push: tags: ["v*"] → build → gh release create
  • release-please / semantic-release — Conventional Commits dan to'liq avtomatik relizlar
  • Pre-release — beta va rc versiyalar uchun

Keyingi dars

42-dars: GitHub Projects — loyiha boshqarish, Kanban board