راستی‌آزمایی انتشارها

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

در این صفحه
  1. هر انتشار چه چیزی دارد
  2. بررسی چک‌سام
  3. بررسی خاستگاه ساخت
  4. نصب از Packagist و Composer
  5. این چه چیزی را ثابت نمی‌کند

هر انتشار چه چیزی دارد#

وقتی برچسب نسخه‌ای مثل v0.2.0 را بفرستید، گردش‌کار انتشار در مخزن GitHub شروع می‌شود. قبل از ساختن هر چیز چهار مورد را بررسی می‌کند. برچسب یک نسخهٔ معتبر باشد. جدیدترین بخش CHANGELOG.md همان نسخه را داشته باشد. کامیت برچسب‌خورده در شاخهٔ main باشد. و اجرای CI برای همان کامیت سبز باشد. اگر یکی از این‌ها رد شود، چیزی منتشر نمی‌شود.

بعد آرشیوها را با git archive می‌سازد. فایل‌هایی که export-ignore دارند (آزمون‌ها، منبع راهنما، فایل‌های ابزار و CI، و composer.lock) در آرشیو نمی‌آیند. انتشار GitHub برای آن برچسب این فایل‌ها را دارد:

  • rtly-kit-X.Y.Z.tar.gz و rtly-kit-X.Y.Z.zip، همان کامیت در دو قالب.
  • SHA256SUMS، چک‌سام SHA-256 هر دو آرشیو.
  • گواهی امضاشدهٔ خاستگاه ساخت برای هر دو آرشیو، که GitHub نگه می‌دارد. این گواهی فایلی در صفحهٔ انتشار نیست.
نکته. فقط انتشارهایی که با این گردش‌کار منتشر شده‌اند این فایل‌ها را دارند. ممکن است انتشار قدیمی‌تر هیچ‌کدام را نداشته باشد. X.Y.Z را با نسخه‌ای که دانلود کرده‌اید عوض کنید.

بررسی چک‌سام#

آرشیو و SHA256SUMS را در یک پوشه دانلود کنید و این را اجرا کنید:

sha256sum --check SHA256SUMS

هر خط باید به OK ختم شود. اگر فقط .tar.gz را دانلود کرده‌اید، دستور نبودن .zip را خطا حساب می‌کند. در این حالت sha256sum --check --ignore-missing SHA256SUMS را بزنید. در macOS از shasum -a 256 -c SHA256SUMS استفاده کنید.

چک‌سام نشان می‌دهد دانلود شما خراب نیست و همان فایلی است که در SHA256SUMS آمده. هر دو فایل از یک صفحه می‌آیند. پس چک‌سام تنها، شما را در برابر کسی که بتواند آن صفحه را عوض کند محافظت نمی‌کند. برای این کار از گواهی استفاده کنید.

بررسی خاستگاه ساخت#

با GitHub CLI نصب‌شده:

gh attestation verify rtly-kit-X.Y.Z.tar.gz --repo ehsanenaloo/RTLY-Kit

این دستور گواهی‌ای را که GitHub Actions برای دقیقاً همین فایل امضا کرده پیدا و بررسی می‌کند. پیام موفقیت یعنی یک اجرای گردش‌کار در مخزن ehsanenaloo/RTLY-Kit این آرشیو را ساخته و فایل از آن موقع تغییر نکرده است. اگر از .zip استفاده می‌کنید، همین دستور را برای آن هم بزنید.

نصب از Packagist و Composer#

Packagist با وب‌هوک خودش از برچسب تازه باخبر می‌شود. پس composer require enaxon/rtly-kit کد همان برچسب را نصب می‌کند. گردش‌کار انتشار فقط برای کامیت برچسب‌خوردهٔ داخل main اجرا می‌شود.

آرشیوی که Composer دانلود می‌کند را GitHub برای برچسب می‌سازد. این همان فایل گواهی‌شدهٔ بالا نیست. برای اینکه ببینید کدام کامیت را گرفته‌اید، در composer.lock زیر enaxon/rtly-kit نگاه کنید. مقدار source.reference هش کامیت است. آن را با برچسب مقایسه کنید:

git ls-remote https://github.com/ehsanenaloo/RTLY-Kit refs/tags/vX.Y.Z

برای برچسبی که به یک کامیت اشاره می‌کند، هشی که چاپ می‌شود همان هش فایل قفل شماست. برچسب annotated یک خط دوم هم چاپ می‌کند که به ^{} ختم می‌شود. آن خط، کامیت است.

این چه چیزی را ثابت نمی‌کند#

  • کد را بازبینی نمی‌کند. فقط نشان می‌دهد آرشیو از کجا آمده. آنچه در داده‌های مرجع بررسی کرده‌ایم در دقت و داده است.
  • برچسب‌های git امضا نمی‌شوند. بررسی‌های بالا به مخزن، گردش‌کار آن و سرویس گواهی GitHub تکیه دارند.
  • فهرست مواد نرم‌افزاری (SBOM) جداگانه‌ای نداریم. بسته وابستگی اجباری ندارد (نصب).

برای گزارش مشکل امنیتی در یک انتشار، فایل SECURITY.md مخزن را ببینید.