תחילת העבודה

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

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

איך אפשר לתרום לקוד המקור של Bazel?

Bazel הוא פרויקט גדול וקשה לבצע שינוי בקוד המקור של Bazel.

לפני שמבצעים שינוי, צריך ליצור בעיה ב-GitHub או לשלוח אימייל לכתובת bazel-dev@.

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

למידע נוסף על שליחת שינוי, עיין בתהליך קבלת התיקון.

התקנת בזל

לפני שמתחילים לפתח, צריך:

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

  2. מאגר GitHone של Clone Bazel מ-GitHub:

    git clone https://github.com/bazelbuild/bazel.git
    
  3. יש להתקין את כל הדרישות המוקדמות,

  4. נסה ליצור מסגרת בזל:

    • ב-Linux/macOS, ב-Bash/Terminal:

      cd bazel
      bazel build //src:bazel
      
    • ב-Windows, בשורת הפקודה:

      cd bazel
      bazel --output_user_root=c:\tmp build //src:bazel.exe
      

      כדי לבצע איטרציות מהר יותר (אבל קבצים בינאריים גדולים יותר), יש להשתמש במקום זאת ב-//src:bazel-dev.exe.

התוצאה היא בינארי של Bazel תקין ב-bazel-bin/src/bazel (או bazel-bin/src/bazel.exe ב-Windows).

יצירת פרויקט של IntelliJ

IDE ש-Bazel תומכת בו הוא IntelliJ.

כדי לעבוד עם IntelliJ:

  1. מתקינים את פלאגין IntelliJ של Bazel.
  2. יש להגדיר את הנתיב לבינארי של Bazel בהעדפות הפלאגין (Preferences > Other Settings > Bazel Settings).
  3. מייבאים את סביבת העבודה של Bazel כפרויקט בזל (File > Import Bazel Project...) עם ההגדרות הבאות:
    • שימוש בסביבת עבודה קיימת של Bazel: בחירה במאגר Git המשוכפל שלך.
    • יש לבחור Import from workspace ולבחור את הקובץ scripts/ij.bazelproject כProject view.
  4. מורידים את קובץ קוד הסגנון של Java ל-Java של IntelliJ, מייבאים אותו (עוברים אל Preferences > Editor > Code Style > Java, לוחצים על Manage, ולאחר מכן Import) ולהשתמש בו כשעובדים על הקוד של Bazel.

קומקום הידור

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

אפשר לבנות את הקובץ הבינארי של Bazel באמצעות bazel build //src:bazel, באמצעות bazel מה-PATH. הקובץ הבינארי שיופיע נמצא ב-bazel-bin/src/bazel. זו הדרך המומלצת לבנות מחדש את בזל לאחר ההפעלה.

בנוסף לבינארי של בזל, ייתכן שתרצו לבנות את הכלים השונים שבהם בזל משתמשת. הם נמצאים ב-//src/java_tools/..., ב-//src/objc_tools/... וב-//src/tools/..., והספריות שלהם כוללות קובצי README המתארים את כלי השירות המתאים.

בעת שינוי מסגרת Google:

  1. יצירת ארכיון הפצה באמצעות bazel build //:bazel-distfile.
  2. מבטלים את דחיסת הארכיון בספרייה ריקה חדשה.
  3. הפעלה של bash compile.sh all שם.

פקודה זו בונה מחדש את "בזל" עם./compile.sh, בייזל עם compile.sh לבין בזל עם הקובץ הבינארי שנבנה לבזל. המערכת משווה אם המבנים שנבנו בבזל זהים ולאחר מכן היא מפעילה את כל הבדיקות של Bazel עם bazel test //src/... //third_party/ijar/.... המספר משמש גם באופן פנימי כדי להבטיח שלא נשבור את Bazel בעת דחיפת התחייבויות חדשות.

באז ניפוי באגים

כדי להגדיר תצורת ניפוי באגים גם ל-C++ וגם ל-Java ב.bazelrc שימוש שלך:

build:debug -c dbg
build:debug --javacopt="-g"
build:debug --copt="-g"
build:debug --strip="never"

צור מחדש את Bazel עם bazel build --config debug //src:bazel והשתמש בכלי לניפוי הבאגים האהוב עליך כדי להתחיל לנפות באגים.

כדי לנפות באגים בלקוח C++, יש להריץ אותו כרגיל מ-gdb או מ-lldb. עם זאת, כדי לנפות באגים בקוד Java, יש לצרף לשרת באמצעות הפריטים הבאים:

  • הרץ את Bazel עם אפשרות ניפוי הבאגים --host_jvm_debug לפני הפקודה (כגון bazel --host_jvm_debug build //src:bazel).
  • יש לצרף כלי לניפוי באגים ליציאה 5005. לדוגמה, עם jdb, צריך להריץ jdb -attach localhost:5005.

הפלאגין שלנו, IntelliJ, כולל תמיכה מובנית בניפוי באגים.

שימוש בשילוב רציף של Bazel

כדי להתחיל להשתמש במערכת Bazel CI, יש לעיין בשילוב מתמשך של Bazel כדי לעקוב אחר הבדיקות וההרכבים של התרומות שלך ל-Bazel, אפשר להשתמש במרכז השליטה של Bazel CI.

תיאור הקוד של Bazel

ל-Bazel יש בסיס קוד גדול עם קוד במספר מיקומים.

פלטפורמת Bazel מאורגנת באופן הבא:

  • קוד הלקוח נמצא ב-src/main/cpp ומספק את ממשק שורת הפקודה.
  • מאגרי הנתונים הזמניים של הפרוטוקולים נמצאים בsrc/main/protobuf.
  • קוד השרת נמצא בsrc/main/java ובsrc/test/java.
    • קוד ליבה המורכב בעיקר מ-SkyFrame וחלק מהכלים.
    • הכללים המובנים נמצאים בcom.google.devtools.build.lib.rules ובcom.google.devtools.build.lib.bazel.rules. כדאי לקרוא קודם על האתגרים של כתיבת כללים.
  • ממשקי Java מקוריים נמצאים בsrc/main/native.
  • כלים שונים לקבלת תמיכה בשפה מפורטים ברשימה באוסף הידור.

אפשר למצוא תיאור מפורט של בסיס הקוד ב-Bazel codebase.

חיפוש בקוד המקור של Bazel

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