
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çãonpm test
- testesnpm 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 NPMACCESS_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