خودکارسازی 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، میتوانیم بخشهایی از فرآیند کدنویسی را خودکار کرده و کارهای دستی را کاهش دهیم.
بیایید وصل شویم توییتر و لینکدین
منابع