Aplicamos acciones de github para CI y publicación automática en npm

Acciones de Github


Hola Habr Este artículo trata sobre cómo automatizar su proyecto con acciones de github.
La automatización se dividirá en:


  • CI: se realizarán pruebas en cada confirmación
  • Publicar: en el lanzamiento publicamos la versión en npm

Ci


En nuestro repositorio (cómo llegamos a esto se puede leer aquí ) porque hay los siguientes scripts:


  • npm run build - Build
  • npm test - Pruebas
  • npm run codestyle - Verificación de estilo de código
    Ejecutaremos la compilación y las pruebas en 3 versiones de nodo (8, 10, 12) y comprobación de estilo de código al mismo tiempo
    El .github/workflows/CI.yml será responsable de este flujo de trabajo:

 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 

Analicemos sus contenidos.
name: Node CI cadena de name: Node CI contiene el nombre del flujo de trabajo
on: push ejecutaremos el flujo de trabajo en el push
jobs: esta es la tarea a completar


Job buildAndTest :


 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 

Puede observar una construcción interesante ${{ something }} A esto le llamo llamada de contexto. Cuando something alguna expresión, en nuestro caso matrix.node-version , es decir, obtenemos un valor en el objeto de matrix llamado node-version . matrix almacena el valor de las variables especificadas en la ejecución actual, en nuestro caso, con tres inicios, los valores 8.x , 10.x , 12.x estarán allí


CheckCodestyle trabajo


 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 

Bueno, aquí todo es similar al primero.


Publicar


 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 interés aquí, ${{ secrets.SOMETHING }} es una llamada al elemento SOMETHING en el objeto SOMETHING
Aquí me refiero a dos significados secretos:


  • npm - token NPM
  • ACCESS_TOKEN - Acceso a páginas gh (token github)

Se pueden crear secretos en la configuración del proyecto


Y no menos líneas interesantes son


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

Si le permite decirle a Github qué pasos tomar y cuáles no.
Para hacer esto, tomamos el valor github.event.prerelease , github.event contiene el objeto json recibido en el lanzamiento del webhook, y si es true , publicamos la versión beta,
si es false , publicamos estable y dock


Así de simple es automatizar todo con acciones de github


Referencias


Repositorio final
Biblioteca Npm
Ejemplo de documentación


Documentación de acciones de Github
Trabajar con contexto
Trabaja con valores secretos
Descripción del lanzamiento de webhook

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


All Articles