Nous appliquons les actions github pour CI et la publication automatique sur npm

Actions Github


Salut, Habr. Cet article explique comment automatiser votre projet avec des actions github.
L'automatisation sera divisée en:


  • CI - des tests seront effectués sur chaque commit
  • Publier - à la sortie, nous publions la version en npm

Ci


Dans notre référentiel (comment nous y sommes arrivés peut être lu ici ) car il y a les scripts suivants:


  • npm run build - Construire
  • npm test - Tests
  • npm run codestyle - Vérification du style de code
    Nous exécuterons la construction et les tests sur 3 versions de nœuds (8, 10, 12) et la vérification du style de code en même temps
    Le .github/workflows/CI.yml sera responsable de ce workflow:

 name: Node CI on: push jobs: buildAndTest: runs-on: ubuntu-latest strategy: matrix: node-version: [8.x, 10.x, 12.x] steps: - uses: actions/checkout@v1 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - name: Install, build, test run: | npm install npm run build npm test env: CI: true checkCodestyle: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: '8.x' - name: Install and check codestyle run: | npm install npm run codestyle env: CI: true 

Analysons son contenu
name: Node CI chaîne name: Node CI contenant le nom du flux de travail
on: push nous allons exécuter le workflow sur la push
jobs: c'est la tâche à accomplir


buildAndTest travail:


 buildAndTest: #  runs-on: ubuntu-latest #     strategy: #    matrix: #       node-version: [8.x, 10.x, 12.x] #   steps: #   - uses: actions/checkout@v1 - name: Use Node.js ${{ matrix.node-version }} #   uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - name: Install, build, test #    run: | npm install npm run build npm test env: #    CI   CI: true 

Vous pouvez remarquer une construction intéressante ${{ something }} que j'appelle cet appel de contexte. Où something une expression, dans notre cas matrix.node-version , c'est matrix.node-version dire que nous obtenons une valeur dans l'objet de matrix appelée node-version . matrix stocke la valeur des variables spécifiées dans l'exécution en cours, dans notre cas, avec trois démarrages, les valeurs 8.x , 10.x , 12.x resteront


Travail CheckCodestyle


 checkCodestyle: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: '8.x' - name: Install and check codestyle run: | npm install npm run codestyle env: CI: true 

Eh bien, ici, tout est similaire au premier


Publier


 name: Publish #  workflow on: release #   ( ) jobs: #  test: # ,    runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: node-version: 12 - run: npm ci - run: npm run build - run: npm test - run: npm run codestyle publish: #  needs: test #       runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-node@v1 with: node-version: 12 #   12  registry-url: https://registry.npmjs.org/ - run: npm run build #   - name: Publish beta #   if: github.event.prerelease == true #        run: npm publish --tag beta env: NODE_AUTH_TOKEN: ${{secrets.npm}} - name: Publish stable #    if: github.event.prerelease == false #     run: npm publish --tag beta env: NODE_AUTH_TOKEN: ${{secrets.npm}} - name: Build and Deploy ds #   uses: JamesIves/github-pages-deploy-action@master if: github.event.prerelease == false env: ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} BRANCH: gh-pages FOLDER: docs BUILD_SCRIPT: npm install && npm run typedoc ##     

De l'intérêt ici, ${{ secrets.SOMETHING }} est un appel à l'élément SOMETHING dans l'objet SOMETHING
Ici, je me réfère à deux significations secrètes:


  • npm - jeton NPM
  • ACCESS_TOKEN - Accès aux pages gh (jeton github)

Les secrets peuvent être créés dans les paramètres du projet


Et les lignes non moins intéressantes sont


 if: github.event.prerelease == true if: github.event.prerelease == false 

Si vous permet de dire à github les étapes à suivre et celles qui ne le sont pas.
Pour ce faire, nous prenons la valeur github.event.prerelease , github.event contient l'objet json reçu dans la version du webhook, et si c'est true nous publions la version bêta,
si false nous publions stable et dock


C'est aussi simple que tout automatiser avec des actions github


Les références


Dépôt final
Bibliothèque NPM
Exemple de documentation


Documentation des actions Github
Travailler avec le contexte
Travailler avec des valeurs secrètes
Description de la version du webhook

Source: https://habr.com/ru/post/fr468729/


All Articles