Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
37 changes: 37 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: CI

on:
pull_request:
branches: [main]
push:
branches: [main]
workflow_dispatch:

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: "3.13"
cache: "pip"
- name: Install dependencies
run: pip install -e ".[dev]"
- name: Check linting
run: ruff check .
- name: Check formatting
run: ruff format --check .

test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: "3.13"
cache: "pip"
- name: Install dependencies
run: pip install -e ".[dev]"
- name: Run tests
run: pytest tests/ --cov=haystack_integrations --cov-report=term-missing -v
89 changes: 89 additions & 0 deletions docs/plans/2026-03-18-project-infrastructure-design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Project Infrastructure Design

## Overview

Set up CI, Dependabot, and foundational project infrastructure for the `arcadedb-haystack` project hosted on GitHub under the `ArcadeData` org.

## Dependabot

**File:** `.github/dependabot.yml`

Two ecosystems, both on a weekly schedule targeting `main`:

- **pip** — monitors `pyproject.toml` for dependency updates
- **github-actions** — monitors workflow action versions (e.g., `actions/checkout`, `actions/setup-python`)

No auto-merge, no grouping, no reviewers. The ArcadeDB Docker image version is updated manually (not tracked by Dependabot).

## CI Workflow

**File:** `.github/workflows/ci.yml`

**Triggers:** pull request to main, push to main, `workflow_dispatch`

### Job 1: `lint`

- Runs on `ubuntu-latest`, Python 3.13
- Installs Ruff
- Runs `ruff check .` and `ruff format --check .`

### Job 2: `test`

- Runs on `ubuntu-latest`, Python 3.13
- Installs project with dev dependencies (`pip install -e .` + dev deps)
- Tests use `testcontainers` to spin up `arcadedata/arcadedb:26.3.1` with a readiness check on the HTTP API (`/api/v1/ready` on port 2480)
- Runs `pytest tests/` with coverage
- Docker is pre-installed on GitHub Actions runners

## File Changes

### New files

| File | Purpose |
|------|---------|
| `.github/dependabot.yml` | Dependabot configuration |
| `.github/workflows/ci.yml` | CI workflow with lint + test jobs |

### Modified files

| File | Change |
|------|--------|
| `pyproject.toml` | Add `testcontainers`, `docker`, and `ruff` to dev dependencies |
| `tests/test_document_store.py` | Refactor to use a `testcontainers` fixture (module-scoped) instead of requiring a pre-running ArcadeDB instance |

### Unchanged files

| File | Reason |
|------|--------|
| `tests/test_filters.py` | Pure unit tests, no ArcadeDB dependency |

## Testcontainers Fixture Pattern

Following the pattern from `e2e-python/tests/test_arcadedb.py`:

```python
from testcontainers.core.container import DockerContainer

ARCADEDB_IMAGE = "arcadedata/arcadedb:26.3.1"

arcadedb = (
DockerContainer(ARCADEDB_IMAGE)
.with_exposed_ports(2480)
.with_env("JAVA_OPTS", "-Darcadedb.server.rootPassword=arcadedb")
)

@pytest.fixture(scope="module", autouse=True)
def arcadedb_container():
arcadedb.start()
wait_for_http_endpoint(arcadedb, "/api/v1/ready", 2480, 204, timeout=30)
yield arcadedb
arcadedb.stop()
```

The `_store()` helper will resolve the URL from the container's mapped host/port.

## Out of Scope

- Release/publish workflow to PyPI (manual for now)
- Python version matrix (3.13 only)
- Docker image version tracking via Dependabot (manual updates)
Loading
Loading