مراحل کلی برای این کار معمولاً به این شکله:
بررسی وضعیت فعلی ماژول
- اول از همه، چک کنید که آیا ماژول مورد نظرتون در حال حاضر در ریپازیتوریهای OCA برای نسخههای جدیدتر (مثلاً 16 یا 17) وجود داره یا نه. گاهی اوقات ممکنه migration قبلاً توسط شخص دیگهای شروع شده باشه.
- بررسی کنید که آیا ایشو یا Pull Request (PR) مرتبط با migration به Odoo 18 برای این ماژول از قبل ایجاد شده یا نه.
ایجاد یک ایشو (Issue) در گیتهاب
- به ریپازیتوری مربوط به ماژول در گیتهاب OCA برید.
- بخش “Issues” رو پیدا کنید و یک ایشوی جدید (New Issue) باز کنید.
- عنوان (Title) ایشو: عنوانی واضح و گویا انتخاب کنید، مثلاً: [MIG] project_task_planned_hours to 18.0 (اسم ماژول رو جایگزین کنید).
- توضیحات (Description): در توضیحات ایشو، موارد زیر رو ذکر کنید:
- اسم دقیق ماژول و ریپازیتوری.
- نسخهای که میخواید بهش migration بشه (در اینجا 18.0).
- هدف از migration (مثلاً نیاز پروژه، نگهداری از ماژول، اضافه کردن قابلیتهای جدید Odoo 18).
- اعلام آمادگی برای کمک به migration یا انجام اون.
- اگر تغییرات خاصی در Odoo 18 وجود داره که روی این ماژول تاثیر میذاره، بهش اشاره کنید.
- معمولاً OCA یک سری لیبل (label) برای ایشوهای migration داره که میتونید ازشون استفاده کنید، مثل migration یا 18.0.
ایجاد فورک (Fork) از ریپازیتوری و کپی کردن ماژول
- اگر قصد دارید خودتون migration رو انجام بدید، لازمه از ریپازیتوری اصلی OCA یک “Fork” بگیرید (یک کپی از ریپازیتوری در حساب گیتهاب خودتون).
- ماژول رو به شعبه (branch) مربوط به Odoo 18 در فورک خودتون کپی کنید. معمولاً اسم شعبهها با نسخهی Odoo مطابقت داره (مثلاً 18.0). اگر شعبهای برای 18.0 نیست، باید خودتون بسازیدش.
مفهوم “فورک” (Fork)
- چیست؟ فورک مثل این میمونه که شما از یک قفسه کتاب (ریپازیتوری اصلی OCA) یک “کپی شخصی” در قفسه خودتون در کتابخونه (حساب گیتهاب خودتون) برمیدار
- چرا؟ شما نمیتونید مستقیم کارهای خودتون رو روی قفسه اصلی کتابخونه (ریپازیتوری اصلی OCA) انجام بدید چون فقط مسئولین کتابخونه (maintainerها) اجازه تغییر مستقیم دارن. شما باید کپی خودتون رو داشته باشید تا بتونید بدون نگرانی، تغییرات مورد نظرتون رو روش اعمال کنید، خرابش کنید، درستش کنید و هر کاری دلتون خواست بکنید. این کپی کاملاً مال شماست.
چطوری انجام میشه؟
- میرید به صفحه ریپازیتوری OCA/reporting-engine در گیتهاب.
- بالا سمت راست صفحه، یک دکمه به اسم “Fork” یا “Create New Fork” میبینید.
- روی اون کلیک میکنید.
- گیتهاب از شما میپرسه که میخواید فورک رو کجا بسازید (معمولاً حساب خودتون رو انتخاب میکنید).
- بعد از چند لحظه، یک کپی دقیق از OCA/reporting-engine در حساب گیتهاب شما (YourUsername/reporting-engine) ایجاد میشه. حالا شما یه نسخه شخصی از ریپازیتوری دارید که میتونید روی اون کار کنید.
ایجاد یک پول ریکوئست (Pull Request - PR)
مفهوم “پول ریکوئست” (Pull Request - PR)
- چیست؟ حالا که شما تغییراتتون رو روی کپی شخصی خودتون (فورک) اعمال کردید (مثلاً ماژول report_async رو برای Odoo 18 آماده کردید و تست کردید)، میخواید این تغییرات رو برگردونید به قفسه اصلی کتابخونه (ریپازیتوری اصلی OCA) تا بقیه هم بتونن ازش استفاده کنن. “پول ریکوئست” یعنی شما به مسئولین قفسه اصلی میگید: “سلام! من این تغییرات رو روی کپی خودم انجام دادم، لطفاً کارهای من رو ‘بکشید’ (Pull کنید) و به قفسه اصلی اضافه کنید.”
- چرا؟ این روش استاندارد همکاری در گیتهابه. شما به صورت مستقیم کدی رو به ریپازیتوری اصلی push نمیکنید، بلکه درخواست میکنید که کدهاتون بررسی بشه و بعد از تأیید، ادغام بشه.
چطوری انجام میشه
بعد از اینکه فورک رو ساختید و کدهای ماژول report_async رو برای Odoo 18 در فورک خودتون تغییر دادید و روی کامپیوتر خودتون clone و تست کردید .
تغییرات را commit و push کنید. (تمپلیتی که بهتر است مطابق آن مسیج کامیت خود را بنویسید)
( [IMP] $module: pre-commit auto fixes)
برمیگردید به صفحه فورک خودتون در گیتهاب (مثلاً YourUsername/reporting-engine).
گیتهاب معمولاً به صورت خودکار تشخیص میده که شما تغییراتی در فورک خودتون ایجاد کردید که در ریپازیتوری اصلی نیست و یک پیغام به شما نشون میده مثل: “This branch is 1 commit ahead of OCA:17.0” (یا هر تعداد کامیت). کنار این پیغام یک دکمه به اسم “Contribute” یا “New pull request” میبینید.

روی اون دکمه کلیک میکنید.
گیتهاب شما رو به صفحهای میبره که میتونید جزئیات پول ریکوئست رو مشخص کنید:
حالا یک درخواست برای ادغام تغییرات شما به ریپازیتوری اصلی ارسال شده. maintainerها (مسئولین پروژه) کد شما رو بررسی میکنند، ممکنه سوال بپرسن، بازخورد بدن یا ازتون بخوان تغییراتی رو اعمال کنید. اگر همه چیز اوکی باشه، پول ریکوئست شما رو “Merge” میکنند و کدهاتون به ریپازیتوری اصلی اضافه میشه.
این فرآیند به شما اجازه میده که به صورت ایمن و کنترل شده به پروژههای بزرگ مشارکت کنید. امیدوارم این توضیح با مثال کتابخونه واضحتر بوده باشه! باز هم اگر قسمتی مبهم بود، بپرسید.
نکات مهم
- راهنمای Migration OCA: حتماً “OCA Migration Guide” رو مطالعه کنید لینک. این راهنما شامل بهترین روشها و نکاتی برای انجام migration هست. (با یه سرچ ساده توی گوگل پیدا میشه).
- پایبندی به استانداردهای OCA: OCA استانداردهای کدنویسی و ساختاری خاص خودش رو داره. حتماً مطمئن بشید که کد شما با این استانداردها مطابقت داره.
- همکاری: اگه ماژول پیچیدهای هست یا زمان کافی ندارید، میتونید در ایشو اعلام کنید که به دنبال همکاری برای انجام migration هستید.
- بررسی ابزارهای Migration: گاهی اوقات ابزارهایی برای کمک به migration خودکار یا نیمه خودکار وجود داره.