name: Lint Code Base and Measure Performance

on: [push, pull_request]

jobs:
  lint-python:
    name: Lint Python
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v3
        with:
          python-version: '3.x'

      - name: Lint Python Files
        run: |
          pip install flake8
          flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
          flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics

  lint-javascript:
    name: Lint JavaScript
    runs-on: ubuntu-latest
    needs: lint-python

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'

      - name: Lint JavaScript Files
        run: |
          npm install
          npm run lint

  lint-typescript:
    name: Lint TypeScript
    runs-on: ubuntu-latest
    needs: lint-javascript

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'

      - name: Lint TypeScript Files
        run: |
          npm install
          npm run lint

  lint-rust:
    name: Lint Rust
    runs-on: ubuntu-latest
    needs: lint-typescript

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

      - name: Set up Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true

      - name: Lint Rust Files
        run: |
          for dir in Day*/rust; do
            if [ -d "$dir" ]; then
              echo "Linting $dir"
              cd $dir
              cargo clippy -- -D warnings
              cd -  # Go back to the root directory
            fi
          done

  measure_performance:
    name: Measure Performance
    runs-on: ubuntu-latest
    needs: [lint-python, lint-javascript, lint-typescript, lint-rust]
    timeout-minutes: 15  # Timeout set to 15 minutes

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2

      - name: Run Performance Measurement Script
        run: |
          chmod +x ./measure_performance.sh
          ./measure_performance.sh

      - name: Upload Analytics.md
        uses: actions/upload-artifact@v2
        with:
          name: Analytics
          path: Analytics.md