name: Build and Lint on Pull Request

on:
  workflow_dispatch:
  pull_request:
    types: ["opened", "synchronize"]

jobs:
  get-changed-files:
    runs-on: ubuntu-latest
    outputs:
      apiserver_changed: ${{ steps.changed-files.outputs.apiserver_any_changed }}
      web_changed: ${{ steps.changed-files.outputs.web_any_changed }}
      space_changed: ${{ steps.changed-files.outputs.deploy_any_changed }}
    steps:
      - uses: actions/checkout@v3
      - name: Get changed files
        id: changed-files
        uses: tj-actions/changed-files@v41
        with:
          files_yaml: |
            apiserver:
              - apiserver/**
            web:
              - web/**
              - packages/**
              - 'package.json'
              - 'yarn.lock'
              - 'tsconfig.json'
              - 'turbo.json'
            deploy:
              - space/**
              - packages/**
              - 'package.json'
              - 'yarn.lock'
              - 'tsconfig.json'
              - 'turbo.json'

  lint-apiserver:
    needs: get-changed-files
    runs-on: ubuntu-latest
    if: needs.get-changed-files.outputs.apiserver_changed == 'true'
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.x' # Specify the Python version you need
      - name: Install Pylint
        run: python -m pip install ruff
      - name: Install Apiserver Dependencies
        run: cd apiserver && pip install -r requirements.txt
      - name: Lint apiserver
        run: ruff check --fix apiserver

  lint-web:
    needs: get-changed-files
    if: needs.get-changed-files.outputs.web_changed == 'true'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 18.x
      - run: yarn install
      - run: yarn lint --filter=web

  lint-space:
    needs: get-changed-files
    if: needs.get-changed-files.outputs.space_changed == 'true'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 18.x
      - run: yarn install
      - run: yarn lint --filter=space

  build-web:
    needs: lint-web
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 18.x
      - run: yarn install
      - run: yarn build --filter=web

  build-space:
    needs: lint-space
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 18.x
      - run: yarn install
      - run: yarn build --filter=space
