تخطٍّ إلى المحتوى
DispatchAtlas
بحث

التحقّق من الإصدارات

يُبنى كل مرشّح إصدار من DispatchAtlas بسير عمل واحد مُدقَّق يُصدِر، إلى جانب توزيعات Python، مجموعةً من مُنتَجات سلسلة-التوريد القابلة للتحقّق المستقلّ: تجزئات SHA-256، وSigstore signature bundles، وGitHub build provenance attestations، وSBOM attestation واحد، وCycloneDX software bill of materials. تُوثِّق هذه الصفحة كيفية التحقّق من كلٍّ منها.

استبدل vX.Y.Z بوسم الإصدار الذي نزّلته في كل المواضع.

📦 المُنتَجات المرفقة بإصدار

المُنتَجالغرض
*.whl، *.tar.gzعجلات Python وتوزيعات المصدر.
SHA256SUMS.txtتجزئات SHA-256 لكل مُنتَج توزيع.
*.sigstore.jsonSigstore signature bundle (واحد لكل مُنتَج).
sbom.cyclonedx.jsonCycloneDX SBOM لبيئة البناء المُدقَّقة.

تُخزَّن GitHub build provenance وSBOM attestations مع attestation records الخاصة بالمستودع بدلًا من كونها مرفقات إصدار، ويجري التحقّق منها عبر GitHub CLI.

🔢 تحقّق من التجزئات

نزّل مُنتَجات التوزيع وSHA256SUMS.txt إلى الدليل نفسه، ثم افحصها:

sha256sum --check SHA256SUMS.txt

يجب أن يُبلِّغ كل سطر بـ OK.

✍️ تحقّق من توقيعات Sigstore

يُوقِّع الإصدار كل مُنتَج بتوقيع Sigstore بلا-مفتاح عبر هوية OpenID Connect لسير العمل. ثبّت cosign وتحقّق من bundle لمُنتَج:

cosign verify-blob \
  --bundle dispatchatlas-vX.Y.Z-py3-none-any.whl.sigstore.json \
  --certificate-identity-regexp 'https://github.com/ahmed-g-gad/dispatchatlas/.*' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  dispatchatlas-vX.Y.Z-py3-none-any.whl

يطبع التشغيل الناجح Verified OK. ويتحقّق الأمر نفسه من SHA256SUMS.txt وsbom.cyclonedx.json إزاء bundle الخاص بهما.

🧾 تحقّق من GitHub build provenance

يحمل كل توزيع بيان provenance موقَّعًا يصف سير العمل، والـ commit، والـ runner الذي بناه. تحقّق منه بـ GitHub CLI:

gh attestation verify dispatchatlas-vX.Y.Z-py3-none-any.whl \
  --repo ahmed-g-gad/dispatchatlas

يؤكّد المُخرَج أن المُنتَج بُني بسير عمل الإصدار عند الـ commit المتوقَّع.

🧰 افحص SBOM

يُعدِّد CycloneDX SBOM كل مكوّن في بيئة البناء مع عنوان URL لحزمته، وترخيصه، وتجزئات محتواه. افحصه بأي أداة واعية بـ CycloneDX، أو اقرأ قائمة المكوّنات مباشرةً:

python -c "import json; d = json.load(open('sbom.cyclonedx.json')); \
print('\n'.join(c['name'] + ' ' + c.get('version', '') for c in d['components']))"

SBOM نفسه attested؛ تحقّق من SBOM attestation بـ:

gh attestation verify dispatchatlas-vX.Y.Z-py3-none-any.whl \
  --repo ahmed-g-gad/dispatchatlas \
  --predicate-type https://cyclonedx.org/bom

🚨 الإبلاغ عن فشل تحقّق

إن فشلت أي خطوة تحقّق لمُنتَج نزّلته من إصدار رسمي، فلا تُثبِّته. أبلِغ عن التباين عبر القنوات في سياسة الأمان الخاصة بالمشروع.