私は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からタグをプッシュしてリポジトリにコミットできるようにプロジェクトを設定するにはどうすればよいですか?
更新:
この構成は実際にはエンドツーエンドで機能します。この構成の主な機能は次のとおりです。
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_TOKEN
、GH_TOKEN
、NPM_TOKEN
をlerna 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_PAT
はrepo
スコープを持つ個人アクセストークンであり、シークレットに保存されます。
変更されたリモートにローカルブランチをセットアップするには、git fetch
が必要です。リポジトリにプッシュバックするには、個人用アクセストークンが必要です。