Aplicamos ações do github para IC e publicação automática no npm

Ações do Github


Oi Habr. Este artigo é sobre como automatizar seu projeto com ações do github.
A automação será dividida em:


  • CI - testes serão realizados em cada confirmação
  • Publicar - no lançamento, publicamos a versão em npm

Ci


Em nosso repositório (como chegamos a isso pode ser lido aqui ), pois existem os seguintes scripts:


  • npm run build - Compilação
  • npm test - testes
  • npm run codestyle - verificação de estilo de código
    Executaremos a compilação e testes em 3 versões do nó (8, 10, 12) e verificação de estilo de código ao mesmo tempo
    O .github/workflows/CI.yml será responsável por este fluxo de trabalho:

 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 

Vamos analisar o seu conteúdo
name: Node CI sequência de caracteres do name: Node CI contém o nome do fluxo de trabalho
on: push , executaremos o fluxo de trabalho no push
jobs: esta é a tarefa a ser concluída


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 

Você pode notar uma construção interessante ${{ something }} eu chamo de chamada de contexto.Quando something alguma expressão, no nosso caso matrix.node-version , ou seja, obtemos um valor no objeto de matrix chamado node-version . matrix armazena o valor das variáveis ​​especificadas na execução atual, no nosso caso, com três partidas, os valores 8.x , 10.x , 12.x estarão lá


Trabalho de 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 

Bem, aqui tudo é semelhante ao primeiro


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 ##     

Do interesse aqui, ${{ secrets.SOMETHING }} é uma chamada para o elemento SOMETHING no objeto SOMETHING
Aqui me refiro a dois significados secretos:


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

Segredos podem ser criados nas configurações do projeto


E não menos linhas interessantes são


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

If permite que você diga ao github quais etapas executar e quais não.
Para fazer isso, usamos o valor github.event.prerelease , github.event contém o objeto json recebido na versão do webhook e, se for true , publicamos a versão beta,
se false , publicamos stable e dock


É tão simples automatizar tudo com ações do github


Referências


Repositório final
Biblioteca Npm
Exemplo de documentação


Documentação de ações do Github
Trabalhar com contexto
Trabalhar com valores secretos
Descrição da versão do webhook

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


All Articles