alxshelepenok/gatsby-starter-lumen

View on GitHub
.github/workflows/analyse.yml

Summary

Maintainability
Test Coverage
name: Analyse

on:
  pull_request:
    branches:
      - master

jobs:
  install:
    name: Install
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
        with:
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Cache npm
        uses: actions/cache@v4
        id: npm-cache
        with:
          path: ~/.npm
          key: npm-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
          restore-keys:
            npm-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
            npm-${{ runner.os }}-

      - name: Cache modules
        id: npm-modules-cache
        uses: actions/cache@v4
        with:
          path: node_modules
          key: npm-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
          restore-keys:
            npm-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
            npm-modules-${{ runner.os }}-

      - name: Install modules
        if: steps.npm-modules-cache.outputs.cache-hit != 'true'
        run: npm ci

  validate:
    name: Validate
    runs-on: ubuntu-latest
    needs: install
    steps:
      - name: Checkout
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
        with:
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Restore modules
        id: npm-modules-cache
        uses: actions/cache/restore@v4
        with:
          path: node_modules
          key: npm-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}

      - name: Install modules
        if: steps.npm-modules-cache.outputs.cache-hit != 'true'
        run: npm ci

      - name: Validate commits
        run: npm run lint:commit -- --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose

  build:
    name: Build
    runs-on: ubuntu-latest
    needs: install
    steps:
      - name: Checkout
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
        with:
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Restore modules
        id: npm-modules-cache
        uses: actions/cache/restore@v4
        with:
          path: node_modules
          key: npm-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}

      - name: Install modules
        if: steps.npm-modules-cache.outputs.cache-hit != 'true'
        run: npm ci

      - name: Run build
        run: npm run build

  lint:
    name: Lint
    runs-on: ubuntu-latest
    needs: install
    steps:
      - name: Checkout
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
        with:
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Restore modules
        id: npm-modules-cache
        uses: actions/cache/restore@v4
        with:
          path: node_modules
          key: npm-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}

      - name: Install modules
        if: steps.npm-modules-cache.outputs.cache-hit != 'true'
        run: npm ci

      - name: Run linting
        run: npm run lint

  test:
    name: Test
    runs-on: ubuntu-latest
    needs: install
    steps:
      - name: Checkout
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
        with:
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Restore modules
        id: npm-modules-cache
        uses: actions/cache/restore@v4
        with:
          path: node_modules
          key: npm-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}

      - name: Install modules
        if: steps.npm-modules-cache.outputs.cache-hit != 'true'
        run: npm ci

      - name: Run tests
        run: npm run test -- --coverage --runInBand --no-cache

      - name: Cache coverage
        id: coverage-cache
        uses: actions/cache/save@v4
        with:
          path: coverage
          key: coverage-${{ runner.os }}-${{hashFiles('coverage/lcov.info')}}

  coverage:
    name: Coverage
    runs-on: ubuntu-latest
    needs: test
    steps:
      - name: Checkout
        uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
        with:
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Restore modules
        id: npm-modules-cache
        uses: actions/cache/restore@v4
        with:
          path: node_modules
          key: npm-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}

      - name: Install modules
        if: steps.npm-modules-cache.outputs.cache-hit != 'true'
        run: npm ci

      - name: Restore coverage
        id: coverage-cache
        uses: actions/cache/restore@v4
        with:
          path: coverage
          key: coverage-${{ runner.os }}-${{hashFiles('coverage/lcov.info')}}
          restore-keys: coverage-${{ runner.os }}-

      - name: Send coverage report
        run: npx codecov