name: "CI"
on:
  pull_request:
  push:
    branches:
      - main

jobs:

  Test:
    if: "!contains(github.event.head_commit.message, '[skip ci]')"
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
      - name: Install Node
        uses: dcodeIO/setup-node-nvm@master
        with:
          node-version: 'lts/*'
      - name: Install Dependencies
        run: npm ci
      - name: Run Tests 👩🏽‍💻
        run: npm run test

  Coverage:
    if: "!contains(github.event.head_commit.message, '[skip ci]')"
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
      - name: Install Node
        uses: dcodeIO/setup-node-nvm@master
        with:
          node-version: 'lts/*'
      - name: Install Dependencies
        run: npm ci
      - name: Run Tests 👩🏽‍💻
        run: npm run test:cover

  Lint:
    if: "!contains(github.event.head_commit.message, '[skip ci]')"
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
      - name: Install Dependencies
        run: npm ci
      - name: Lint ✨
        run: npm run lint

  Release:
    needs: [Test, Lint]
    if: |
      github.ref == 'refs/heads/main' &&
      github.event.repository.fork == false
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
      - name: Install Node
        uses: dcodeIO/setup-node-nvm@master
        with:
          node-version: 'lts/*'
      - name: Install Dependencies
        run: npm ci
      - name: Build 🗜️
        run: |
          npm run build
          if ! git diff --quiet; then
            git config --global user.email "<>"
            git config --global user.name "CI Build"
            git commit -am "🗜️ build [skip ci]"
          fi
      - name: Release 🎉
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
        run: npx semantic-release
