גלה ניהול גירסאות סמנטי

הושלם

אחת הדרכים הנפוצות ליצירת גרסאות היא השימוש בגרסאות סמנטיות (SemVer).

גרסאות סמנטיות אינן סטנדרטיות אך כן מציעות דרך עקבית לבטא את הכוונהוהסמנטיקה של גרסה מסוימת.

הוא מתאר גרסה לתאימות לאחור שלה עם גרסאות קודמות.

תבנית ניהול גירסאות סמנטית

ניהול גירסאות סמנטיות משתמש במספר גירסה בן שלושה חלקיםובתווית אופציונלית.

תבנית Major.Minor.Patch

לגרסה יש את הצורה של Major.Minor.Patch המתאימה לשלושת סוגי השינויים שכוסו בסעיף הקודם.

מבנה גרסה:

  • מייג'ור: המספר הראשון, מציין את השינויים המעברים.
  • קטין: המספר השני, מציין תכונות חדשות (תאימות לאחור).
  • טלאי: המספר השלישי, מציין תיקוני באגים (תואם לאחור).

דוגמאות לגירסאות המשתמשות בסכימת ניהול גרסאות סמנטיות:

  • 1.0.0 - שחרור ראשוני יציב
  • 3.7.129 - גרסה 3 עם עדכונים קטנים ותיקונים רבים
  • 2.0.0 - גרסה ראשית 2 עם שינויים שוברי שבירה

לגירסאות אלה אין תוויות.

כללי תוספת גירסה

מתי להגדיל כל מספר:

תוספת מז'ור (X.0.0)

  • שינויים מפוצצים: בצע שינויים לא תואמים ב-API.
  • הסרת פונקציונליות: מחיקת תכונות שהוצאו משימוש.
  • שינויים אדריכליים: עיצוב מחדש יסודי.

דוגמה:

  • 1.5.3 2.0.0→ כאשר מכניסים שינויים מבריקים

תוספת מינורית (x.Y.0)

  • תכונות חדשות: הוסף פונקציונליות באופן תואם לאחור.
  • הוצאת פונקציונליות משימוש: סמן תכונות כתכונות שהוצאו משימוש (אך עדיין פונקציונליות).
  • שיפורים: שיפורים משמעותיים בתכונות הקיימות.

דוגמה:

  • 1.5.3 1.6.0→ בעת הוספת תכונות חדשות

תיקון תוספת (x.y.Z)

  • תיקוני: בצע תיקוני באגים תואמים לאחור.
  • תיקוני אבטחה: תקן פגיעויות אבטחה.
  • שיפורי ביצועים: אופטימיזציות ביצועים קלות.

דוגמה:

  • 1.5.3 1.5.4→ לתיקוני באגים

גירסאות קדם-הפצה

עבור גרסאות קדם-הפצה, נהוג להשתמש בתווית לאחר מספר הגרסה הרגילה.

תבנית תווית

תווית היא סיומת טקסטואלית המופרדת באמצעות מקף משאר מספר הגירסה.

התווית עצמה יכולה להיות כל טקסט המתאר את אופי קדם-ההפצה.

מבנה התווית:

Major.Minor.Patch-label

תוויות קדם-הפצה נפוצות

דוגמאות לכך הן rc1, beta27ו alpha- , היוצרים מספרי גירסאות כמו:

  • 1.0.0-alpha - גרסת פיתוח מוקדמת, לא יציבה.
  • 1.0.0-beta - התכונה הושלמה, אבל עלולה להיות באגים.
  • 1.0.0-beta.2 - גרסת בטא שנייה.
  • 1.0.0-rc1 - שחרור מועמד, שעשוי להיות מוכן לשחרור.
  • 1.0.0-preview - גרסת תצוגה מקדימה למשוב מוקדם.

דוגמה להתקדמות גרסה:

1.0.0-alpha.1
1.0.0-alpha.2
1.0.0-beta.1
1.0.0-beta.2
1.0.0-rc1
1.0.0-rc2
1.0.0

מוסכמות קדם-הפצה של תוויות

קידומות תוויות נפוצות:

  • אלפא: גרסה מוקדמת מאוד, צפו לבאגים ושינויי שבירה.
  • ביתא: התכונה הושלמה, עוברת בדיקות.
  • rc (מועמד לשחרור): גרסה סופית פוטנציאלית, שלב הבדיקה האחרון.
  • תצוגה מקדימה: תצוגה מקדימה מוקדמת לקבלת משוב.
  • פיתוח: תמונת מצב של פיתוח.

סיומות מספריות:

תוויות כוללות לעתים קרובות מספרים עבור גרסאות מוקדמות עוקבות:

  • 1.0.0-beta.1 1.0.0-beta.2 → →1.0.0-beta.3

שימוש בגירסאות קדם-הפצה

מהדורות מוקדמות הן דרך נפוצה להתכונן לשחרור הגרסה ללא תוויות של החבילה.

היתרונות של מהדורות מוקדמות

משוב מוקדם:

מאמצים מוקדמים יכולים לקחת תלות בגרסת קדם-הפצה כדי לבנות באמצעות החבילה החדשה.

  • שילוב בדיקות: ודא שהחבילה עובדת עם מערכות קיימות.
  • דווח על בעיות: מצא באגים לפני השחרור הרשמי.
  • ספק משוב: הצע שיפורים או שינויים.

פריסה הדרגתית:

  • הפצה מבוימת: הפצה לקהל קטן תחילה.
  • הפחתת סיכונים: תפוס בעיות לפני הפצה רחבה.
  • בניית אמון: בנה ביטחון ביציבות.

אזהרות קדם-הפצה

