آموزش داینامیک کردن Profile README در GitHub
۱۰ بهمن ۱۳۹۹
![آموزش داینامیک کردن profile readme در github](https://cms.liara.ir/wp-content/uploads/2021/01/build-a-dynamic-profile-readme-with-github-action.png)
سال گذشته بود که GitHub قابلیت Profile README را منتشر کرد و به سرعت مورد توجه کاربران قرار گرفت. این قابلیت را میتوان یک README
عمومی برای پروفایل کاربری GitHub دانست و شما میتوانید با ساخت یک ریپازیتوری و قرار دادن username خود بهعنوان نام آن ریپازیتوری از این قابلیت در پروفایل کاربری خود استفاده کنید.
برای مثال اگر نام کاربری شما octocat
باشد، میتوانید یک ریپازیتوری با همین نام ایجاد کنید:
![تطبیق نام کاربری با نام repository](https://cms.liara.ir/wp-content/uploads/2021/01/repo-username-match.png)
در مرحلهی بعد مطمئن شوید که این ریپازیتوری به صورت Public ساخته میشود:
![ساخت یک ریپازیتوری public](https://cms.liara.ir/wp-content/uploads/2021/01/create-public-repository.png)
و همچنین گزینهی Initialize this repository with a README را فعال کنید:
![فعال کردن گزینهی initialize this repository with a readme](https://cms.liara.ir/wp-content/uploads/2021/01/initialize-with-readme.png)
در نهایت بر روی Create repository کلیک کنید تا ریپازیتوری شما ساخته شود:
![بر روی دکمهی create repository کلیک کنید](https://cms.liara.ir/wp-content/uploads/2021/01/create-repository-button.png)
پس از ایجاد این ریپازیتوری قابلیت Profile README برای شما فعال خواهد شد:
![فعال شدن قابلیت github profile](https://cms.liara.ir/wp-content/uploads/2021/01/profile-with-readme.png)
در مرحلهی بعد میخواهیم با زبان PHP و قابلیت GitHub Actions آخرین مطالب وبلاگ را بهصورت خودکار در پروفایل GitHub خود قرار دهیم تا برای دیگران قابل مشاهده باشد.
ساخت placeholder
اولین کاری که بایستی پس از clone کردن ریپازیتوری در سیستم خود انجام دهید ساخت placeholder برای قرار دادن مطالب در فایل README است. به همین منظور تگ زیر را با تمام محتوای فایل README.md
آن ریپازیتوری جایگزین کنید:
<!-- posts --><!-- /posts -->
اسکریپت PHP
کدنویسی اسکریپت PHP ساده است اما توجه داشته باشید که قدم به قدم در تمام مراحل با ما همراه باشید. مطمئن شوید که Composer بر روی سیستم شما نصب است، در غیر این صورت میتوانید مقالهی آموزش نصب و استفاده از Composer را مطالعه کرده و این ابزار را بر روی سیستم خود نصب کنید. پس از نصب Composer، وارد پوشهای شوید که پس از clone کردن ریپازیتوری در سیستم شما ایجاد شده و دستور زیر را اجرا کنید:
composer init
سپس کتابخانهای با نام rss-php
را برای دریافت RSS Feedهای وبلاگ با اجرای دستور زیر نصب کنید:
composer require dg/rss-php
حال فایلی با نام posts.php
ایجاد کرده و کدهای زیر را در آن قرار دهید:
<?php
// Load Composer's autoload
require_once __DIR__ . '/vendor/autoload.php';
// Load the RSS feed
$feed = Feed::loadRss('https://liara.ir/blog/author/m-a-dehghani/feed')->toArray();
// Generate the list of blog posts
$posts = '';
foreach (array_slice($feed['item'], 0, 5) as $post) {
$date = date('d/m/Y', strtotime($post['pubDate']));
$posts .= sprintf("\n* **[%s]** [%s](%s \"%s\")", $date, $post['title'], $post['link'], $post['title']);
}
// Generate the new content
$content = preg_replace(
'#<!-- posts -->.*<!-- /posts -->#s',
sprintf('<!-- posts -->%s<!-- /posts -->', $posts),
file_get_contents('README.md')
);
// Overwrite the file
file_put_contents('README.md', $content);
کدهای بالا مورد پیچیدهای ندارد که نیاز به توضیح داشته باشد اما بااینحال کد:
require_once __DIR__ . '/vendor/autoload.php';
به شما اجازه میدهد تا از RSS parser برای دریافت آخرین مطالب وبلاگ بهعنوان یک string در فرمت Markdown استفاده کنید.
سپس محتوای فعلی فایل README را در متغیر $content
قرار داده و با استفاده از preg_replace
، پنج مطلب آخر وبلاگ را در میان تگهای <!-- posts -->
و <!-- /posts -->
وارد میکند. سرانجام با اجرای فانکشن file_put_contents
، محتوای فایل README با محتوای جدید جایگزین میشود.
GitHub Action
GitHub Action را میتوان از جدیدترین قابلیتهای GitHub دانست که به توسعهدهندگان اجازه میدهد از قابلیتهایی مانند CI/CD بهرهمند شوند. ما قبلا از این قابلیت برای استقرار خودکار پروژه در لیارا استفاده کرده بودیم.
برای استفاده از این قابلیت یک فایل YAML با نام posts.yml
در مسیر .github/workflows
ایجاد کنید و کدهای زیر را در آن فایل قرار دهید:
name: Update blog posts
on:
push:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v2
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: '7.4'
- name: Install Composer dependencies
run: composer install
- name: Insert blog posts
run: php posts.php
- name: Push changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Updated latest blog posts
- در ابتدای این کدها یک نام برای Action خود قرار دادهایم و سپس لیستی از کارهایی که بایستی بهصورت خودکار انجام شوند را تعریف کردهایم و بهصورت دورهای با استفاده از
workflow_dispatch
که کاربردی شبیه cron job دارد، محتواهای جدید را به ریپازیتوری خود Push میکنیم. این کارها بر روی یک Ubuntu Image انجام میشود و مراحل انجام کار بهصورت زیر است:
- clone کردن ریپازیتوری
- نصب PHP 7.4
- نصب dependencyهای Composer
- اجرای اسکریپت PHP
- commit و push کردن تغییرات جدید (در صورت وجود تغییر)
حال هر بار که مقالهای را در وبلاگ خود منتشر میکنید، در پروفایل GitHub شما نمایش داده میشود البته توجه داشته باشید که آدرس متغیر $feed
را در فایل posts.php
با آدرس feed وبلاگ خود جایگزین کنید. خروجی نهایی این پروژه بسیار جالب در این ریپازیتوری در دسترس است و حتی میتوانید با ایده گرفتن از این مقاله با هر زبان برنامهنویسی که دوست داشته باشید در کنار قابلیت GitHub Action پروژههای جالبتری را پیادهسازی کنید.
توسعهدهندگان دربارهی ما چه میگویند
تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...
MohammadReza![](data:image/svg+xml;charset=utf-8,%3Csvg height='400' width='400' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E)
![liara testimonial]()
keikaavousi
بعد از بسته شدن @fandoghpaas و ناراحتی همهمون از اینکه یه سرویس خوب و صادق نمیتونه از پس هزینهها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوتهایی داشت که کمی کار میخواست ولی تا الان کاملا راضی.
jadi![](data:image/svg+xml;charset=utf-8,%3Csvg height='400' width='400' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E)
![liara testimonial]()
jadi
یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.
Arch![](data:image/svg+xml;charset=utf-8,%3Csvg height='400' width='400' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E)
![liara testimonial]()
EbadiDev
واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیتهای سرویس دیتابیسشون اینه که خودشون به صورت دورهای بکآپ میگیرن.
...
Ali Najafi![](data:image/svg+xml;charset=utf-8,%3Csvg height='400' width='400' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E)
![liara testimonial]()
me_ali_najafi
یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@
Navid![](data:image/svg+xml;charset=utf-8,%3Csvg height='80' width='80' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E)
![liara testimonial]()
1navid
عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم
Amir H Shekari![](data:image/svg+xml;charset=utf-8,%3Csvg height='400' width='400' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E)
![liara testimonial]()
vanenshi