בסדרת פוסטים זו בבלוג, ולנטין דה אלמיידה, מפתח Ledger Live, מספר לנו על התפתחות בסיס הקוד של Ledger Live לאורך השנים. בפוסט זה בבלוג תלמדו שהוא היה מבוסס על ריבוי מאגרים בהתחלה, הבעיות שנתקלנו בהן לאורך הדרך, ומדוע הוא היה צריך להתפתח לארכיטקטורת מאגר מונו. בפוסטים הבאים בבלוג, נסביר כיצד התנהל פרויקט ההגירה הגדול הזה.
קצת היסטוריה
הצמיחה של לדג'ר בשנים 2020 ו-2021 הייתה משמעותית. גייסנו באגרסיביות כישרונות חדשים, והרחבנו את הצוות שלנו מקומץ בלבד ליותר מ-20 מפתחים. המשמעות היא שהרבה מהנדסים חדשים הצטרפו לפרויקטים קיימים. כשהצוות שלנו גדל במהירות, נתקלנו באתגרים חדשים שהיינו צריכים להתמודד במהירות. למרות הקשיים החדשים הללו, נשארנו ממוקדים במטרה שלנו והמשכנו לספק עבודה יוצאת דופן.
לקחנו צעד אחורה ובדקנו את הבעייתיות החדשה שמתעוררת כאשר יותר ויותר אנשים נכנסו לפרויקט. בין אותם אתגרים חדשים, אנו יכולים לפרט את הצרכים הבאים:
- זרימות פשוטות יותר.
- הנחיות טובות יותר לתורמים נכנסים וחיצוניים.
- סט כלים מאוחד.
- ניהול תלות טוב יותר.
- תרומות מרכזיות בקוד פתוח.
מצב האומנות: לפני ההגירה
בתחילה, ועד לשנה שעברה, לדג'ר לייב התבססה על ארכיטקטורת מאגר פולי, הן עבור חזיתות ניידות ושולחנות עבודה, כמו גם את כל ההיגיון מאחוריה. זו לא הייתה החלטה מודעת לעבוד בצורה זו, אלא זו הייתה רק תוצאה של פרויקט מתרחב ללא הובלה אדריכלית אמיתית. Ledger Live הוא פרויקט שאוסף רכיבים שונים לאחד כדי לספק את האפליקציה הטובה והמאובטחת ביותר למשתמשי הננו שלנו, וזה בא לידי ביטוי בבסיס הקוד.
הזרימות שהיו לנו במקום היו מתקלות במקרה הטוב, בעיקר בשל העובדה שהיינו 6 או 7 מפתחים לפני כמה שנים. מכיוון שפחות צדדים היו מעורבים, התקשורת הייתה הרבה יותר קלה ויצאנו מזה. ובכל זאת, היו כמה נקודות כאב בדרך שבה עבדנו, במיוחד סביב חוויית המפתח ותהליך השחרור.
צווארי בקבוק של Dev Experience
תלוי
בשל אופי הפרויקטים שלנו, אנו עובדים על מספר מאגרים בו-זמנית, עם תלות ביניהם. הנה סקירה מהירה:
ספריות הקוד הפתוח של Ledger משמשות את ההיגיון העסקי, אשר משמש לאחר מכן הן את שולחן העבודה והן את האפליקציות לנייד. אבל האפליקציות האלה משתמשות גם בספריות הקוד הפתוח, ומשתמשות בשתי גרסאות שונות של אותה ספרייה (כמו @ledgerhq/errors
למשל) ישבור את האפליקציה.
היינו צריכים להקפיץ את הגרסה בצד אחד, ואז לפרסם את הספריות (כן, ל-npm!!!), ואז לנסות שוב אם זה לא עבד. התחלנו לסמוך על yalc
לפרויקטים של סימלינק, מה שבעיקר היה בסדר כל עוד לא היו לנו כמה שכבות של תלות (למשל, מספריות הקוד הפתוח ללוגיקה העסקית, ואז מהלוגיקה העסקית לאפליקציות). ניסינו בהיסוס לעבוד עם yarn link
גם כן, אבל נראה שזה נידון עם React Native.
בדיקות
זה היה כמעט בלתי אפשרי לעשות מבחני אינטגרציה עם כל הקוד העדכני מהפרויקטים השונים. מכיוון שהיינו צריכים לפרסם את הספריות לרישום, בדיקת כל הרכיבים עם הקוד העדכני ביותר היה סיוט
היינו צריכים גם לתחזק כמה CI עם לוגיקה משוכפלת.
החלפת הקשר
הסתובבות תמיד במספר עורכי קוד / פרויקטים / ספריות גרמו לחוויית הפיתוח להיראות חלשה ממש.
שחרור צווארי בקבוק בתהליך
גרסאות
הטיפול בגירסאות של פרויקטים שונים הוא קשה, במיוחד כאשר יש כמה שכבות של תלות.
משחרר
מעקב אחר שחרורים היה מסובך בגלל העובדה שהפרויקטים מפוצלים, והיינו צריכים לנהל את השחרורים של הפרויקטים השונים
זה היה בלתי אפשרי להפוך את תהליך השחרור לאוטומטי, שוב בגלל העובדה שהפרויקטים פוצלו למאגרים שונים.
וכמובן, משלוח רציף לא היה מתקבל על הדעת בשלב זה.
פתרון אפשרי ?
כשמסתכלים סביב אחר השראה, נראה שארכיטקטורת מאגר מונו היא החלק המרכזי שהיה חסר לנו. זה יאפשר תהליך פיתוח הרבה יותר טוב. ישנם כלים שנבנו סביב הארכיטקטורה הזו שיעזרו לנו להשיג את החלקים החסרים (שחרור, אוטומציה, גרסאות...).
אבל מה זה מאגר מונו?
בבסיסו, מאגר מונו הוא פרויקט שמכיל את כל שאר הפרויקטים הקשורים (יישומים, ספריות, כלים) תחת תיקייה אחת / פרויקט git אחד. זה מאפשר ניהול תלות טוב יותר, אחידות של כלים (כמו סגנונות קוד ותצורות כתיבה), אינטגרציה רציפה מרכזית, בדיקות אינטגרציה, גרסה אחידה של החבילה המשומשת (הגיב למשל)...
מכיוון שזו מערכת די אגנוסטית, נותרו לנו כמה תכונות לגלות וליישם. יש לקוות שיש כמה כלים קהילתיים נהדרים שיכולים לעזור לנו להוסיף תזמור ל-builds (בנייה ברצף, מועיל ל-CI), ניהול גרסאות, יצירת יומן שינויים... מה שישלים את מה שהיה חסר לנו בתהליך השחרור שלנו.
חסרונות
מאגרי מונו הגיוניים בהקשר שבו כמה מפתחים, או צוות מפתחים עובדים על כמה פרויקטים בו זמנית, עם תלות ביניהם. עם זאת, זה מוסיף נדבך כלשהו של מורכבות במהלך שלב ההתקנה (במיוחד עם פרויקטים שכבר פועלים עם 4 שנות היסטוריה ופיתוח פעיל). ראוי להזכיר, הפרויקט נהיה הרבה יותר גדול (כמו הרבה יותר) מבחינת שטח דיסק. כל הפרויקטים נמצאים כעת תחת אותה תיקייה וכל התלות. אילו מבחנים הם חובה? מתי להפעיל אותם?
Pros
לאחר הערכת הזמן, העלות וההיתכנות של השאיפות שלנו, הנה כמה מהיתרונות הצפויים של המעבר הזה:
- ניהול תלות משופר: עם monorepo, קל יותר לנהל תלות בין פרויקטים שונים, מכיוון שכולם מאוחסנים באותו מאגר. זה יכול להפחית את הצורך בדרכים לעקיפת הבעיה כמו קישור חוט או
yalc
, ולהקל להבטיח שכל הפרויקטים משתמשים בגרסאות הנכונות של התלות. - ארגון קוד טוב יותר: monorepo יכול להקל על ארגון הקוד, מכיוון שכל הפרויקטים והתלות שלהם מאוחסנים במאגר יחיד. קל יותר להבין כיצד פרויקטים שונים משתלבים זה בזה וכיצד הם תלויים זה בזה.
- חווית מפתח משופרת: monorepo יכול להקל על מפתחים לעבוד על מספר פרויקטים, מכיוון שהם אינם צריכים לעבור בין בסיסי קוד או מאגרים שונים. זה גם יכול להקל על הפעלת מבחני אינטגרציה, מכיוון שכל הקוד מאוחסן באותו מאגר.
- אוטומציה משופרת ואספקה רציפה: עם monorepo, קל יותר לבצע אוטומציה של משימות כמו בנייה, בדיקה ושחרור קוד. זה יכול לעזור לייעל את תהליך השחרור ולהקל על יישום מסירה רציפה.
- מהירות פיתוח מוגברת. מכיוון שצוותים שונים עובדים באותו מאגר, הם לא צריכים לחכות עד לשחרור כדי לאמת את התוצאה, מה שמאיץ את האינטגרציה.
סיכום
בסך הכל, הטמעה של מבנה monorepo יכולה לעזור לשפר את תהליך הפיתוח, לייעל את תהליך השחרור ולשפר את חווית המפתח.
בפוסטים הבאים בבלוג של סדרה זו, נדריך אתכם כיצד התנהל פרויקט ההגירה הגדול הזה, הכלים בהם השתמשנו, הבחירות שעשינו, התוצאה ועוד. הישארו מעודכנים לחלק 2: הכלים!
ולנטין דה אלמידה
ניסיון במפתחים & Core Tech - Ledger Live
- הפצת תוכן ויחסי ציבור מופעל על ידי SEO. קבל הגברה היום.
- PlatoData.Network Vertical Generative Ai. העצים את עצמך. גישה כאן.
- PlatoAiStream. Web3 Intelligence. הידע מוגבר. גישה כאן.
- PlatoESG. פחמן, קלינטק, אנרגיה, סביבה, שמש, ניהול פסולת. גישה כאן.
- PlatoHealth. מודיעין ביוטכנולוגיה וניסויים קליניים. גישה כאן.
- מקור: https://www.ledger.com/blog/ledger-live-monorepo-project-part-1-problematics-make-it-pain
- :הוא
- :לֹא
- :איפה
- $ למעלה
- 1
- 20
- 2020
- 2021
- 7
- a
- מאיצה
- להשיג
- פעיל
- להוסיף
- כתובת
- מוסיף
- שוב
- לִפנֵי
- תעשיות
- מאפשר
- לאורך
- כְּבָר
- גם
- שאיפות
- בין
- an
- ו
- האפליקציה
- יישומים
- אפליקציות
- אדריכלי
- ארכיטקטורה
- ARE
- לְהִתְעוֹרֵר
- סביב
- אמנות
- AS
- At
- אוטומטי
- אוטומציה
- רָחוֹק
- בחזרה
- מבוסס
- לפני
- מאחור
- הטבות
- הטוב ביותר
- מוטב
- בֵּין
- גדול
- קצת
- בלוג
- בלוג הודעות
- שניהם
- לשבור
- בִּניָן
- בונה
- נבנה
- עסקים
- אבל
- by
- CAN
- מֶרכָּזִי
- מְרוּכָּז
- האתגרים
- changelog
- בחירות
- קוד
- בסיס קוד
- תקשורת
- קהילה
- להשלים
- מורכבות
- מסובך
- רכיבים
- מנוהל
- מודע
- הקשר
- נמשך
- רציף
- תרומות
- תורמים
- ליבה
- לתקן
- עלות
- יכול
- זוג
- קורס
- תַאֲרִיך
- החלטה
- למסור
- מסירה
- תלות
- תלות
- שולחן העבודה
- למרות
- dev
- מפתח
- מפתחים
- מפתחים עובדים
- צעצועי התפתחות
- DID
- אחר
- קשיים
- ספריות
- לגלות
- do
- לא
- אבוד
- ראוי
- בְּמַהֲלָך
- כל אחד
- קל יותר
- לאפשר
- עוטף
- מהנדסים
- להגביר את
- לְהַבטִיחַ
- במיוחד
- הערכה
- אבולוציה
- להתפתח
- דוגמה
- יוצא דופן
- קיימים
- הרחבת
- צפוי
- ניסיון
- להסביר
- חיצוני
- עובדה
- תכונות
- ראשון
- מתאים
- זורם
- מרוכז
- הבא
- בעד
- החל מ-
- דור
- Git
- מטרה
- קבל
- גדול
- גדלתי
- צמיחה
- הנחיות
- היה
- קומץ
- קשה
- יש
- לעזור
- מועיל
- כאן
- היסטוריה
- אני מקווה
- איך
- אולם
- HTTPS
- if
- ליישם
- הפעלה
- בלתי אפשרי
- לשפר
- in
- נכנס
- השראה
- השתלבות
- אל תוך
- מעורב
- בעיות
- IT
- שֶׁלָה
- רק
- אחרון
- שנה שעברה
- האחרון
- שכבה
- שכבות
- עוֹפֶרֶת
- לִלמוֹד
- פנקס
- ספר לדג'ר לייב
- עזבו
- פחות
- ספריות
- סִפְרִיָה
- כמו
- קשר
- רשימה
- קְצָת
- לחיות
- הגיון
- ארוך
- נראה
- נראה
- מגרש
- עשוי
- לתחזק
- גדול
- לעשות
- לנהל
- ניהול
- מנדטורי
- דרך
- max-width
- אומר
- הֲגִירָה
- חסר
- סלולרי
- -לאפליקציות לנייד
- יותר
- רוב
- בעיקר
- נע
- הרבה
- מספר
- ננו
- יליד
- טבע
- צורך
- נחוץ
- צרכי
- חדש
- הבא
- לא
- עַכשָׁיו
- of
- בסדר
- on
- ONE
- רק
- לפתוח
- קוד פתוח
- or
- תזמור
- ארגון
- אחר
- שלנו
- יותר
- סקירה
- ארוז
- כְּאֵב
- חלק
- צדדים
- חלקים
- אֲנָשִׁים
- שלב
- לְחַבֵּר
- מקום
- אפלטון
- מודיעין אפלטון
- אפלטון נתונים
- נקודה
- נקודות
- הודעה
- הודעות
- יפה
- תהליך
- פּרוֹיֶקט
- פרויקטים
- לפרסם
- מָהִיר
- מהירות
- מהר
- להגיב
- להגיב יליד
- ממשי
- בֶּאֱמֶת
- להפחית
- משתקף
- רישום
- קָשׁוּר
- לשחרר
- עיתונות
- שחרור
- לסמוך
- נשאר
- מאגר
- תוצאה
- הפעלה
- ריצה
- אותו
- לבטח
- נראה
- תחושה
- סדרה
- סט
- התקנה
- כמה
- צד
- משמעותי
- since
- יחיד
- פִּתָרוֹן
- כמה
- מָקוֹר
- מֶרחָב
- מְהִירוּת
- לפצל
- החל
- להשאר
- שלב
- עוד
- מאוחסן
- לייעל
- מִבְנֶה
- מתג
- מערכת
- כִּשָׁרוֹן
- שיחות
- משימות
- נבחרת
- צוותי
- טק
- מונחים
- בדיקות
- בדיקות
- זֶה
- השמיים
- שֶׁלָהֶם
- אותם
- אז
- שם.
- אלה
- הֵם
- זֶה
- אלה
- דרך
- זמן
- ל
- יַחַד
- לקח
- כלים
- מעקב
- מַעֲבָר
- ניסיתי
- להפעיל
- לנסות
- שתיים
- כתב כתיבה
- תחת
- להבין
- מאוחד
- לא ניתן להעלות על הדעת
- עד
- us
- להשתמש
- מְשׁוּמָשׁ
- משתמשים
- באמצעות
- שונים
- לאמת
- גרסה
- גירסאות
- לחכות
- ללכת
- היה
- דֶרֶך..
- we
- טוֹב
- היו
- מה
- מה
- מתי
- אשר
- למה
- יצטרך
- עם
- תיק עבודות
- עובד
- ראוי
- היה
- שנה
- שנים
- כן
- אתה
- זפירנט