Ctrl K
ComunidadGuías…

Taskfile.yml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
version: '3'

vars:
  BUILD_MODE: '{{.BUILD_MODE | default "dev"}}'
  PG_VERSION: 18
  POSTGRES_SOURCE: "cpp/.ext/postgres-REL_{{.PG_VERSION}}_0"
  POSTGRES_INSTALL: "{{.POSTGRES_SOURCE}}/install"
  POSTGRES_DATA: "{{.POSTGRES_SOURCE}}/data"
  POSTGRES_LOG: "postgres/tests/taskfile_server.log"
  BUILD_DIR: "builds/deeplake-pg-{{.BUILD_MODE}}"
  USER:
    sh: echo ${USER:-postgres}

tasks:
  build:
    desc: "Build the pg_deeplake PostgreSQL extension (incremental)"
    cmds:
      - python3 scripts/build_pg_ext.py

  "build:dev":
    desc: "Full build in dev mode"
    cmds:
      - python3 scripts/build_pg_ext.py dev

  "build:prod":
    desc: "Full build in production mode"
    cmds:
      - python3 scripts/build_pg_ext.py prod

  "build:debug":
    desc: "Full build in debug mode"
    cmds:
      - python3 scripts/build_pg_ext.py debug

  lint:
    desc: "Run clang-tidy linter on cpp/deeplake_pg"
    deps:
      - build
    cmds:
      - bash scripts/run_clang_tidy.sh {{.BUILD_DIR}}

  "lint:file":
    desc: "Run clang-tidy on a specific file"
    dir: cpp/deeplake_pg
    cmds:
      - |
        if [ -z "{{.FILE}}" ]; then
          echo "Error: Please specify FILE parameter"
          echo "Usage: task lint:file FILE=table_am.cpp"
          exit 1
        fi
        clang-tidy -p "../../{{.BUILD_DIR}}" "{{.FILE}}"

  test:
    desc: "Run PostgreSQL extension tests (Python pytest)"
    dir: postgres/tests/py_tests
    cmds:
      - pytest -v {{.CLI_ARGS}}

  "test:parallel":
    desc: "Run tests in parallel using pytest-xdist"
    dir: postgres/tests/py_tests
    cmds:
      - pytest -v -n auto {{.CLI_ARGS}}

  "test:coverage":
    desc: "Run tests with coverage report"
    dir: postgres/tests/py_tests
    cmds:
      - pytest -v --cov=. --cov-report=html --cov-report=term {{.CLI_ARGS}}
      - echo "Coverage report generated in postgres/tests/py_tests/htmlcov/index.html"

  "test:single":
    desc: "Run a single test file"
    dir: postgres/tests/py_tests
    cmds:
      - |
        if [ -z "{{.TEST}}" ]; then
          echo "Error: Please specify TEST parameter"
          echo "Usage: task test:single TEST=test_basic_ops.py"
          exit 1
        fi
        pytest -v "{{.TEST}}" {{.CLI_ARGS}}

  run:
    desc: "Start PostgreSQL server with pg_deeplake extension loaded"
    deps:
      - build
    cmds:
      - |
        echo "Starting PostgreSQL server with pg_deeplake extension..."

        PG_CTL="{{.POSTGRES_INSTALL}}/bin/pg_ctl"
        INITDB="{{.POSTGRES_INSTALL}}/bin/initdb"
        PSQL="{{.POSTGRES_INSTALL}}/bin/psql"
        DATA_DIR="{{.POSTGRES_DATA}}"
        INSTALL_DIR="{{.POSTGRES_INSTALL}}"
        LOG_FILE="{{.POSTGRES_LOG}}"

        if [ -f "$DATA_DIR/postmaster.pid" ]; then
          echo "PostgreSQL server appears to be running. Use 'task stop' to stop it first."
          exit 1
        fi

        if [ ! -d "$DATA_DIR" ]; then
          echo "Initializing PostgreSQL database cluster..."
          "$INITDB" -D "$DATA_DIR" -U "{{.USER}}"

          echo "shared_preload_libraries = 'pg_deeplake'" >> "$DATA_DIR/postgresql.conf"
          echo "max_connections = 100" >> "$DATA_DIR/postgresql.conf"
        fi

        echo "Installing pg_deeplake extension files..."
        EXT_DIR="$INSTALL_DIR/share/extension"
        LIB_DIR="$INSTALL_DIR/lib"
        mkdir -p "$EXT_DIR"

        cp postgres/*.control "$EXT_DIR/" 2>/dev/null || true
        cp postgres/*.sql "$EXT_DIR/" 2>/dev/null || grep -v "utils.psql" || true
        cp postgres/pg_deeplake_{{.PG_VERSION}}.so "$LIB_DIR/pg_deeplake.so" 2>/dev/null || true

        export LD_LIBRARY_PATH="$LIB_DIR:${LD_LIBRARY_PATH:-}"

        echo "Starting PostgreSQL server..."
        "$PG_CTL" -D "$DATA_DIR" -l "$LOG_FILE" start

        sleep 2

        echo "Creating pg_deeplake extension..."
        "$PSQL" -U "{{.USER}}" -d postgres -c "CREATE EXTENSION IF NOT EXISTS pg_deeplake;"

        echo ""
        echo "✓ PostgreSQL server is running with pg_deeplake extension loaded"
        echo ""
        echo "Connection details:"
        echo "  Host: localhost"
        echo "  Database: postgres"
        echo "  User: {{.USER}}"
        echo ""
        echo "Connect with: psql -U {{.USER}} -d postgres"
        echo "Stop server with: task stop"
        echo "View logs: tail -f {{.POSTGRES_LOG}}"

  stop:
    desc: "Stop the PostgreSQL server"
    cmds:
      - |
        PG_CTL="{{.POSTGRES_INSTALL}}/bin/pg_ctl"
        DATA_DIR="{{.POSTGRES_DATA}}"

        if [ ! -f "$DATA_DIR/postmaster.pid" ]; then
          echo "PostgreSQL server is not running"
          exit 0
        fi

        echo "Stopping PostgreSQL server..."
        "$PG_CTL" -D "$DATA_DIR" stop -m fast
        echo "✓ PostgreSQL server stopped"

  status:
    desc: "Check PostgreSQL server status"
    cmds:
      - |
        PG_CTL="{{.POSTGRES_INSTALL}}/bin/pg_ctl"
        DATA_DIR="{{.POSTGRES_DATA}}"

        "$PG_CTL" -D "$DATA_DIR" status || echo "PostgreSQL server is not running"

  clean:
    desc: "Clean build artifacts and test outputs"
    cmds:
      - rm -rf builds/
      - rm -rf postgres/tests/logs/*
      - rm -rf postgres/tests/results/*
      - rm -rf postgres/tests/py_tests/htmlcov/
      - rm -rf postgres/tests/py_tests/.pytest_cache/
      - rm -rf postgres/tests/py_tests/.coverage
      - find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
      - echo "✓ Cleaned build artifacts and test outputs"

  "clean:db":
    desc: "Clean PostgreSQL data directory"
    cmds:
      - task: stop
      - rm -rf "{{.POSTGRES_DATA}}"
      - echo "✓ PostgreSQL data directory cleaned"

  dev:
    desc: "Full development workflow (build, lint, test)"
    cmds:
      - task: build
      - task: lint
      - task: test

  help:
    desc: "Show available tasks"
    cmds:
      - task --list