We apply github actions for CI and automatic publication on npm

Github actions


Hello, Habr. This article is about how to automate your project with github actions.
Automation will be divided into:



Ci


In our repository (how we got to this can be read here ) for there are the following scripts:



 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 

Let's analyze its contents
name: Node CI string containing the name of the workflow
on: push we will run the workflow on the push
jobs: this is the task to be completed


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 

You can notice an interesting construction ${{ something }} I call this context call. Where something some kind of expression, in our case matrix.node-version , that is, we get a value in the matrix object called node-version . matrix stores the value of the variables specified in the current run, in our case, with three starts, the values 8.x , 10.x , 12.x will lie there


CheckCodestyle job


 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 

Well, here everything is similar to the first


Publish


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

Of the interest here, ${{ secrets.SOMETHING }} is a call to the SOMETHING element in the SOMETHING object
Here I turn to two secret meanings:



Secrets can be created in the project settings


And no less interesting lines are


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

If allows you to tell github which steps to take and which not.
To do this, we take the value github.event.prerelease , github.event contains the json object received in the webhook release, and if it is true then we publish the beta,
if false then we publish stable and dock


That's how simple it is to automate everything with github actions


References


Final repository
Npm library
Documentation Example


Github actions documentation
Work with context
Work with secret values
Description of webhook release



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


All Articles