Xlorep DarkHelm 1f6cafa1bc
Some checks failed
CICD Start / Sanity and Base Decision (push) Failing after 11m34s
Renovate Dependency Updates / Renovate Dependencies (push) Failing after 10m12s
TASK: Replace integration lane with post-build backend runtime black-box tests (#72)
## Summary

Replace the existing source-context integration lane with backend runtime black-box integration checks that run against started deployable containers.

This change wires deployable backend image references (both commit tag and immutable digest) from the build workflow into the tests workflow, then validates runtime behavior over network endpoints.

## Why

Integration confidence should come from testing running service artifacts, not only source-mounted or in-process execution.

## What Changed

- Build workflow now:
  - Publishes deployable backend image tag reference and digest reference
  - Exposes both as job outputs
  - Passes both references into CICD Tests dispatch inputs

- CICD Tests workflow now:
  - Accepts deployable backend tag and digest inputs
  - Propagates these through setup outputs
  - Replaces previous integration lane behavior with runtime black-box execution:
    - Starts isolated Docker network
    - Starts Postgres container
    - Starts backend container from digest-pinned deployable image
    - Enforces tag-to-digest consistency before running checks
    - Runs endpoint checks against live container:
      - GET /
      - GET /compatibility
      - GET /health
    - Captures backend/db logs and container state on failure
    - Cleans up containers and network via trap

- Documentation updated:
  - Runtime contract enforcement section now includes runtime black-box integration checks
  - CI success summary now reflects runtime integration lane behavior

## Scope

Included:
- Backend runtime black-box integration replacement for the existing integration lane
- Digest + tag identity enforcement
- Failure diagnostics for triage

Out of scope:
- Frontend runtime smoke checks
- E2E lane redesign

## Acceptance Criteria Mapping

- Integration tests execute against runtime container endpoints: 
- Integration lane consumes built image references (not source-mounted execution): 
- Failures surface service logs and test logs for triage: 

## Verification

- Workflow files pass local validation checks
- Pre-commit hooks pass on committed changes
- Branch pushed and ready for PR review

## Related

- Issue: #61
- Dependency context: #66

Co-authored-by: copilotcoder <copilotcoder@darkhelm.org>
Reviewed-on: #72
2026-07-05 22:48:57 -04:00
2025-10-18 09:14:10 -04:00
2025-10-28 09:30:12 -04:00
2025-10-18 09:14:10 -04:00

Plex Playlist Project

A full-stack application for managing Plex playlists with a FastAPI backend and Vue.js frontend.

Architecture

  • Backend: Python 3.14 + FastAPI + uv + ruff
  • Frontend: TypeScript + Vue.js + Vite
  • Database: PostgreSQL 16
  • Containerization: Docker + Docker Compose

Deployable Runtime Contract

Deployable image requirements are defined in:

These documents define backend/frontend runtime boundaries, startup and health behavior expectations, environment contracts, and disallowed non-runtime tooling classes in deployable artifacts.

Development Setup

Prerequisites

  • Docker and Docker Compose
  • Git
  • pre-commit (for development)

Code Quality Tools

This project uses comprehensive linting and formatting:

Backend (Python):

  • ruff - Fast Python linter and formatter
  • pyright - Type checking
  • pydoclint - Docstring linting (Google style)

Frontend (TypeScript/Vue):

  • eslint - Linting with Vue and TypeScript support
  • prettier - Code formatting
  • vue-tsc - Vue TypeScript checking
  • eslint-plugin-tsdoc - TSDoc documentation linting

Task Runner:

  • poethepoet - Unified task runner for development workflows

General:

  • pre-commit - Git hooks for automated quality checks
  • TOML formatting and validation

Unified Development with Poe

This project uses Poe the Poet for streamlined development:

# Complete setup (installs deps, starts dev environment)
poe setup

# Code quality (format, lint, type-check all code)
poe ci-quick

# Run all tests
poe test-all

# See all available tasks
poe --help

Manual Setup (Alternative)

pip install pre-commit
pre-commit install

Quick Start

Clone the repository, then choose one of these startup paths.

Unified Development

# Complete setup and start development environment
poe setup

# Or manually:
cd backend
pip install -e .
poe dev-env-start

Traditional Setup

# Backend development
cd backend
pip install -e .

# Frontend development
cd frontend
npm install
npm run dev

Docker Development

# Using Poe (recommended)
poe docker-dev-up

# Or directly
docker compose -f compose.dev.yml up --build

Production Build

poe docker-prod-up
# Or: docker compose up --build

Running in Production Mode

docker compose up --build -d

This will start:

  • PostgreSQL database on port 5432
  • FastAPI backend on port 8000
  • Vue.js frontend on port 80

Project Structure

plex-playlist/
├── backend/                 # FastAPI backend
├── frontend/               # Vue.js frontend
│   └── nginx.conf          # Nginx configuration
├── Dockerfile.backend      # Backend Docker image
├── Dockerfile.frontend     # Frontend Docker image
├── compose.yml             # Production Docker Compose
├── compose.dev.yml         # Development Docker Compose override
└── README.md

CI Operations

For Gitea Actions runner image mirror maintenance, use:

  • source scripts/gitea-actions/repair_runner_mirror.xsh
  • source scripts/gitea-actions/check_runner_images.xsh
  • source scripts/gitea-actions/collect_runner_diagnostics.xsh [since] [trace_id]

For full troubleshooting context, see docs/GITEA_ACTIONS_TROUBLESHOOTING.md.

Environment Variables

Backend

  • DATABASE_URL: PostgreSQL connection string
  • BACKEND_REQUIRED_PYTHON: Runtime policy baseline (3.14 default)
  • ENVIRONMENT: development or production
  • RELOAD: Enable uvicorn auto-reload (development only)

Frontend

  • No required runtime environment variables for production nginx serving

Database

The PostgreSQL database is configured with:

  • Database: plex_playlist
  • User: plex_user
  • Password: plex_password

Development Workflow

  1. Make changes to your code
  2. The development containers will automatically reload:
    • Backend: uvicorn with --reload flag
    • Frontend: Vite dev server with hot module replacement

API Documentation

When running, the FastAPI automatic documentation is available at:


Manual Setup (if not using Docker)

Backend Setup (FastAPI, Python 3.14, uv, ruff, pyright)

1. Create and activate the uv virtual environment

cd backend
uv venv .venv
source .venv/bin/activate

2. Install dependencies

uv sync --all-groups

3. Install dev tools

uv run poe format
uv run poe lint
uv run poe test

4. Project structure

  • src/backend/ - FastAPI application code
  • tests/ - Test suite
  • pyrightconfig.json - Pyright type checking config
  • pyproject.toml - Ruff, pytest, and task configuration

5. Run the development server

uv run uvicorn backend.main:app --reload --app-dir src

Frontend Setup (Vue 3, Vite, TypeScript)

1. Create the project

cd frontend
npm create vite@latest . -- --template vue-ts
npm install

Edit tsconfig.json and set:

{
  "compilerOptions": {
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictBindCallApply": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true
  }
}

3. Run the frontend

npm run dev

Documentation

Development & Workflow

Architecture & CI/CD

  • CI/CD Multi-stage Build
    • Docker multi-stage build strategy, architecture decisions, and performance optimizations
  • CI/CD Troubleshooting Guide
    • Comprehensive troubleshooting, optimization decisions, and performance monitoring for Docker builds and E2E testing
  • CI/CD Success Summary
    • Complete validation results and performance metrics for the optimized pipeline

Dependency Management & Automation

  • Renovate Bot Setup
    • Automated dependency updates with Renovate for Python, Node.js, and Docker dependencies

Operations & Troubleshooting

See the backend/ and frontend/ folders for more details.

Description
This is my completely remade (again) version of my daily playlist generator.
Readme 3.5 MiB
Languages
Xonsh 41.4%
Shell 24.5%
Python 19.7%
TypeScript 11.8%
JavaScript 2.1%
Other 0.5%