Ledger Live Monorepo Project: חלק 1 - בעייתיות (Make it Pain) | פִּנקָס

Ledger Live Monorepo Project: חלק 1 – בעייתיות (Make it Pain) | פִּנקָס

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

קצת היסטוריה 

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

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

  • זרימות פשוטות יותר.
  • הנחיות טובות יותר לתורמים נכנסים וחיצוניים.
  • סט כלים מאוחד.
  • ניהול תלות טוב יותר.
  • תרומות מרכזיות בקוד פתוח.
מצב האומנות: לפני ההגירה
Ledger Live Monorepo Project: חלק 1 - בעייתיות (Make it Pain) | Ledger PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.
Ledger Live Monorepo Project: חלק 1 - בעייתיות (Make it Pain) | פִּנקָס

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

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

צווארי בקבוק של Dev Experience

תלוי

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

Ledger Live Monorepo Project: חלק 1 - בעייתיות (Make it Pain) | Ledger PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.
Ledger Live Monorepo Project: חלק 1 - בעייתיות (Make it Pain) | פִּנקָס

ספריות הקוד הפתוח של Ledger משמשות את ההיגיון העסקי, אשר משמש לאחר מכן הן את שולחן העבודה והן את האפליקציות לנייד. אבל האפליקציות האלה משתמשות גם בספריות הקוד הפתוח, ומשתמשות בשתי גרסאות שונות של אותה ספרייה (כמו @ledgerhq/errors למשל) ישבור את האפליקציה.

היינו צריכים להקפיץ את הגרסה בצד אחד, ואז לפרסם את הספריות (כן, ל-npm!!!), ואז לנסות שוב אם זה לא עבד. התחלנו לסמוך על yalc לפרויקטים של סימלינק, מה שבעיקר היה בסדר כל עוד לא היו לנו כמה שכבות של תלות (למשל, מספריות הקוד הפתוח ללוגיקה העסקית, ואז מהלוגיקה העסקית לאפליקציות). ניסינו בהיסוס לעבוד עם yarn link גם כן, אבל נראה שזה נידון עם React Native.

בדיקות

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

היינו צריכים גם לתחזק כמה CI עם לוגיקה משוכפלת.

החלפת הקשר

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

שחרור צווארי בקבוק בתהליך

גרסאות

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

משחרר

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

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

וכמובן, משלוח רציף לא היה מתקבל על הדעת בשלב זה.

פתרון אפשרי ?
Ledger Live Monorepo Project: חלק 1 - בעייתיות (Make it Pain) | Ledger PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.
Ledger Live Monorepo Project: חלק 1 - בעייתיות (Make it Pain) | פִּנקָס

כשמסתכלים סביב אחר השראה, נראה שארכיטקטורת מאגר מונו היא החלק המרכזי שהיה חסר לנו. זה יאפשר תהליך פיתוח הרבה יותר טוב. ישנם כלים שנבנו סביב הארכיטקטורה הזו שיעזרו לנו להשיג את החלקים החסרים (שחרור, אוטומציה, גרסאות...).

אבל מה זה מאגר מונו?

בבסיסו, מאגר מונו הוא פרויקט שמכיל את כל שאר הפרויקטים הקשורים (יישומים, ספריות, כלים) תחת תיקייה אחת / פרויקט git אחד. זה מאפשר ניהול תלות טוב יותר, אחידות של כלים (כמו סגנונות קוד ותצורות כתיבה), אינטגרציה רציפה מרכזית, בדיקות אינטגרציה, גרסה אחידה של החבילה המשומשת (הגיב למשל)...

מכיוון שזו מערכת די אגנוסטית, נותרו לנו כמה תכונות לגלות וליישם. יש לקוות שיש כמה כלים קהילתיים נהדרים שיכולים לעזור לנו להוסיף תזמור ל-builds (בנייה ברצף, מועיל ל-CI), ניהול גרסאות, יצירת יומן שינויים... מה שישלים את מה שהיה חסר לנו בתהליך השחרור שלנו.

חסרונות

מאגרי מונו הגיוניים בהקשר שבו כמה מפתחים, או צוות מפתחים עובדים על כמה פרויקטים בו זמנית, עם תלות ביניהם. עם זאת, זה מוסיף נדבך כלשהו של מורכבות במהלך שלב ההתקנה (במיוחד עם פרויקטים שכבר פועלים עם 4 שנות היסטוריה ופיתוח פעיל). ראוי להזכיר, הפרויקט נהיה הרבה יותר גדול (כמו הרבה יותר) מבחינת שטח דיסק. כל הפרויקטים נמצאים כעת תחת אותה תיקייה וכל התלות. אילו מבחנים הם חובה? מתי להפעיל אותם?

Pros

לאחר הערכת הזמן, העלות וההיתכנות של השאיפות שלנו, הנה כמה מהיתרונות הצפויים של המעבר הזה:

  • ניהול תלות משופר: עם monorepo, קל יותר לנהל תלות בין פרויקטים שונים, מכיוון שכולם מאוחסנים באותו מאגר. זה יכול להפחית את הצורך בדרכים לעקיפת הבעיה כמו קישור חוט או yalc, ולהקל להבטיח שכל הפרויקטים משתמשים בגרסאות הנכונות של התלות.
  • ארגון קוד טוב יותר: monorepo יכול להקל על ארגון הקוד, מכיוון שכל הפרויקטים והתלות שלהם מאוחסנים במאגר יחיד. קל יותר להבין כיצד פרויקטים שונים משתלבים זה בזה וכיצד הם תלויים זה בזה.
  • חווית מפתח משופרת: monorepo יכול להקל על מפתחים לעבוד על מספר פרויקטים, מכיוון שהם אינם צריכים לעבור בין בסיסי קוד או מאגרים שונים. זה גם יכול להקל על הפעלת מבחני אינטגרציה, מכיוון שכל הקוד מאוחסן באותו מאגר.
  • אוטומציה משופרת ואספקה ​​רציפה: עם monorepo, קל יותר לבצע אוטומציה של משימות כמו בנייה, בדיקה ושחרור קוד. זה יכול לעזור לייעל את תהליך השחרור ולהקל על יישום מסירה רציפה.
  • מהירות פיתוח מוגברת. מכיוון שצוותים שונים עובדים באותו מאגר, הם לא צריכים לחכות עד לשחרור כדי לאמת את התוצאה, מה שמאיץ את האינטגרציה.
סיכום

בסך הכל, הטמעה של מבנה monorepo יכולה לעזור לשפר את תהליך הפיתוח, לייעל את תהליך השחרור ולשפר את חווית המפתח.

בפוסטים הבאים בבלוג של סדרה זו, נדריך אתכם כיצד התנהל פרויקט ההגירה הגדול הזה, הכלים בהם השתמשנו, הבחירות שעשינו, התוצאה ועוד. הישארו מעודכנים לחלק 2: הכלים!


ולנטין דה אלמידה
ניסיון במפתחים & Core Tech - Ledger Live

בול זמן:

עוד מ פנקס