إعداد حساب الناشر
تهيئة الناشر الموثوق على npmjs.com للحزمة @ahmed-g-gad/apothem والمتطلّبات المسبقة للإصدار على جانب GitHub.
يُهيّئ دليل التشغيل هذا جانب الناشر من سطح الإصدار. لقصة التوزيع سجلّ واحد: حزمة
npm ذات النطاق @ahmed-g-gad/apothem على npmjs.com،
التي ينشرها سير العمل publish-npm.yml. يعمل سير العمل عند دفع الوسم
v*.*.* بجانب release.yml ولا ينتظره (والتشغيل اليدوي مع
المُدخَل tag هو البديل الاحتياطي). وموافقة بيئة release هي
البوابة: يوافق عليها المُشغِّل بعد أن تصبح سِيَر عمل إصدار GitHub
وPages وCI والمطابقة وأُطُر العمل خضراء. وكل مُنتَج آخر يُشحَن
على صفحة إصدار GitHub نفسها ولا يحتاج إلى أي حساب ناشر خارجي.
خريطة الهويات
| السطح | الحساب | هوية الحزمة |
|---|---|---|
| GitHub | ahmed-g-gad | ahmed-g-gad/apothem |
| npm (npmjs.com) | ahmed-g-gad | @ahmed-g-gad/apothem |
يُسمح لمالك GitHub بالتغيّر مستقبلًا. يقرأ منطق سير العمل والمُثبِّت github.repository أو github.repository_owner أو APOTHEM_GITHUB_REPO حيثما تسمح المنصّة بالحلّ الديناميكي. ويبقى معرِّف الحزمة في السجلّ مستقرًّا لأن المستخدمين يُثبّتون اسم الحزمة، لا اسم حساب المشرف.
npm (npmjs.com)
-
سجِّل الدخول إلى
https://www.npmjs.com/بصفتكahmed-g-gad. -
فعِّل المصادقة الثنائية على الحساب.
-
تأكّد من اسم الحزمة ذات النطاق:
npm view @ahmed-g-gad/apothem nameتعني الاستجابة
404أن الحزمة ذات النطاق لم تُنشَر بعد. وأي استجابة أخرى عن الحزمة يجب أن تطابق هذا المستودع والحساب قبل النشر. -
أنشئ الحزمة على npm إذا كانت الواجهة تتطلّب سجلّ حزمة أوليًا. أبقِ الاسم ذا نطاق:
@ahmed-g-gad/apothem. -
هيّئ Trusted Publishing للحزمة
@ahmed-g-gad/apothemمن GitHub Actions:- مالك GitHub:
ahmed-g-gad - المستودع:
apothem - اسم ملف سير العمل:
publish-npm.yml - البيئة:
release(قيمةenvironment:لمهمة النشر فيpublish-npm.yml؛ ويجب أن تتطابق القيمتان) - الإجراء المسموح به:
npm publish.
- مالك GitHub:
-
في GitHub، تحقّق من أن البيئة
releaseموجودة علىahmed-g-gad/apothemوأنها تتطلّب موافقة يدوية لعملية النشر. -
اقصر سطح npm على حزمة سجلّ عامة واحدة:
@ahmed-g-gad/apothemعلى npmjs.com. -
وافِق على مهمة
publish GitHub Releaseفي تشغيلrelease.ymlالذي يبدأه دفعُ الوسم. تنتظر المهمة موافقة بيئةrelease، ويحتاج الفحص أدناه إلى أن يكون ذلك التشغيل أخضر؛ ويُبيّن دليل تشغيل دورة الإصدار، §2.3، الطريقة. ثم تأكّد من جاهزية الإصدار:Release readiness bash scripts/release/check-release-ready.sh <release-tag>يحتاج الفحص إلى ضبط
GH_TOKENوالملفsbom.cdx.jsonالمنشور فيdist/release-assets/. ويحدّد دليل تشغيل دورة الإصدار، §2.4، نطاق الرمز وأمر التنزيل. -
وافِق على عملية النشر إلى بيئة
releaseالخاصة بتشغيلPublish npm(publish-npm.yml) الذي يبدأه دفعُ الوسم. وإن لم يبدأ ذلك التشغيل، فشغِّل سير العمل يدويًا من تبويب GitHub Actions معtag=<release-tag>. -
تحقّق من الحزمة المنشورة فعليًا:
npm verification npm view @ahmed-g-gad/apothem version npx @ahmed-g-gad/apothem@<version> --version
لا يلزم أي سرّ من نوع NPM_TOKEN أو اسم مستخدم أو كلمة مرور. ينشر سير
العمل عبر npm Trusted Publishing (OIDC) بنسخة Node
وبالحدّ الأدنى لدعم OIDC في npm CLI، المُثبَّتين داخل
.github/workflows/publish-npm.yml. ويُشغِّل
npm publish --provenance --access public مقابل npmjs.com،
فيكون بيان المنشأ الخاص بـ Sigstore صريحًا؛ كما يُصدِر npm
المنشأ افتراضيًا للحزم العامة المنشورة من سير عمل عام في
GitHub Actions. يعني الخطأ 404 من السجلّ أثناء
PUT أن الناشر الموثوق على جانب npm، أو نطاق الحزمة، أو
تفويض الحساب لم يُضبَط بعد؛ أصلِح إعدادات الحزمة على npm قبل إعادة
محاولة سير العمل.
بمجرد نجاح نشر موثوق، أغلِق مسار الرموز المميّزة نهائيًا: في Settings → Publishing access الخاصة بالحزمة على npmjs.com، اختر Require two-factor authentication and disallow tokens، واحذف أي سرّ لرمز npm مميّز متبقٍّ في المستودع. لم يعد سير العمل يقرأ أي رمز.
المراجع: الناشرون الموثوقون في npm، والمنشأ في npm، والنطاقات في npm.
المتطلّبات المسبقة للإصدار على جانب GitHub
أسطح الإصدار المتبقّية أصلية في GitHub وتُصادِق باستخدام
GITHUB_TOKEN ذي نطاق المستودع؛ ولا يدخل فيها أي حساب خارجي.
-
إصدار GitHub. يعمل
.github/workflows/release.ymlعلى وسم النسخة ولا يحتاج إلا إلى صلاحيةcontents: writeالمحلّية لمهمّته. تأكّد من وجود ملف سير العمل علىmainقبل وضع الوسم. -
النطاق المخصّص لـ Pages. يُنشَر موقع الوثائق عبر
publish-static-site.ymlإلى النطاق المخصّصapothem.ahmedgad.com. يُؤسِّس دليل تشغيل تفعيل Pages النطاقَ وDNS وفرض HTTPS؛ تحقّق:Pages verification gh api repos/ahmed-g-gad/apothem/pages --jq '.cname, .https_enforced' curl -sSI https://apothem.ahmedgad.com/ | head -n 1 -
مُثبِّتات السكربت. يُقدَّم
install.shوinstall.ps1من موقع Pages (https://apothem.ahmedgad.com/install.shوhttps://apothem.ahmedgad.com/install.ps1). وتنشرهما عملية النشر نفسها إلى Pages؛ ولا يلزم حساب أو رمز مميّز منفصل.
مصفوفة التحقّق
بعد الإعداد، يستجيب كل سطح ناشر لفحصه المرجعي:
| السطح | الفحص |
|---|---|
| npmjs.com | يُرجِع npm view @ahmed-g-gad/apothem version النسخة الصادرة |
| إصدار GitHub | يسرد gh release view <release-tag> --json assets --jq '.assets[].name' الـ sdist والـ wheel والـ SBOM وحِزم cosign والمنشأ وأرشيفات المنصّات |
| Pages | يُرجِع curl -sSI https://apothem.ahmedgad.com/ الرمز 200 على النطاق المخصّص |