آموزش داینامیک کردن Profile README در GitHub
۱۰ بهمن ۱۳۹۹
سال گذشته بود که GitHub قابلیت Profile README را منتشر کرد و به سرعت مورد توجه کاربران قرار گرفت. این قابلیت را میتوان یک README
عمومی برای پروفایل کاربری GitHub دانست و شما میتوانید با ساخت یک ریپازیتوری و قرار دادن username خود بهعنوان نام آن ریپازیتوری از این قابلیت در پروفایل کاربری خود استفاده کنید.
برای مثال اگر نام کاربری شما octocat
باشد، میتوانید یک ریپازیتوری با همین نام ایجاد کنید:
در مرحلهی بعد مطمئن شوید که این ریپازیتوری به صورت Public ساخته میشود:
و همچنین گزینهی Initialize this repository with a README را فعال کنید:
در نهایت بر روی Create repository کلیک کنید تا ریپازیتوری شما ساخته شود:
پس از ایجاد این ریپازیتوری قابلیت Profile README برای شما فعال خواهد شد:
در مرحلهی بعد میخواهیم با زبان 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 پروژههای جالبتری را پیادهسازی کنید.