web-dev-qa-db-ja.com

Lerna Monorepoを公開するGitHubアクションを設定する方法

私はlerna/yarnモノレポを維持しています。 CI/CDをサークルから新しいGitHuba Actionsパブリッシュベータに移行中です。次のワークフローを作成しました。

name: CD

on:
  Push:
    branches:
      - master

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@master

      - name: Checkout master
        run: git checkout master

      - name: Install rsync
        run: Sudo apt install rsync

      - name: Install yarn
        run: |
          curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | Sudo apt-key add -
          echo "deb https://dl.yarnpkg.com/debian/ stable main" | Sudo tee /etc/apt/sources.list.d/yarn.list
          Sudo apt-get update
          Sudo apt-get install yarn

      - name: Install Packages
        run: yarn install

      - name: Test
        run: yarn test

      - name: Upload coverage results to Code Climate
        run: sh ./scripts/upload-coverage.sh
        env:
          CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}

      - name: Authenticate with Registry
        run: echo "registry=//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc
        env:
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: Configure CI Git User
        run: |
          git config --global user.email [email protected]
          git config --global user.name GitHub Actions

      - name: Publish package
        run: yarn deploy --yes
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Build Docs
        run: yarn docs

      - name: Deploy Docs
        run: |
          echo "apolloelements.dev" > docs/CNAME
          npx gh-pages --dist docs

パッケージの発行ステップで次のメッセージが表示されて失敗します。

lerna info git Pushing tags...
lerna ERR! Error: Command failed: git Push --follow-tags --no-verify Origin master
lerna ERR! fatal: could not read Username for 'https://github.com': No such device or address
lerna ERR! 
lerna ERR!     at makeError (/home/runner/work/apollo-elements/apollo-elements/node_modules/execa/index.js:174:9)
lerna ERR!     at Promise.all.then.arr (/home/runner/work/apollo-elements/apollo-elements/node_modules/execa/index.js:278:16)
lerna ERR! Error: Command failed: git Push --follow-tags --no-verify Origin master
lerna ERR! fatal: could not read Username for 'https://github.com': No such device or address
lerna ERR! 
lerna ERR!     at makeError (/home/runner/work/apollo-elements/apollo-elements/node_modules/execa/index.js:174:9)
lerna ERR!     at Promise.all.then.arr (/home/runner/work/apollo-elements/apollo-elements/node_modules/execa/index.js:278:16)
lerna ERR! lerna Command failed: git Push --follow-tags --no-verify Origin master
lerna ERR! lerna fatal: could not read Username for 'https://github.com': No such device or address
lerna ERR! lerna 
error Command failed with exit code 128.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

HTTPSとgithubトークンを使用するようにリモートを変更しても効果がありません:

git remote rm Origin
git remote add Origin "https://$USER_NAME:[email protected]/apollo-elements/apollo-elements.git"

どこ GITHUB_PERSONAL_ACCESS_TOKENは、シークレットを介して渡されるPATです。

その場合、私はこのエラーを受け取りました:

lerna ERR! ENOREMOTEBRANCH Branch 'master' doesn't exist in remote 'Origin'.

CDからタグをプッシュしてリポジトリにコミットできるようにプロジェクトを設定するにはどうすればよいですか?

10
Benny Powers

更新:

この構成は実際にはエンドツーエンドで機能します。この構成の主な機能は次のとおりです。

  • git remote set-url Origin https://$GITHUB_ACTOR:[email protected]/bennypowers/apollo-elementsでのリモートの設定GITHUB_ACTORはランナーによって提供され、GITHUB_PATはリポジトリのシークレットに設定されたGithubパーソナルアクセストークンです。
  • git checkout "${GITHUB_REF:11}" && git pullによる再確認とプル
  • lernaは何らかの理由で糸を処理できないため、糸からログアウトします。
  • これはスコープパッケージであるため、以下に示す特定の細かい.npmrc設定を使用します。
  • 認証の設定後にnpm whoamiを実行しています。これは、認証が失敗した場合にスローされます。lerna publishは、各パッケージのタグをプッシュし、不正な認証のために公開されていない場合でも、おそらくCHANGELOG.mdおよびpackage.jsonファイルに書き込みます。ここでnpm whoamiを実行して、lernaを実行する前に実際に公開できることを確認すると、リポジトリの状態を手動で復元するという煩わしさがなくなります。
  • GITHUB_TOKENGH_TOKENNPM_TOKENlerna publishに渡す
name: CD

on:
  Push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v1

      - name: Configure CI Git User
        run: |
          git config --global user.name '@bennypowers'
          git config --global user.email '[email protected]'
          git remote set-url Origin https://$GITHUB_ACTOR:[email protected]/bennypowers/apollo-elements
        env:
          GITHUB_PAT: ${{ secrets.GITHUB_PAT }}

      - name: Checkout and pull branch
        run: git checkout "${GITHUB_REF:11}" && git pull

      - name: Install Packages
        run: yarn install

      - name: Authenticate with Registry
        run: |
          yarn logout
          echo "@apollo-elements:registry=http://registry.npmjs.org/" > .npmrc
          echo "registry=http://registry.npmjs.org/" >> .npmrc
          echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> .npmrc
          npm whoami
        env:
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: Publish package
        run: lerna publish --yes --message 'chore: release new versions'
        env:
          GH_TOKEN: ${{ secrets.GITHUB_PAT }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_PAT }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

上記の設定はいくつかの無関係な手順を編集することに注意してください。未編集バージョンについては 完全なワークフロー を参照してください

元の回答:

StackOverflowユーザー@rmunnの助けを借りて、私はこのソリューションにたどり着きました:

  - name: Configure CI Git User
    run: |
      git remote rm Origin
      git remote add Origin "https://$USER_NAME:[email protected]/apollo-elements/apollo-elements.git"
      git fetch
      git config --global user.email [email protected]
      git config --global user.name GitHub Actions
    env:
      USER_NAME: ${{ secrets.DEPLOYING_USER_NAME }}
      GITHUB_PAT: ${{ secrets.GITHUB_PAT }}

ここで、GITHUB_PATrepoスコープを持つ個人アクセストークンであり、シークレットに保存されます。

変更されたリモートにローカルブランチをセットアップするには、git fetchが必要です。リポジトリにプッシュバックするには、個人用アクセストークンが必要です。

6
Benny Powers