Files
roboco/.github/workflows/ci.yml
T
Renn F a03fbc375e ci: use a valid Fernet key in the Python gate env
The committed ROBOCO_ENCRYPTION_KEY was 43 chars — not a valid Fernet key —
so the security/crypto tests failed with 'Fernet key must be 32 url-safe
base64-encoded bytes' (Incorrect padding) on every PR and on master. Replace
it with a valid generated test-only key.
2026-06-12 04:09:29 +02:00

142 lines
3.4 KiB
YAML

name: CI
on:
push:
branches:
- master
paths:
- 'roboco/**'
- 'agents/**'
- 'alembic/**'
- 'tests/**'
- 'scripts/**'
- 'docker/**'
- 'docker-compose.yml'
- 'Makefile'
- 'pyproject.toml'
- 'uv.lock'
- 'alembic.ini'
- 'panel/**'
- '.github/workflows/ci.yml'
pull_request:
branches:
- master
paths:
- 'roboco/**'
- 'agents/**'
- 'alembic/**'
- 'tests/**'
- 'scripts/**'
- 'docker/**'
- 'docker-compose.yml'
- 'Makefile'
- 'pyproject.toml'
- 'uv.lock'
- 'alembic.ini'
- 'panel/**'
- '.github/workflows/ci.yml'
workflow_dispatch:
jobs:
quality:
name: Python quality gate
runs-on: ubuntu-latest
services:
postgres:
image: pgvector/pgvector:pg16
env:
POSTGRES_USER: roboco
POSTGRES_PASSWORD: roboco
POSTGRES_DB: roboco
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U roboco"
--health-interval 10s
--health-timeout 5s
--health-retries 5
redis:
image: redis:7
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
# Runtime settings (roboco.config.Settings reads ROBOCO_*).
ROBOCO_DATABASE_HOST: localhost
ROBOCO_DATABASE_PORT: '5432'
ROBOCO_DATABASE_USER: roboco
ROBOCO_DATABASE_PASSWORD: roboco
ROBOCO_DATABASE_NAME: roboco
ROBOCO_REDIS_HOST: localhost
ROBOCO_REDIS_PORT: '6379'
# Fernet key required by the security layer (utils/crypto). Test-only —
# a valid generated key (the previous value was 43 chars, not a real
# Fernet key, so encryption tests failed with "Incorrect padding").
ROBOCO_ENCRYPTION_KEY: 'yp3Awiv0zmxpRa6Gi9Y9hJbi4pZ2FXHRNr4EI6-Gx9U='
# The pytest harness (tests/conftest.py) provisions its own ephemeral
# databases via an admin connection to the `postgres` DB and reads a
# separate ROBOCO_TEST_DB_* set. The pgvector image's POSTGRES_USER is a
# superuser, so it can CREATE/DROP DATABASE and enable the vector extension.
ROBOCO_TEST_DB_HOST: localhost
ROBOCO_TEST_DB_PORT: '5432'
ROBOCO_TEST_DB_USER: roboco
ROBOCO_TEST_DB_PASSWORD: roboco
ROBOCO_TEST_DB_ADMIN_DB: postgres
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.13'
- name: Install uv
run: pip install uv
- name: Install dependencies
run: uv sync --extra dev
- name: Apply database migrations
run: uv run alembic upgrade head
- name: Run quality gate
run: make quality
panel:
name: Panel (Next.js)
runs-on: ubuntu-latest
defaults:
run:
working-directory: panel
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: '20'
- name: Enable corepack (pnpm)
run: corepack enable
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Lint
run: pnpm lint
- name: Type-check
run: pnpm exec tsc --noEmit