regevbr/json-expression-eval

View on GitHub
.github/workflows/ci.yml

Summary

Maintainability
Test Coverage
name: CI

on:
  push:
    branches:
      - master
  release:
    types: [ published ]
  pull_request:
    branches:
      - '**'

env:
  PRIMARY_NODE_VERSION: 18.x
  PRIMARY_OS: ubuntu-latest
  REGISTRY: https://registry.npmjs.org/

jobs:
  test:
    name: CI
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ ubuntu-latest ]
        node-version: [ 14.x, 16.x, 18.x, 20.x ]

    steps:

      - name: Echo env variables
        run: |
          echo ref: ${{ github.event.client_payload.ref || github.ref }}
          echo sha: ${{ github.event.client_payload.sha || github.sha }}
          echo head ref: ${{ github.event.client_payload.head_ref || github.head_ref }}
          echo base ref: ${{ github.event.client_payload.base_ref || github.base_ref }}
          echo action: ${{ github.action }}
          echo event: ${{ github.event_name }}

      - uses: actions/checkout@v2
        name: Checkout
        with:
          ref: ${{ github.event.client_payload.ref || github.ref }}

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}

      - name: Get yarn cache directory
        id: yarn-cache-dir
        run: |
          echo "::set-output name=dir::$(yarn cache dir)"

      - uses: actions/cache@v2
        id: yarn-cache
        with:
          path: ${{ steps.yarn-cache-dir.outputs.dir }}
          key: ${{ matrix.os }}-${{ matrix.node-version }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ matrix.os }}-${{ matrix.node-version }}-yarn-

      - name: Install dependencies and build
        run: |
          yarn install --ignore-engines
          yarn build

      - name: Snyk security check
        if: matrix.node-version == env.PRIMARY_NODE_VERSION && matrix.os == env.PRIMARY_OS
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

      - name: Run types tests
        if: matrix.node-version == env.PRIMARY_NODE_VERSION && matrix.os == env.PRIMARY_OS
        run: |
          yarn test:tsd

      - name: Run unit tests with coverage
        if: matrix.node-version == env.PRIMARY_NODE_VERSION && matrix.os == env.PRIMARY_OS
        uses: paambaati/codeclimate-action@v2.7.5
        env:
          CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
        with:
          coverageCommand: yarn test:cover

      - name: Run unit tests
        if: "!(matrix.node-version == env.PRIMARY_NODE_VERSION && matrix.os == env.PRIMARY_OS)"
        run: yarn test:unit

  publish_version:
    name: Publish
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ ubuntu-latest ]
        node-version: [ 18.x ]
    needs: [ test ]
    if: github.event_name == 'release' && github.event.action == 'published'
    steps:

      - name: Checkout
        uses: actions/checkout@v2

      - name: fetch
        run: |
          git fetch --prune --unshallow

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
          registry-url: ${{ env.REGISTRY }}

      - name: Get yarn cache directory
        id: yarn-cache-dir
        run: |
          echo "::set-output name=dir::$(yarn cache dir)"

      - uses: actions/cache@v2
        id: yarn-cache
        with:
          path: ${{ steps.yarn-cache-dir.outputs.dir }}
          key: ${{ matrix.os }}-${{ matrix.node-version }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ matrix.os }}-${{ matrix.node-version }}-yarn-

      - name: Install dependencies and build
        run: |
          yarn install --ignore-engines
          yarn build

      - name: Publish
        uses: JS-DevTools/npm-publish@v1
        with:
          token: ${{ secrets.NPM_AUTH_TOKEN }}
          registry: ${{ env.REGISTRY }}