name: Continuous integration

on:
  pull_request: null
  push:
    branches:
      - main

jobs:
  lint:
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Use node.js 14.15
        uses: actions/setup-node@v1
        with:
          node-version: 14.15
      - run: npm ci
      - run: npm run lint

  unit-tests:
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Use node.js 14.15
        uses: actions/setup-node@v1
        with:
          node-version: 14.15
      - run: npm ci
      - run: npm run test:ci
      - name: Publish coverage
        uses: codecov/codecov-action@v1
        with:
          file: ./coverage/clover.xml

  mutation-tests:
    continue-on-error: true
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 0 # needed so that the main branch is also fetched
      - name: Use node.js 14.15
        uses: actions/setup-node@v1
        with:
          node-version: 14.15
      - run: npm ci
      - run: npm run mutate -- --mutate=$(git diff origin/main --name-only | grep -E 'src\/(.*).(ts|tsx)$' | paste -sd ",")

  build-docker-image:
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - run: docker build -t shlink-web-client:test .
