name: Run Tests on: push: branches: [ main, master, develop, claude/** ] pull_request: branches: [ main, master, develop ] # Cancel in-progress runs when a new commit is pushed concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python 3.13 uses: actions/setup-python@v5 with: python-version: '3.13' cache: 'pip' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install -r requirements-test.txt - name: Run unit tests run: | pytest tests/unit/ -v --tb=short --cov=. --cov-report=term-missing env: SQLALCHEMY_DATABASE_URI: "sqlite:///:memory:" TESTING: "1" MODEL_ENDPOINT_0: "https://hermes.ai.unturf.com/v1" MODEL_API_KEY_0: "dummy" - name: Run functional tests run: | pytest tests/functional/ -v --tb=short env: SQLALCHEMY_DATABASE_URI: "sqlite:///:memory:" TESTING: "1" MODEL_ENDPOINT_0: "https://hermes.ai.unturf.com/v1" MODEL_API_KEY_0: "dummy" - name: Run integration tests run: | pytest tests/integration/ -v --tb=short env: SQLALCHEMY_DATABASE_URI: "sqlite:///:memory:" TESTING: "1" MODEL_ENDPOINT_0: "https://hermes.ai.unturf.com/v1" MODEL_API_KEY_0: "dummy" - name: Validate activity YAML files run: | python activity_yaml_validator.py research/SPEC.yaml python activity_yaml_validator.py research/activity*.yaml lint: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python 3.13 uses: actions/setup-python@v5 with: python-version: '3.13' cache: 'pip' - name: Install linting dependencies run: | python -m pip install --upgrade pip pip install black flake8 - name: Check code formatting with black run: | black --check --diff --exclude=venv . continue-on-error: true - name: Lint with flake8 (syntax errors) run: | # Stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude=venv - name: Lint with flake8 (style warnings) run: | # Exit-zero treats all errors as warnings flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics --exclude=venv continue-on-error: true