برنامه‌نویسی

آموزش داینامیک کردن Profile README در GitHub

آموزش داینامیک کردن profile readme در github

سال گذشته بود که GitHub قابلیت Profile README را منتشر کرد و به سرعت مورد توجه کاربران قرار گرفت. این قابلیت را می‌توان یک README عمومی برای پروفایل کاربری GitHub دانست و شما می‌توانید با ساخت یک ریپازیتوری و قرار دادن username خود به‌عنوان نام آن ریپازیتوری از این قابلیت در پروفایل کاربری خود استفاده کنید.

برای مثال اگر نام کاربری شما octocat باشد، می‌توانید یک ریپازیتوری با همین نام ایجاد کنید:

تطبیق نام کاربری با نام repository

در مرحله‌ی بعد مطمئن شوید که این ریپازیتوری به صورت Public ساخته می‌شود:

ساخت یک ریپازیتوری public

و همچنین گزینه‌ی Initialize this repository with a README را فعال کنید:

فعال کردن گزینه‌ی initialize this repository with a readme

در نهایت بر روی Create repository کلیک کنید تا ریپازیتوری شما ساخته شود:

بر روی دکمه‌ی create repository کلیک کنید

پس از ایجاد این ریپازیتوری قابلیت Profile README برای شما فعال خواهد شد:

فعال شدن قابلیت github profile

در مرحله‌ی بعد می‌خواهیم با زبان 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 انجام می‌شود و مراحل انجام کار به‌صورت زیر است:

حال هر بار که مقاله‌ای را در وبلاگ خود منتشر می‌کنید، در پروفایل GitHub شما نمایش داده می‌شود البته توجه داشته باشید که آدرس متغیر $feed را در فایل posts.php با آدرس feed وبلاگ خود جایگزین کنید. خروجی نهایی این پروژه بسیار جالب در این ریپازیتوری در دسترس است و حتی می‌توانید با ایده گرفتن از این مقاله با هر زبان برنامه‌نویسی که دوست داشته باشید در کنار قابلیت GitHub Action پروژه‌های جالب‌تری را پیاده‌سازی کنید.

منبع: https://levelup.gitconnected.com/how-to-build-a-dynamic-github-profile-with-github-actions-and-php-5fbaf23cbf4f