feat(media): compose profile and CI job for the media sidecar

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0138YqDj3ttfayRwuMKKrqVj
This commit is contained in:
Claude 2026-10-03 18:21:16 +00:00
parent bd5f637501
commit b4222ac5ec
No known key found for this signature in database
3 changed files with 58 additions and 1 deletions

View File

@ -239,7 +239,9 @@ EVOO_COCKPIT_CORS_ORIGIN=
# Optional Media Studio worker (local ffmpeg + ML sidecar, compose profile "media").
# Without it, Media Studio stays hidden and media jobs are skipped.
# MEDIA_WORKER_URL=http://127.0.0.1:8790
# Compose: http://media-worker:8790. Bare-metal dev: http://127.0.0.1:8790.
# MEDIA_WORKER_URL=http://media-worker:8790
# At least 32 random characters.
# MEDIA_WORKER_TOKEN=REPLACE_WITH_RANDOM_TOKEN
# Private platform profiles that override the shipped ones. Keep outside the repo.
# MEDIA_PROFILES_DIR=~/.evoo/media-profiles

32
.github/workflows/media-worker.yml vendored Normal file
View File

@ -0,0 +1,32 @@
name: media-worker
on:
pull_request:
paths: &media-worker-paths
- ".github/workflows/media-worker.yml"
- "infra/media-worker/**"
push:
branches: [main]
paths: *media-worker-paths
permissions:
contents: read
concurrency:
group: media-worker-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
sidecar:
name: Media sidecar
runs-on: [self-hosted, evoo-ci, Linux]
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: Build test image (CPU)
run: docker build --build-arg ACCELERATOR=cpu --target test -t rakazo/media-worker:ci-test infra/media-worker
- name: Pytest (offline, fake model backends)
run: docker run --rm --network none rakazo/media-worker:ci-test
- name: Build runtime image (CPU)
run: docker build --build-arg ACCELERATOR=cpu -t rakazo/media-worker:ci infra/media-worker

View File

@ -129,6 +129,28 @@ services:
data-init:
condition: service_completed_successfully
media-worker:
# Optional Media Studio sidecar: `docker compose --profile media up`.
# No published port; the API and worker reach it as http://media-worker:8790.
profiles: ["media"]
build:
context: ../media-worker
args:
ACCELERATOR: ${MEDIA_ACCELERATOR:-cpu}
image: rakazo/media-worker:local
environment:
MEDIA_WORKER_HOST: "0.0.0.0"
MEDIA_WORKER_PORT: "8790"
MEDIA_WORKER_TOKEN: ${MEDIA_WORKER_TOKEN:?Set MEDIA_WORKER_TOKEN in .env}
MEDIA_ROOT: /data/media
MEDIA_MODELS_DIR: /models
HTTP_PROXY: ${HTTP_PROXY:-${http_proxy:-}}
HTTPS_PROXY: ${HTTPS_PROXY:-${https_proxy:-}}
NO_PROXY: ${NO_PROXY:-${no_proxy:-}}
volumes:
- ../../data/media:/data/media
- media-models:/models
web:
build:
context: ../..
@ -144,4 +166,5 @@ services:
- api
volumes:
media-models:
pgdata: