登录MyGet for GitHub Actions以安装私有软件包

时间:2020-01-02 23:54:46

标签: npm github-actions myget

我正在尝试建立一个GitHub Actions工作流,该工作流将在创建PR时运行项目的测试。这是该操作的YAML;真的很简单。

steps:
    - uses: actions/checkout@v1

    - name: Use Node.js
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
        registry-url: https://www.myget.org/F/hsa/npm/
        scope: '@hsa'
      env:
        NODE_AUTH_TOKEN: ${{ secrets.MYGET_TOKEN }}

    - name: set always auth
      run: |
        npm config set always-auth true

    - name: Install
      run: |
        npm install

    - name: Run lint
      shell: bash
      run: |
        if [[ $GITHUB_BASE_REF ]]
        then
            export NX_BASE=remotes/origin/$GITHUB_BASE_REF
        else
            export NX_BASE=$(git rev-parse HEAD~1)
        fi
        echo "Base => $NX_BASE"
        npm run affected:test -- --base=$NX_BASE

“使用Node.js”步骤为@hsa范围设置注册表URL; MYGET_TOKEN使用回购的秘密设置。 “设置始终验证”步骤是必需的,因为它不是自动完成的。看起来应该足以允许该操作安装私有软件包,但这是行不通的。这是我在“安装”步骤上遇到的错误:

npm ERR! code E401
npm ERR! Unable to authenticate, need: Basic realm="MyGet - hsa"

我已经输出了在Action中创建的临时.npmrc文件,它看起来确实正确,并为给定范围设置了注册表,因此一切正常。但是我无法通过NPM安装步骤来实际运行测试。

在身份验证方面我所缺少的任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

来自https://github.com/actions/setup-node/

steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
  with:
    node-version: '10.x'
    registry-url: 'https://registry.npmjs.org'
# Skip post-install scripts here, as a malicious
# script could steal NODE_AUTH_TOKEN.
- run: npm install --ignore-scripts
  env:
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
# `npm rebuild` will run all those post-install scripts for us.
- run: npm rebuild && npm run prepare --if-present

尝试在actions / setup-node内使用npm install。

答案 1 :(得分:0)

这是我最后使用的工作流程配置文件,用于安装私有软件包:

name: Nx Affected CI

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

jobs:
  build:
    runs-on: ubuntu-latest

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

    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - run: git fetch origin master
      - run: cp npmrc_file .npmrc
      - name: npm install
        run: npm install
        env:
          NPM_TOKEN: ${{ secrets.MYGET_TOKEN }}
      - run: rm .npmrc
      - run: npm run affected:test --base=origin/master

npmrc_file应该看起来像这样:

@hsa:registry=https://www.myget.org/path/to/repository
always-auth=true
//www.myget.org/path/to/repository/:_authToken=${NPM_TOKEN}

我将其复制到工作流中,安装了私有软件包,然后将其删除,因为它在尝试运行NPM_TOKEN命令时导致npm run出现问题。

此外,MYGET_TOKEN存储在存储库设置的机密部分。