Скачать частный модуль из реестра пакетов Github через Yarn в рамках действия Github? Публикация работает, но установка встречается с ошибкой 401 Unauthorized

По разным причинам мы застряли в использовании yarn для управления нашими пакетами, поэтому мы не можем полагаться на package-lock.json для использования npm с действиями github.

Мы не можем заставить Yarn пройти аутентификацию как часть действия github. Наш репозиторий npmrc настроен как:

@COMPANY:registry=https://npm.pkg.github.com
registry=https://registry.npmjs.org/

И мы используем это действие для пряжи.

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

name: CI
on: [push]
jobs:
  build:
    name: Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: borales/actions-yarn@v2.1.0
        with:
          auth-token: ${{ secrets.GITHUB_TOKEN }}
          registry-url: "https://npm.pkg.github.com"
          scope: tlabs
          cmd: version
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_REGISTRY_URL: https://npm.pkg.github.com
      - name: Create NPMRC
        run: |
          echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" > ~/.npmrc
      - name: Install
        run: |
           yarn install --verbose

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

Запуск yarn install будет работать для всех других пакетов, но когда он попадет в наши частные модули, он попытается получить их из правильного реестра (github), но получит 401.

Полная ошибка:

verbose 7.614802156 Error: https://npm.pkg.github.com/download/@tlabs/utils/1.0.1/afe9eaa6f9565f95c31563cbecfe617d7970f44077302cbe9ca8ee3223550469: Request failed "401 Unauthorized"
    at ResponseError.ExtendableBuiltin (/usr/share/yarn/lib/cli.js:696:66)
    at new ResponseError (/usr/share/yarn/lib/cli.js:802:124)
    at Request.<anonymous> (/usr/share/yarn/lib/cli.js:66996:16)
    at Request.emit (events.js:210:5)
    at Request.module.exports.Request.onRequestResponse (/usr/share/yarn/lib/cli.js:141441:10)
    at ClientRequest.emit (events.js:210:5)
    at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:583:27)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:115:17)
    at TLSSocket.socketOnData (_http_client.js:456:22)
    at TLSSocket.emit (events.js:210:5)
error An unexpected error occurred: "https://npm.pkg.github.com/download/@tlabs/utils/1.0.1/afe9eaa6f9565f95c31563cbecfe617d7970f44077302cbe9ca8ee3223550469: Request failed \"401 Unauthorized\"".

3 ответа

Решение

По умолчанию GITHUB_TOKENограничивается только текущим репозиторием. Вы не можете использовать его для доступа к пакетам в другом репозитории. Использоватьread:packages а также repoограниченный токен личного доступа вместоGITHUB_TOKEN.

Создаю файл .npmrc и .yarnrc. Тип:

      name: Test

on: push
jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.x]

    steps:
      - uses: actions/checkout@v2
      - name: Node ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - name: Create NPMRC
        run: |
            echo "//npm.pkg.github.com/:_authToken=${{ secrets.PACKAGES_TOKEN }}" >> ~/.npmrc
            echo "@you-scope:registry=https://npm.pkg.github.com" >> ~/.npmrc
            echo 'registry "https://registry.yarnpkg.com"' >> ~/.yarnrc
      - run: yarn install

Замените @ you-scope для вас, пользователя github или вашей организации, в github в нижнем регистре . Создайте экран PACKAGES_TOKEN для этого репозитория.

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

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

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

@{scope}это название вашей организации или ваше имя пользователя. Это чувствительно к регистру. Кроме того, для доступа к частным и общедоступным пакетам в реестре github вам понадобится токен.

Ссылка: вам нужен токен доступа для публикации, установки и удаления пакетов.

Другие вопросы по тегам