באופן כללי, שימוש בגרסת קדם-הפצה של חבילות ורכיביהן עבור תוכנה שהופצה אינו רעיון טוב.

סיכונים בשימוש במהדורות מוקדמות בייצור:

  • לאי-יציבות: ייתכן שלמהדורות מוקדמות יש באגים שלא התגלו.
  • שינויים מפוצצים: מהדורות מוקדמות עתידיות עשויות להציג שינויים מהשבתים.
  • ללא ערבויות: אין ערובה לתאימות לאחור.
  • מגבלות תמיכה: תמיכה מוגבלת או ללא תמיכה בגרסאות קדם-הפצה.

בדיקת גרסאות קדם-הפצה

זה טוב לצפות להשפעה של הרכיבים החדשים על ידי יצירת ענף נפרד בבסיס הקוד ושימוש בגרסת קדם-ההפצה של החבילה.

שיטות עבודה מומלצות לבדיקת קדם-הפצה:

  • סניף נפרד: צור ענף תכונה לבדיקה.
  • סביבה מבודדת: בדיקה בסביבה שאינה סביבת ייצור.
  • ניטור התנהגות: שימו לב לבעיות התנהגות או ביצועים בלתי צפויות.
  • בעיות במסמכים: עקוב אחר כל הבעיות שנמצאו.

רוב הסיכויים שיהיו שינויים לא תואמים מקדם-הפצה לגרסה הסופית.

מטא נתונים ומידע על בנייה

SemVer 2.0 תומך גם במטא נתונים של בנייה המצורפים עם סימן פלוס:

1.0.0-beta.1+20231015.abc123

בניית מטא נתונים:

  • לא נלקח בחשבון בקדימות גרסה: שתי גרסאות שונות רק במטה-נתונים של build נחשבות שוות.
  • מטרות מידע: שימושי למעקב אחר מספרי בנייה, Commit hashes.
  • דוגמה:1.0.0+build.123 או 1.0.0-beta+exp.sha.5114f85

קדימות גרסה

SemVer מגדיר כללים ברורים לקדימות גרסאות:

כללי השוואה

  1. השווה מז'ור, קטן, תיקון: בסדר הזה מבחינה מספרית.
  2. גרסאות קדם-הפצה: תמיד יש עדיפות נמוכה יותר מהגרסה הרגילה המשויכת.
  3. השוואת תוויות: מקטעים אלפאנומריים הושוו לקסיקלית, מקטעים מספריים הושוו מספרית.

דוגמאות לפי הסדר (מהנמוך לגבוה ביותר):

1.0.0-alpha
1.0.0-alpha.1
1.0.0-alpha.beta
1.0.0-beta
1.0.0-beta.2
1.0.0-beta.11
1.0.0-rc.1
1.0.0
1.0.1
1.1.0
2.0.0

יתרונות של ניהול גרסאות סמנטיות

תקשורת ברורה:

  • כוונה: מספר הגרסה מתקשר בבירור את אופי השינויים.
  • תאימות: קל לקבוע אם העדכון בטוח.
  • יכולת חיזוי: ניהול גרסאות עקבי בין חבילות.

ניהול תלות אוטומטי:

  • אילוצי גרסה: מנהלי חבילות יכולים לפתור גרסאות באופן אוטומטי.
  • עדכונים בטוחים: כלים יכולים להתעדכן בבטחה לגרסאות תואמות.
  • פתרון סכסוכים: קל יותר לפתור התנגשויות תלות.

אימוץ מערכת אקולוגית:

  • תקן תעשייה: מאומץ באופן נרחב במערכות אקולוגיות רבות.
  • תמיכה בכלים: מנהלי חבילות מבינים את SemVer.
  • ציפיות הקהילה: המפתחים מצפים לתאימות של SemVer.

ניהול גירסאות סמנטיות ב- Azure Artifacts

Azure Artifacts תומך בניהול גירסאות סמנטיות בכל סוגי החבילות:

  • NuGet: תמיכה מקורית ב-SemVer 2.0.
  • נ.מ. SemVer הוא הסטנדרט.
  • מייבן: תואם לעקרונות SemVer.
  • פיתון: PEP 440 תואם למושגי SemVer.
  • חבילות אוניברסליות: משתמש ב-SemVer 2.0.

צפיות בפיד ו-SemVer:

  • נוף @Prerelease: כולל באופן אוטומטי גרסאות עם תוויות.
  • נוף @Release: כולל רק גרסאות ללא תוויות.
  • נוף @Local: מציג את כל הגירסאות ללא קשר לתווית.

יישום ניהול גירסאות סמנטיות

ניהול גרסאות ידני:

  • עדכון קבצי חבילה: עדכן ידנית את הגרסה ב package.json, .nuspecוכו '.
  • התחייבות עם תגית: תיוג commit עם מספר גרסה.

ניהול גרסאות אוטומטי:

# Using npm version command
npm version patch  # Increment patch: 1.0.0 -> 1.0.1
npm version minor  # Increment minor: 1.0.1 -> 1.1.0
npm version major  # Increment major: 1.1.0 -> 2.0.0

# With prerelease
npm version prerelease --preid=beta  # 1.0.0 -> 1.0.1-beta.0

בצינורות CI/CD:

# Azure Pipelines example
- task: GitVersion@5
  inputs:
    runtime: "core"
    configFilePath: "GitVersion.yml"

- script: |
    echo "Semantic Version: $(GitVersion.SemVer)"
    echo "NuGet Version: $(GitVersion.NuGetVersion)"
  displayName: "Display version"

ראה גם סמנטי גירסאות 2.0.0.