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
203 changes: 203 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
name: ci

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

permissions:
contents: read

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

jobs:
lint:
name: Lint
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true

- name: Install dependencies
run: uv pip install --system -e ".[dev]"

- name: Run linter
run: make lint

format-check:
name: Format Check
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true

- name: Install dependencies
run: uv pip install --system -e ".[dev]"

- name: Check formatting
run: make format-check

type-check:
name: Type Check
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true

- name: Install dependencies
run: uv pip install --system -e ".[dev]"

- name: Run type checker
run: make type-check

test:
name: Test
runs-on: ubuntu-24.04
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true

- name: Install dependencies
run: uv pip install --system -e ".[dev]"

- name: Run tests
run: make test

config-validation:
name: Config Validation
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true

- name: Install dependencies
run: uv pip install --system -e ".[dev]"

- name: Run config validation tests
run: make validate-config

migration-check:
name: Migration Check
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true

- name: Install dependencies
run: uv pip install --system -e ".[dev]"

- name: Run migration tests
run: make validate-migrations

collector-check:
name: Collector Check
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true

- name: Install dependencies
run: uv pip install --system -e ".[dev]"

- name: Run collector tests
run: make validate-collectors

quality:
name: Quality Gate
runs-on: ubuntu-24.04
needs: [lint, format-check, type-check, test, config-validation, migration-check, collector-check]
if: always()
steps:
- name: Check all jobs passed
run: |
if [[ "${{ needs.lint.result }}" != "success" || \
"${{ needs.format-check.result }}" != "success" || \
"${{ needs.type-check.result }}" != "success" || \
"${{ needs.test.result }}" != "success" || \
"${{ needs.config-validation.result }}" != "success" || \
"${{ needs.migration-check.result }}" != "success" || \
"${{ needs.collector-check.result }}" != "success" ]]; then
echo "::error::One or more quality checks failed"
exit 1
fi
echo "✓ All quality checks passed"
18 changes: 17 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: help install install-dev sync lint format format-check type-check test test-unit test-integration test-cov clean quality dev-setup dev-check
.PHONY: help install install-dev sync lint format format-check type-check test test-unit test-integration test-cov clean quality dev-setup dev-check validate-config validate-migrations validate-collectors validate-all

# Set PYTHONPATH for all targets (handle empty PYTHONPATH case)
export PYTHONPATH := $(PWD)/src$(if $(PYTHONPATH),:$(PYTHONPATH),)
Expand Down Expand Up @@ -84,3 +84,19 @@ dev-check: ## Quick check before committing
@make lint
@make type-check
@make test-unit

# Validation tests for CI
validate-config: ## Run config validation tests
@echo "Running config validation tests..."
pytest tests/validation/test_config_validation.py -v

validate-migrations: ## Run migration validation tests
@echo "Running migration validation tests..."
pytest tests/validation/test_migrations.py -v

validate-collectors: ## Run collector validation tests
@echo "Running collector validation tests..."
pytest tests/validation/test_collectors.py -v

validate-all: validate-config validate-migrations validate-collectors ## Run all validation tests
@echo "✓ All validation tests passed"
4 changes: 1 addition & 3 deletions migrations/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,7 @@ def run_migrations_online() -> None:
)

with connectable.connect() as connection:
context.configure(
connection=connection, target_metadata=target_metadata
)
context.configure(connection=connection, target_metadata=target_metadata)

with context.begin_transaction():
context.run_migrations()
Expand Down
Loading
Loading