name: CI Front
on:
  push:
    branches:
      - main
    paths:
      - 'package.json'
      - 'packages/twenty-front/**'
      - 'packages/twenty-ui/**'
  pull_request:
    paths:
      - 'package.json'
      - 'packages/twenty-front/**'
      - 'packages/twenty-ui/**'
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  front-sb-build:
    runs-on: ubuntu-latest
    env:
      REACT_APP_SERVER_BASE_URL: http://localhost:3000
      NX_REJECT_UNKNOWN_LOCAL_CACHE: 0
    steps:
      - name: Cancel Previous Runs
        uses: styfle/cancel-workflow-action@0.11.0
        with:
          access_token: ${{ github.token }}
      - name: Fetch local actions
        uses: actions/checkout@v4
      - name: Install dependencies
        uses: ./.github/workflows/actions/yarn-install
      - name: Front / Restore Storybook Task Cache
        uses: ./.github/workflows/actions/task-cache
        with:
          tag: scope:frontend
          tasks: storybook:build
      - name: Front / Write .env
        run: npx nx reset:env twenty-front
      - name: Front / Build storybook
        run: npx nx storybook:build twenty-front --configuration=test
  front-sb-test:
    runs-on: ci-8-cores
    needs: front-sb-build
    strategy:
      matrix:
        storybook_scope: [pages, modules]
    env:
      REACT_APP_SERVER_BASE_URL: http://localhost:3000
      NX_REJECT_UNKNOWN_LOCAL_CACHE: 0
    steps:
      - name: Fetch local actions
        uses: actions/checkout@v4
      - name: Install dependencies
        uses: ./.github/workflows/actions/yarn-install
      - name: Install Playwright
        run: cd packages/twenty-front && npx playwright install
      - name: Front / Restore Storybook Task Cache
        uses: ./.github/workflows/actions/task-cache
        with:
          tag: scope:frontend
          tasks: storybook:build
      - name: Front / Write .env
        run: npx nx reset:env twenty-front
      - name: Run storybook tests
        run: npx nx storybook:static:test twenty-front --configuration=${{ matrix.storybook_scope }}
  front-sb-test-performance:
    runs-on: ci-8-cores
    env:
      REACT_APP_SERVER_BASE_URL: http://localhost:3000
      NX_REJECT_UNKNOWN_LOCAL_CACHE: 0
    steps:
      - name: Fetch local actions
        uses: actions/checkout@v4
      - name: Install dependencies
        uses: ./.github/workflows/actions/yarn-install
      - name: Install Playwright
        run: cd packages/twenty-front && npx playwright install
      - name: Front / Write .env
        run: npx nx reset:env twenty-front
      - name: Run storybook tests
        run: npx nx storybook:performance:test twenty-front
  front-chromatic-deployment:
    if: contains(github.event.pull_request.labels.*.name, 'run-chromatic') || github.event_name == 'push'
    needs: front-sb-build
    runs-on: ubuntu-latest
    env:
      REACT_APP_SERVER_BASE_URL: http://127.0.0.1:3000
      CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
      NX_REJECT_UNKNOWN_LOCAL_CACHE: 0
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Install dependencies
        uses: ./.github/workflows/actions/yarn-install
      - name: Front / Restore Storybook Task Cache
        uses: ./.github/workflows/actions/task-cache
        with:
          tag: scope:frontend
          tasks: storybook:build
      - name: Front / Write .env
        run: |
          cd packages/twenty-front
          touch .env
          echo "REACT_APP_SERVER_BASE_URL: $REACT_APP_SERVER_BASE_URL" >> .env
      - name: Publish to Chromatic
        run: npx nx run twenty-front:chromatic:ci
  front-task:
    runs-on: ubuntu-latest
    env:
      NX_REJECT_UNKNOWN_LOCAL_CACHE: 0
    strategy:
      matrix:
        task: [lint, typecheck, test]
    steps:
      - name: Cancel Previous Runs
        uses: styfle/cancel-workflow-action@0.11.0
        with:
          access_token: ${{ github.token }}
      - name: Fetch custom Github Actions and base branch history
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Install dependencies
        uses: ./.github/workflows/actions/yarn-install
      - name: Front / Restore ${{ matrix.task }} task cache
        uses: ./.github/workflows/actions/task-cache
        with:
          tag: scope:frontend
          tasks: ${{ matrix.task }}
      - name: Reset .env
        uses: ./.github/workflows/actions/nx-affected
        with:
          tag: scope:frontend
          tasks: reset:env
      - name: Run ${{ matrix.task }} task
        uses: ./.github/workflows/actions/nx-affected
        with:
          tag: scope:frontend
          tasks: ${{ matrix.task }}