برنامه نویسی

خودکارسازی Python Linting و اجرای سبک کد با Ruff و GitHub Actions

معرفی

حفظ یک سبک کد ثابت و پیروی از بهترین شیوه ها برای هر پروژه پایتون مهم است. با این حال، رفع دستی مشکلات پرزها می تواند خسته کننده و به راحتی فراموش شود. در این آموزش، نحوه راه‌اندازی GitHub Actions را می‌بینیم تا به‌طور خودکار کد پایتون را با Ruff در هر بار فشار دادن و انجام هرگونه اصلاحی، به‌صورت خودکار پر کند.

در آموزش قبلی نحوه استفاده از Ruff برای لینت کد پایتون را دیدیم.
با این حال، رفع دستی مشکلات پرزها می تواند خسته کننده و به راحتی فراموش شود.

پیش نیازها

  • یک مخزن GitHub با کد پایتون
  • GitHub Actions فعال شد
  • Ruff به صورت محلی نصب شده است

ایجاد گردش کار

گردش کار بر روی فشارهایی برای پرز زدن با Ruff اجرا می شود و اصلاحات را انجام می دهد:

name: Lint and Commit
on: push

jobs:
  lint:
    runs-on: ubuntu-latest 
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-python@v2
    - run: pip install ruff
    - run: | 
      ruff check .
      ruff fix .
    - uses: stefanzweifel/git-auto-commit-action@v4
      with:
        commit_message: 'style fixes by ruff'
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله کلیدی جدید git-auto-commit-action است که تغییرات ایجاد شده توسط Ruff را شناسایی کرده و با یک پیام آنها را انجام می دهد.

پیکربندی Ruff

ما می توانیم یک ایجاد کنیم .ruff.toml یا ruff.toml فایل برای سفارشی کردن Ruff:


line-length = 120
target-version = "py39"
select = ["E", "W"]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد بالا طول خط را 120 کاراکتر، نسخه پایتون هدف را 3.9 و قوانین را به E و W تنظیم می کند. درباره گزینه های پیکربندی اینجا بیشتر بخوانید.

با استفاده از Ruff GitHub Action

ما همچنین می توانیم از Ruff GitHub Action برای اجرای Ruff در گردش کار خود استفاده کنیم:

name: Lint and Commit
on: [ push, pull_request ]

jobs:
  lint:
    runs-on: ubuntu-latest 
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-python@v2
    - uses: chartboost/ruff-action@v1
      with:
        args: --check .
        fix_args: --fix .
    - uses: stefanzweifel/git-auto-commit-action@v4
      with:
        commit_message: 'style fixes by ruff'
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد بالا معادل گردش کار قبلی است. تفاوت اصلی این است که ما از Ruff GitHub Action به جای اجرای مستقیم Ruff استفاده می کنیم. اطلاعات بیشتر در مورد Ruff GitHub Action را اینجا بخوانید

هر رویکرد مزایای خاص خود را دارد:

  • اجرای Ruff به طور مستقیم به ما کنترل بیشتری بر روند Ruff می دهد. برای مثال می توانیم یک فایل پیکربندی سفارشی را مشخص کنیم.
  • استفاده از Ruff GitHub Action ساده تر است و به کد کمتری نیاز دارد.
  • اجرای مستقیم Ruff بسیار سریعتر است زیرا نیازی نیست هر بار Ruff را نصب کنیم.

این Ruff را با --check و --fix استدلال ها ما همچنین می توانیم استفاده کنیم config آرگومان برای تعیین یک فایل پیکربندی سفارشی:

name: Lint and Commit
on: push

jobs:
  lint:
    runs-on: ubuntu-latest 
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-python@v2
    - uses: chartboost/ruff-action@v1
      with:
        args: --check .
        fix_args: --fix .
        config: .ruff.toml
    - uses: stefanzweifel/git-auto-commit-action@v4
      with:
        commit_message: 'style fixes by ruff'
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این قوانین را به ترجیح ما تنظیم می کند. اگر بخواهیم از قوانین مختلف برای پروژه های مختلف استفاده کنیم، این کار مفید است.

روشی را انتخاب کنید که برای پروژه شما بهترین کار را دارد.

اقدام خودکار متعهد

ما نیز در حال استفاده از auto-commit اقدام برای انجام تغییرات ما می توانیم پیام commit و گزینه های دیگر را پیکربندی کنیم. بیشتر بخوانید در مورد auto-commit در اینجا اقدام کنید این اختیاری است – ما همچنین می توانیم از آن استفاده کنیم git اقدام برای انجام تغییرات به صورت دستی.

ترکیبی از راف و auto-commit اقدام به ما این امکان را می دهد که به طور خودکار مشکلات پرده را برطرف کنیم و تغییرات را در هر فشار انجام دهیم. این به ما کمک می‌کند سبک کد ثابتی داشته باشیم و بهترین شیوه‌ها را در طول زمان دنبال کنیم.

مشاهده نتایج

خروجی Actions اکنون فایل هایی را نشان می دهد که توسط Ruff تغییر یافته و انجام شده اند. همچنین commit ها در تاریخچه مخزن قابل مشاهده خواهند بود.

برای مثال استفاده/اجرای گردش کار، می‌توانید به راحتی بررسی کنید.

یک الگوی پروژه Backend با FastAPI، PostgreSQL با SQLAlchemy 2.0 ناهمزمان، Alembic برای مهاجرت پایگاه داده ناهمزمان، و Docker.

این یک مخزن قالب است که هدف آن شروع پروژه شما با راه اندازی از یک برنامه دنیای واقعی است! این الگو از پشته فناوری زیر استفاده می کند:

وقتی که Docker شروع شده است، این آدرس‌های URL هستند:

  • برنامه Backend (اسناد API) $\راست فلش$ http://localhost:8001/docs
  • ویرایشگر پایگاه داده (مدیر) $\راست فلش$ http//localhost:8081

API باطن بدون Docker را می توان در یافت http://localhost:8000/docs.

چرا Tech-Stack بالا؟

خوب، پاسخ آسان این است ناهمزمانی و سرعت!

  • FastAPI به عنوان سریعترین چارچوب وب برای پایتون شناخته می شود و بنابراین ما از آن برای توسعه باطن خود استفاده می کنیم.
  • پایگاه داده انتخابی من است نامتقارن نسخهی PostgreSQL (از طریق SQLAlchemy 2.0). اگر می خواهید خود را در مورد این موضوع بیشتر آموزش دهید، این وبلاگ را از Packt بخوانید ناهمزمان، همزمان، همزمان، و موازی سازی.
  • داکر فناوری است که یک برنامه کاربردی را در واحدهای استانداردی به نام کانتینرها بسته بندی می کند که…

نتیجه

با فعال کردن commit خودکار، دیگر نیازی به رفع دستی مشکلات پرده‌بندی پرچم‌گذاری شده توسط Ruff نداریم – رفع‌ها به طور خودکار در هر فشار اعمال می‌شوند. این به اجرای یک سبک کد ثابت در طول زمان کمک می کند.

برخی از مراحل بعدی:

  • Ruff را تنظیم کنید تا در درخواست‌های کششی نیز اجرا شود.
  • گزینه های commit مانند commit user و branch را پیکربندی کنید.
  • اعلان‌های Slack/email را تنظیم کنید.

با ادغام لینترهایی مانند Ruff در گردش‌های کاری GitHub، می‌توانیم بخش‌هایی از فرآیند کدنویسی را خودکار کرده و کارهای دستی را کاهش دهیم.

بیایید وصل شویم توییتر و لینکدین

منابع

گیف دفعه بعد

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا