توی این پست خواهید دید که خبرنامه SoftwareTalks چطوری کار میکنه؛ یک عدد سایت استاتیک + یک عدد فایل گیتهاب اکشن + ایشوهای گیتهاب + یک سرویس ارسال ایمیل + کمی زمان برای نوشتن اسکریپتی که همه این چیزمیزا رو به هم وصل کنه.
توی خبرنامه SoftwareTalks ما همه چیز رو روی بستر گیتهاب هاست کردیم. نمایش سایتمون به عهده GitHub Pages هستش. روی برنچ Main (یا هر برنچ دلخواهی که بخوایم) یک فایل index.html داریم و گیتهاب اون رو نمایش میده و مثل یک وبسرور رفتار میکنه. به همین سادگی و زیبایی.
اما همونطور که میدونید خبرنامه SoftwareTalks یک خبرنامه مبتنی بر مشارکت کاربران هستش، یعنی کاربران محتوا رو تامین میکنند. اما چطوری؟ به وسیله GitHub Issues.
هر کاربر با ایجاد یک Issue طبق تمپلیتی که قرار دادیم، میتونه یک پست ایجاد کنه. به همین راحتی.
خبرنامه SoftwareTalks هر هفته ارسال میشه. اما ما چطوری میفهمیم هر پست ماله چه هفتهایه و اصلا صلاحیت ارسال شدن داره؟ با سه تا label که بهشون میزنیم: content, verified, this-week
هر پست به محض ایجاد شدن لیبل content میگیره. بعد از بررسی توسط ادمینهای ریپوزیتوری، اگر پست طبق قوانین باشه، لیبل verified میگیره. در نهایت اگر بخوایم پستی رو توی هفته جاری ارسال کنیم بهش لیبل this-week میزنیم. و هر وقت هم که پست ارسال بشه اون Issue رو میبندیم (بستن Issue فعلا خودکار نیست و دستی انجام میدیم ولی به زودی خودکارش میکنیم). زیبا نیست؟ به همین سادگی میشه ساختاری برای مشخص کردن وضعیت هر پست توی گیتهاب درست کرد.
ما برای ارسال ایمیلهامون در حال حاضر از سرویس پاکت استفاده میکنیم. اما خود فرآیند ارسال ایمیل چطور صورت میگیره؟ با یک اسکریپت که با PHP نوشته شده. توی این اسکریپت ما از API گیتهاب استفاده میکنیم و پستهایی که این سه تا لیبل رو گرفته باشن رو دریافت میکنیم و توی یک تمپلیت HTML ای که درست کردیم، میچوپونیم. تا اینجای کار ما قالب ایمیلمون و محتواش اکی شده. در گام بعدی اسکریپت میره به سرویس پاکت متصل میشه و به پاکت میگه که این فایل HTML رو برای این لیست آدمها ایمیل کن.
اما چطوری به گیتهاب میگیم یک اسکریپت رو اجرا کن؟ به وسیله GitHub Actions
گیتهاب اکشن در حقیقت یک فایله که توصیف میکنه چه کار باید بشه (فرض کنین یک اسکریپته. البته فرض که چه عرض کنم خب واقعا یک اسکریپته). از اینجا فایل اکشن خبرنامه رو میتونید ببینید.
توی هر ایمیل ما مینویسیم که این خبرنامه شماره فلانه. اما وقتی دیتابیس یا جایی برای ثبت آخرین شماره ارسال شده نداریم چطور میتونیم بفهمیم این هفته قراره خبرنامه شماره چند رو بفرستیم؟
روشی که استفاده کردم خیلی ساده و سرراست بود. تاریخ روزی که اولین خبرنامه ارسال شده رو که میدونیم. پس کافیه هر زمان که قصد ارسال خبرنامه جدیدی داریم محاسبه کنیم چند هفته از اون روز گذشته و اینطوری میتونیم بفهمیم خبرنامه شماره چند رو قراره بفرستیم.
$now = Carbon::now(); $newsletterStartDate = Carbon::createFromDate(2021, 01, 02); // این تاریخ اولین ارسالمون بوده $newsletterNumber = (int)($newsletterStartDate->diffInWeeks($now)) + 1;
همونطور که دیدید، گیتهاب امکانات جالب و خوبی رو به رایگان در اختیار توسعهدهندهها قرارداده که خوبه ازشون نهایت استفاده رو بکنیم. امیدوارم این پست به دوستانی که با این مباحث و پتانسیلی که میتونن داشته باشن، آشنا نبودن، کمک کرده باشه.
راستی اگر دوست داشتید عضو خبرنامه هم بشید میتونید از اینجا اقدام کنید:
https://newsletter.softwaretalks.ir
شاد و پیروز باشید.