آموزش داینامیک کردن 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

برچسب‌ها:

خدمات رایگان لیارا

۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

هاست رایگان برای دیتابیس‌

دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

سرویس DNS رایگان

به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

۱۰۰ هزار تومان اعتبار اولیه

بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید و فقط برای بیش از آن هزینه پرداخت کنید. (به‌همراه دسترسی SMTP)

هاست رایگان برای انواع وبسایت

تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

توسعه‌دهندگان درباره‌ی ما چه می‌گویند

تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...

MohammadReza
liara testimonial
keikaavousi

بعد از بسته شدن @fandoghpaas و ناراحتی همه‌مون از اینکه یه سرویس خوب و صادق نمی‌تونه از پس هزینه‌ها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوت‌هایی داشت که کمی کار می‌خواست ولی تا الان کاملا راضی.

jadi
liara testimonial
jadi

یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.

Arch
liara testimonial
EbadiDev

واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیت‌های سرویس دیتابیس‌شون اینه که خودشون به صورت دوره‌ای بکآپ میگیرن.
...

Ali Najafi
liara testimonial
me_ali_najafi

یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@

Navid
liara testimonial
1navid

عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم

Amir H Shekari
liara testimonial
vanenshi

همراه شما هستیم

در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
تلفن واحد فروش:
۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)