Je maintiens un monorepo lerna/yarn. Je suis en train de migrer le CI/CD du cercle vers la nouvelle version bêta de publication de GitHuba Actions. J'ai créé le workflow suivant:
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
Il échoue à l'étape de publication des packages avec ce message:
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.
Changer la télécommande pour utiliser HTTPS et le jeton github n'a pas aidé:
git remote rm Origin
git remote add Origin "https://$USER_NAME:[email protected]/apollo-elements/apollo-elements.git"
Où GITHUB_PERSONAL_ACCESS_TOKEN
est un PAT transmis via des secrets.
Dans ce cas, j'ai reçu cette erreur:
lerna ERR! ENOREMOTEBRANCH Branch 'master' doesn't exist in remote 'Origin'.
Comment dois-je configurer le projet pour pouvoir envoyer des balises et les valider dans le référentiel à partir du CD?
MISE À JOUR:
Cette configuration fonctionne réellement de bout en bout. Les principales caractéristiques de cette configuration sont:
git remote set-url Origin https://$GITHUB_ACTOR:[email protected]/bennypowers/apollo-elements
GITHUB_ACTOR
est fourni par le coureur, GITHUB_PAT
est un jeton d'accès personnel Github défini dans les secrets du référentiel.git checkout "${GITHUB_REF:11}" && git pull
lerna
ne peut pas gérer le fil pour une raison quelconque..npmrc
illustrée ci-dessous, car il s'agit d'un package de portée.npm whoami
après avoir configuré l'authentification. Cela lancera si l'authentification est cassée lerna publish
Poussera des balises pour chacun de vos packages, et peut-être aussi écrire dans les fichiers CHANGELOG.md et package.json, même s'il ne publie pas en raison d'une mauvaise authentification. L'exécution de npm whoami
Ici pour vérifier que vous pouvez réellement publier avant d'exécuter lerna
évite le mal de tête de restaurer manuellement l'état du dépôt.GITHUB_TOKEN
, GH_TOKEN
et 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 }}
Notez que la configuration ci-dessus supprime certaines étapes non pertinentes. Voir le workflow complet pour la version non expurgée
RÉPONSE ORIGINALE:
Avec l'aide de l'utilisateur de StackOverflow @rmunn, je suis arrivé à cette solution:
- 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 }}
Où GITHUB_PAT
Est un jeton d'accès personnel avec une portée repo
, enregistré dans des secrets.
Le git fetch
Est requis pour configurer les succursales locales sur la télécommande modifiée. Le jeton d'accès personnel est requis pour repousser vers le référentiel.