diff --git a/.env.example b/.env.example index 5f8d9eb..7c876d1 100644 --- a/.env.example +++ b/.env.example @@ -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 diff --git a/.github/workflows/media-worker.yml b/.github/workflows/media-worker.yml new file mode 100644 index 0000000..f840436 --- /dev/null +++ b/.github/workflows/media-worker.yml @@ -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 diff --git a/infra/compose/docker-compose.yml b/infra/compose/docker-compose.yml index 08ab8c4..8ac7429 100644 --- a/infra/compose/docker-compose.yml +++ b/infra/compose/docker-compose.yml @@ -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: