
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
- Buildnpm test
- Pruebasnpm 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 NPMACCESS_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