Настройка учётной записи издателя
Настройка доверенного издателя npmjs.com для @ahmed-g-gad/apothem и предварительных требований к релизу на стороне GitHub.
Это руководство настраивает сторону издателя для поверхности релиза. В схеме
распространения есть один реестр: npm-пакет с областью видимости
@ahmed-g-gad/apothem на npmjs.com, публикуемый рабочим процессом
publish-npm.yml. Рабочий процесс запускается при push тега v*.*.* наряду с
release.yml и не ждёт его (запасной вариант — ручной запуск со входным
параметром tag). Шлюзом служит одобрение среды release: оператор одобряет
его после того, как рабочие процессы GitHub Release, Pages, CI, соответствия и
окружений станут зелёными. Все остальные артефакты поставляются на самой
странице GitHub Release и не требуют внешней учётной записи издателя.
Карта идентичности
| Поверхность | Учётная запись | Идентичность пакета |
|---|---|---|
| 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 name404означает, что пакет с областью видимости ещё не опубликован. Любой другой ответ о пакете должен соответствовать этому репозиторию и учётной записи до публикации. -
Создайте пакет в npm, если интерфейс требует первой записи пакета. Сохраняйте имя с областью видимости:
@ahmed-g-gad/apothem. -
Настройте доверенную публикацию для
@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, который запускается при push тега. Оно ждёт одобрения среды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), который запускает push тега. Если этот запуск не стартовал, запустите рабочий процесс вручную на вкладке 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 и минимальной
версией npm CLI для OIDC, закреплёнными внутри
.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 Release.
.github/workflows/release.ymlвыполняется на теге версии и нуждается только в своём локальном для задания разрешенииcontents: write. Перед тегированием убедитесь, что файл рабочего процесса присутствует вmain. -
Пользовательский домен Pages. Сайт документации развёртывается через
publish-static-site.ymlна пользовательский доменapothem.ahmedgad.com. Домен, DNS и принудительный HTTPS устанавливаются руководством по включению Pages; проверьте: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 Release | gh release view <release-tag> --json assets --jq '.assets[].name' перечисляет sdist, wheel, SBOM, бандлы cosign, происхождение и платформенные архивы |
| Pages | curl -sSI https://apothem.ahmedgad.com/ возвращает 200 на пользовательском домене |