name: CI

on:
  push:
    branches:
      - "master"
  pull_request:
    branches:
      - "*"

defaults:
  run:
    shell: bash

env:
  # go needs absolute directories, using the $HOME variable doesn't work here.
  GOCACHE: /home/runner/work/go/pkg/build
  GOPATH: /home/runner/work/go
  GO111MODULE: on

  # If you change this value, please change it in the following files as well:
  # /Dockerfile
  GO_VERSION: 1.26
  LITD_ITEST_BRANCH: master

jobs:
  ########################
  # RPC compile and check
  ########################
  rpc-check:
    name: RPC compilation check
    runs-on: ubuntu-latest
    steps:
      - name: git checkout
        uses: actions/checkout@v4

      - name: setup go ${{ env.GO_VERSION }}
        uses: actions/setup-go@v2
        with:
          go-version: '~${{ env.GO_VERSION }}'

      - name: RPC for JS compilation
        run: make rpc-js-compile

      - name: run check
        run: make rpc-check

  ########################
  # SQL compile and check
  ########################
  sqlc-check:
    name: SQL compilation check
    runs-on: ubuntu-latest
    steps:
      - name: git checkout
        uses: actions/checkout@v4

      - name: setup go ${{ env.GO_VERSION }}
        uses: actions/setup-go@v2
        with:
          go-version: '~${{ env.GO_VERSION }}'

      - name: run check
        run: make sqlc-check

  ########################
  # go mod check
  ########################
  mod-check:
    name: go mod check
    runs-on: ubuntu-latest
    steps:
      - name: git checkout
        uses: actions/checkout@v4

      - name: setup go ${{ env.GO_VERSION }}
        uses: actions/setup-go@v2
        with:
          go-version: '~${{ env.GO_VERSION }}'

      - name: run check
        run: make mod-check

  ########################
  # build and lint code
  ########################
  lint:
    name: build and lint code
    runs-on: ubuntu-latest
    steps:
      - name: git checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: setup go ${{ env.GO_VERSION }}
        uses: actions/setup-go@v5
        with:
          go-version: '~${{ env.GO_VERSION }}'

      - name: build
        run: make build tags=dev

      - name: lint
        run: make lint

  ########################
  # Verify documentation
  ########################
  docs-check:
    name: verify that auto-generated documentation is up-to-date
    runs-on: ubuntu-latest
    steps:
      - name: git checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: setup go ${{ env.GO_VERSION }}
        uses: actions/setup-go@v5
        with:
          go-version: '~${{ env.GO_VERSION }}'

      - name: check
        run: make docs-check

      - name: check generated FSM diagrams
        run: make fsm-check

  ########################
  # run unit-test sqlite3 race
  ########################
  unit-test:
    name: run unit-test sqlite3 race
    runs-on: ubuntu-latest
    steps:
      - name: git checkout
        uses: actions/checkout@v4

      - name: setup go ${{ env.GO_VERSION }}
        uses: actions/setup-go@v5
        with:
          go-version: '~${{ env.GO_VERSION }}'

      - name: run unit-test sqlite3 race
        run: make unit-race

  ########################
  # run unit-test postgres race
  ########################
  unit-test-postgres:
    name: run unit-test postgres race
    runs-on: ubuntu-latest
    steps:
      - name: git checkout
        uses: actions/checkout@v4

      - name: setup go ${{ env.GO_VERSION }}
        uses: actions/setup-go@v5
        with:
          go-version: '~${{ env.GO_VERSION }}'

      - name: run unit-test postgres race
        run: make unit-postgres-race

  ########################
  # Run LiTd tests
  ########################
  run-lit-itests:
    name: run LiT itests
    runs-on: ubuntu-latest
    continue-on-error: true

    steps:
      - name: git checkout
        uses: actions/checkout@v4

      - name: Prepare LiT workspace
        uses: ./.github/actions/lit-setup

      - name: Run LiT itests
        working-directory: ./lightning-terminal
        run: make itest icase='terminal .*'

  ########################
  # Run LiTd unit tests
  ########################
  run-lit-unit:
    name: run LiT unit tests
    runs-on: ubuntu-latest
    continue-on-error: true

    steps:
      - name: git checkout
        uses: actions/checkout@v4

      - name: Prepare LiT workspace
        uses: ./.github/actions/lit-setup

      - name: Run LiT unit tests
        working-directory: ./lightning-terminal
        run: make unit
