یکچالشی که من باهاش روبرو شدم مدیریت نسخههای پروژههای مختلف بود و نیاز به ابزاری داشتم که هم راحتباشه که همه راحت یادش بگیرن و هم اینکه بخشی از کار رو خودکار کنه. این پست اشتراک ابزاری هست که واسه حل این مشکل استفاده کردم.
به این فرایند که به یک state از برنامهمون یک شماره یا اسم خاص تخصیص میدیم Versioning گفته میشه.
برای مدیریت version برنامه، چندین مدل مرسوم وجود داره، که شناخته ترین اونا اینها هستند:
تقریبا همهی روشهای بالا از سه بخش اصلی {patch/micro}{minor}{major} پشتیبانی میکنن. توی روش Calender معمولاً major نشون دهنده سال و minor ماه انتشار برنامه رو نشون میده. از پروژههای مرسوم که از این روش پیروی میکنن میشه به توزیع گنو/لینوکس اوبونتو، پروژه Twisted یا پکیجمنجر پایتون pip اشاره کرد:
روش Semantic هم چیزی هست که معمولاً همهجا میبینیم و خیلی شاید نیازی به توضیح اون نباشه، مثلاً 3.7.5.
اما مشکلی که دیر یا زود گریبان همه ما رو میگیره مدیریت نسخههاست وقتی تعداد پروژه بالا میره. اینجور مواقع دیگه نیاز دارید که خیلی راحتتر بتونید نسخه برنامه رو جلو ببرید یا به عبارت دیگه این کار تا حدی automatic بشه. یکی از پروژههای خوبی که به ما میتونه کمک کنه bump2version هست (این نسخه جدیدتر پروژه bumpversion هست).
خب حالا که نصب شده، کافیه واسش current_version رو مشخص کنید و بعد هر موقع خواستید نسخه رو ببرید جلو بهش بگید که مثلاً major، minor یا patch رو یک نسخه جلو ببره. مثلا، توی پروژهی پایین ما چند جای مختلف از متغییر version استفاده کردیم و هر بار هم بخوایم یک نسخه جلو بریم باید دستی این کار رو انجام بدیم.
اما با کمک این ابزار میشه اینجوری این معضل رو حل کرد (نسخه فعلی رو واسش مشخص کردیم و بهش گفتیم که قصد داری بخش patch رو افزایش بدیم):
یک امکان باحالتر این پروژه اینِ که میتونید کنار پروژهتون یک فایل کانفیگ بذارید و توی اون نسخهی فعلی رو مشخص کنید و بعدش میتونیم کار تغییر رو به برنامه bumpversion بسپاریم:
با کانفیگ بالا،نه تنها نسخه رو برای مدیریت میکنه بلکه خودش کامیت رو هم انجام میده ولی ازش خواستیم که تگ نزنه.
یک قاعده کلی هم میشه راجعبه Major، Minor و Patch گفت:
هر موقع ما یک باگ رو اصلاح میکنیم انتظار میره که Patch رو جلو ببریم. وقتی یک قابلیت جدید به برنامهمون اضافه میکنیم که با نسخههای قبلی سازگار هست، سراغ Minor میریم.
و نهایتاً وقتی برنامه تغییرات زیادی میکنه که سازگاری با نسخههای قبلی دیگه وجود نداره توسعهدهندهها Major رو تغییر میدن. برای اطلاعات بیشتر در این رابطه خوبه مستندات خود SemVer رو بخونید.
امیدوارم از این مطب کوتاه چیزی مفیدی عایدتون شده باشه!