Действия Github, 401 неавторизованный при установке пакета Github с npm или yarn

Когда я пытаюсь установить свои npm модули из действия GitHub, я получаю следующую ошибку:

npm ERR! 401 Unauthorized - GET https://npm.pkg.github.com/@xxxx%2fxxxx-analytics - Your request could not be authenticated by the GitHub Packages service. Please ensure your access token is valid and has the appropriate scopes configured.

Прежде чем вы прокомментируете, я правильно настроил .npmrc с областью и токеном доступа, и все работает нормально при локальной установке частного пакета.

Вот мое действие рабочего процесса GitHub:

name: JavaScript workflow

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1
      - name: Use Node.js 12.x
        uses: actions/setup-node@v1
        with:
          node-version: '12.x'
      - name: npmrc
        run: cat .npmrc
      - name: npm install
        run: |
          npm install
        env:
          CI: true
          NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}

вот мой .npmrc

@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=XXXXXXXXX
@colonynetworks:registry=https://npm.pkg.github.com
//npm.pkg.github.com:_authToken=XXXXXXXXX
always-auth=true
@react-admin:registry=https://registry.marmelab.com
//registry.marmelab.com:
_auth=XXXXXXXXX
[email protected]
always-auth=true

Это частное репо, и токены authTokens в настоящее время жестко запрограммированы в файле .npmrc.

Однако, пытаясь найти решение для этого, я наткнулся на этот случайный комментарий от сотрудника Github: https://github.community/t/netlify-getting-401-from-github-package-registry-with-auth-token/16415/3

Это немного расплывчато, но похоже, что он не принимает жестко запрограммированный authToken в файле .npmrc.

Итак, первое, что я попробовал, - это использовать нашу переменную env следующим образом:

@xxxx=https://npm.pkg.github.com
//npm.pkg.github.com:_authToken=${NPM_AUTH_TOKEN}

Переменная env верна в наших секретах репозитория Github и предоставляется рабочим процессом.

Однако это все равно привело к той же ошибке 401 Unauthorized.

Глядя на другие решения, я затем попытался сгенерировать .npmrc вручную внутри действия Github перед шагом install, например:

- name: npmrcgen
        run: |
          echo "//npm.pkg.github.com/:_authToken=XXXXXXX" > .npmrc
          echo "@xxxxx=https://npm.pkg.github.com/" >> .npmrc
          echo "@react-admin:registry=https://registry.marmelab.com" >> .npmrc
          echo "//registry.marmelab.com:" >> .npmrc
          echo "_auth=XXXXXXX" >> .npmrc
          echo "[email protected]" >> .npmrc
          echo "always-auth=true" >> .npmrc

На этапе регистрации, который я добавил, _authToken (только для Github) по-прежнему отображается как ***, и я все еще получаю ошибку 401 Unauthorized.

На этом этапе я хотел подтвердить, что .npmrc даже использовался, поэтому я удалил второй частный реестр, который мы использовали для marmelab.com, и, конечно же, получил сообщение об ошибке, в котором говорилось, что он больше не может установить их пакет ra-realtime. Это доказывает, что файл .npmrc действительно читается и используется моим действием Github, но он не принимает мой токен личного доступа Github.

Я также попытался сгенерировать новый токен. У него есть полный доступ ко всему, что находится под repo:, а также под write:packages и read:packages, что и должно быть.

По-прежнему 401 Unauthorized в действии Github и все еще отлично работает локально.

Наконец, я попытался установить его с yarn вместо npm. Неудивительно, что это тоже не помогло.

Я безуспешно видел и пробовал следующие решения:

Одна вещь, которую я не пробовал, так как я не видел никаких рекомендаций о том, как это было бы хорошей идеей, но я не делал npm login в действии Github. Поскольку никто другой этого не делал и каким-то образом это работает, я предполагаю, что в этом нет необходимости.


person MLyck    schedule 29.09.2020    source источник
comment
Нет решения, но похожая (та же) проблема: stackoverflow.com/questions/60346132/   -  person riQQ    schedule 06.10.2020
comment
@riQQ, пожалуйста, дайте мне знать, если найдете решение. Я назначил награду за этот вопрос, но все равно ничего. Также отправил тикет в службу поддержки Github, но все еще ждет ответа.   -  person MLyck    schedule 07.10.2020
comment
GitHub ответил на мой запрос в службу поддержки, сказав, что моя установка выглядит правильно, и запросил доступ к частному репо, из которого я публикую свой пакет :( Пока нет решения, но они говорят, что это связано с опубликованным пакетом, а не с этапом установки .   -  person MLyck    schedule 08.10.2020
comment
Не могли бы вы попробовать записать файл .npmrc в домашний каталог пользователя, т.е. ~ / .npmrc?   -  person Oluwafemi Sule    schedule 12.10.2020
comment
как насчет использования кредитов github, таких как имя пользователя (не адрес электронной почты) и пароль?   -  person NiNiCkNaMe    schedule 12.10.2020


Ответы (2)


В итоге мне пришлось связаться со службой поддержки GitHub и предоставить им доступ к моему репо, чтобы разобраться в этом.

Однако они выяснили, в чем проблема.

Рабочие процессы Github более строгие, чем локальные среды, и требуют дополнительного / перед токеном аутентификации:

Найди отличие:

//npm.pkg.github.com:_authToken=XXXXXXXXX
//npm.pkg.github.com/:_authToken=XXXXXXXXX

добавление дополнительных / перед :_authToken= решило проблему для меня.

person MLyck    schedule 13.10.2020

В корне вашего проекта должен быть файл .npmrc.

Содержимое .npmrc:

registry=https://registry.npmjs.org/
@{scope}:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=********** (Token generated from github)

@ {scope} - название вашей организации или ваше имя пользователя. Это чувствительно к регистру.

person Atur    schedule 21.05.2021