التحقّق من الإصدارات
يُبنى كل مرشّح إصدار من 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.json | Sigstore signature bundle (واحد لكل مُنتَج). |
sbom.cyclonedx.json | CycloneDX 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🚨 الإبلاغ عن فشل تحقّق
إن فشلت أي خطوة تحقّق لمُنتَج نزّلته من إصدار رسمي، فلا تُثبِّته. أبلِغ عن التباين عبر القنوات في سياسة الأمان الخاصة بالمشروع.