Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
214 commits
Select commit Hold shift + click to select a range
6731644
Added queue management page and linked repreocess transcription
thestumonkey Sep 22, 2025
2a0f30c
Merge main+pytest
thestumonkey Sep 25, 2025
fd177d4
fixed spurious calls to version endpoint, added logging, standardised…
thestumonkey Sep 26, 2025
995d2b7
Moved to using RQ queue, implemented beanie models for conversations
thestumonkey Sep 30, 2025
8735339
Created audio controller and moved final transcription to rq
thestumonkey Sep 30, 2025
e87970a
fixed integration tests, and tidied up audio methods
stuartalexander-nexus Oct 2, 2025
363cf64
service model, transcript RQ workers
stuartalexander-nexus Oct 3, 2025
f945b35
Massive refactor
stuartalexander-nexus Oct 5, 2025
d8c81a7
Refactor and tidy
stuartalexander-nexus Oct 11, 2025
77d1e18
fix audio queue naming issue
stuartalexander-nexus Oct 11, 2025
d32f647
fixed speaker recognition on transcript
stuartalexander-nexus Oct 11, 2025
5da5c75
Queue refactor complete
stuartalexander-nexus Oct 12, 2025
f7b4a3f
added cleanup (trim) of redis streams
stuartalexander-nexus Oct 12, 2025
acc35db
report auth issue to client if auth issue
stuartalexander-nexus Oct 12, 2025
ecf4578
fix return value if speaker unknonw
stuartalexander-nexus Oct 12, 2025
d239e0a
fix return value if speaker unknonw
stuartalexander-nexus Oct 12, 2025
77eaf6a
added worker startup command on dockerfiule
stuartalexander-nexus Oct 13, 2025
eaf0d56
Update Docker configuration and speaker recognition dependencies
AnkushMalaker Oct 13, 2025
dab30a8
Merge pull request #122 from AnkushMalaker/minor-changes
thestumonkey Oct 13, 2025
7602e56
Merge branch 'main' into queue-combo
AnkushMalaker Oct 13, 2025
77b8869
minor changes
AnkushMalaker Oct 13, 2025
2f62ea8
Remove unused Dockerfiles and pyproject files for blackwell and parak…
0xrushi Oct 14, 2025
d4423aa
121 default
0xrushi Oct 14, 2025
d798fef
Merge pull request #124 from 0xrushi/fix/removeblackwell
AnkushMalaker Oct 14, 2025
52995fd
wip
AnkushMalaker Oct 16, 2025
b52bde0
fixed init system
AnkushMalaker Oct 17, 2025
67e26b8
update script
AnkushMalaker Oct 17, 2025
5821933
show models
AnkushMalaker Oct 17, 2025
1c3b996
update screenshots
AnkushMalaker Oct 20, 2025
6358591
remove nginx.conf. we should only commit nginx.conf.template
AnkushMalaker Oct 20, 2025
782f16d
Merge branch 'main' into feat/local-omi-scripts
AnkushMalaker Oct 20, 2025
8ac5a50
Add getting started guide and update initialization scripts
AnkushMalaker Oct 20, 2025
6644d5a
update quickstart with local services
AnkushMalaker Oct 20, 2025
1931346
docker build cuda arg fix
AnkushMalaker Oct 20, 2025
bc2b292
update init system and fix audio import bug
AnkushMalaker Oct 20, 2025
12d8a77
addressing coderabbitai suggestions
AnkushMalaker Oct 20, 2025
430781c
import fix
AnkushMalaker Oct 20, 2025
f26e1fb
update readme and services.py
AnkushMalaker Oct 20, 2025
9a8d149
updated local connection script
AnkushMalaker Oct 20, 2025
3259d4c
Merge pull request #129 from AnkushMalaker/feat/local-omi-scripts
AnkushMalaker Oct 20, 2025
fc40400
Merge pull request #131 from AnkushMalaker/fix/init-system-clean
AnkushMalaker Oct 20, 2025
5e9f071
update test script
AnkushMalaker Oct 20, 2025
9040693
update test file
AnkushMalaker Oct 20, 2025
202acd9
update default .env.template for speaker service to 0.0.0.0 to allow …
AnkushMalaker Oct 20, 2025
d6a6b18
fix for pyannote 4.0
AnkushMalaker Oct 20, 2025
dc98c72
Merge pull request #132 from AnkushMalaker/speaker-test-fix
AnkushMalaker Oct 20, 2025
922bf8d
add common docker network
AnkushMalaker Oct 20, 2025
ebfacbf
Merge branch 'main' into fix/speaker-backend-integration
AnkushMalaker Oct 20, 2025
04a28e2
Merge pull request #133 from AnkushMalaker/fix/speaker-backend-integr…
AnkushMalaker Oct 20, 2025
aff7e16
add start.sh
AnkushMalaker Oct 20, 2025
fb1be97
nits
AnkushMalaker Oct 20, 2025
93b7572
Update SSL generation scripts to support both IP addresses and domain…
AnkushMalaker Oct 20, 2025
afac121
fix
AnkushMalaker Oct 21, 2025
d65aad6
Add is_placeholder function to normalize and check placeholder values…
AnkushMalaker Oct 21, 2025
d407036
Merge pull request #134 from AnkushMalaker/fix/wizard-nits
AnkushMalaker Oct 21, 2025
ef902e4
feat: Add support for Ollama and improve setup stability
RKRitik Oct 18, 2025
a671926
Fix: Ollama health check in backend services
RKRitik Oct 18, 2025
cf7cc23
Feat: Add OLLAMA_EMBEDDER_MODEL to advanced backend setup
RKRitik Oct 18, 2025
66dc268
Feat: Enforce explicit OLLAMA_MODEL and OLLAMA_EMBEDDER_MODEL configu…
RKRitik Oct 18, 2025
f0d4c7a
Feat: Display Ollama embedder model status in UI
RKRitik Oct 18, 2025
5636055
Refactor: Remove unnecessary comments from code
RKRitik Oct 18, 2025
ddd8a11
Fix: LLM health check for OpenAI provider
RKRitik Oct 18, 2025
de1bc4b
Feat: Add OLLAMA_EMBEDDER_MODEL to advanced backend setup
RKRitik Oct 18, 2025
91e5cee
Refactor: Remove unnecessary comments from code
RKRitik Oct 18, 2025
4567e22
feat: add logging when getting LLM provider from environment
RKRitik Oct 22, 2025
69fa704
chore: add ollama configs to env template file
RKRitik Oct 22, 2025
059dfd0
Merge pull request #125 from RKRitik/fix/ollama-setup-and-stability
AnkushMalaker Oct 22, 2025
71e6089
feat: add get_embedding_dims util to get the embedder model dimensions
RKRitik Oct 24, 2025
92cdfa0
fix: remove model when generating client response; it is configured a…
RKRitik Oct 24, 2025
390db08
chore: proper exception handling and formatting in get_embedding_dims
RKRitik Oct 24, 2025
8fe109d
Merge pull request #140 from RKRitik/fix/ollama-embedding-dims
AnkushMalaker Oct 24, 2025
f6fac9a
add https profile to caddy service in docker compose
AnkushMalaker Oct 24, 2025
c117cb0
Merge pull request #141 from AnkushMalaker/fix/caddyfile-error
AnkushMalaker Oct 24, 2025
01d4813
feat: add theme switcher and theme provider to speaker-recognition-ui
RKRitik Oct 25, 2025
3e0c385
feat: speaker recognition web ui theme styling throughout
RKRitik Oct 25, 2025
f5dd96e
fix: Dynamically configure Nginx web UI port in setup for speaker rec…
RKRitik Oct 25, 2025
f05817f
fix: null check when getting speaker details
RKRitik Oct 25, 2025
fd521e4
fix: minor ui change in speaker-recognition
RKRitik Oct 25, 2025
7824512
refactor: update speaker recognition setup to use interactive script …
AnkushMalaker Oct 27, 2025
3175a58
feat: add stop script to manage service shutdown
AnkushMalaker Oct 27, 2025
50940e0
recopied files over to new branch
thestumonkey Oct 27, 2025
0b83165
Repaired
thestumonkey Oct 27, 2025
3044b2b
Repaired
thestumonkey Oct 27, 2025
2574a2e
Merge branch 'close-convo2' of https://github.com/thestumonkey/friend…
thestumonkey Oct 27, 2025
fcf85a1
changed comments for rabbitai
thestumonkey Oct 28, 2025
5a9c033
feat: add GitHub Actions workflow for advanced Docker Compose build a…
0xrushi Oct 29, 2025
2d211f6
fix: improve .env creation logic and ensure correct image tagging in …
0xrushi Oct 29, 2025
c0186da
secrets
0xrushi Oct 29, 2025
4a65381
env
0xrushi Oct 29, 2025
5f8f498
space
0xrushi Oct 29, 2025
43c1f67
dea
0xrushi Oct 29, 2025
0eeea39
docker b
0xrushi Oct 29, 2025
0c386b2
fix: enhance error handling and JSON validation in Docker Compose wor…
0xrushi Oct 29, 2025
5db1410
refactor: update image retrieval method in Docker Compose workflow to…
0xrushi Oct 29, 2025
7bdc71c
refactor: update service names and tagging logic in Docker Compose wo…
0xrushi Oct 29, 2025
777b87c
refactor: enhance .env copying logic and add Docker Compose builds fo…
0xrushi Oct 29, 2025
d47a5e1
refactor: implement dynamic runner selection in GitHub Actions workflow
0xrushi Oct 29, 2025
ed4d667
fix: improve error handling for self-hosted runner selection in GitHu…
0xrushi Oct 29, 2025
da92136
fix: set working directory for runner display step in GitHub Actions …
0xrushi Oct 29, 2025
33355ad
fix: update error logging for self-hosted runner fallback in GitHub A…
0xrushi Oct 29, 2025
3ad9280
refactor: streamline GitHub Actions workflow by consolidating runner …
0xrushi Oct 29, 2025
ecbd16d
fix: correct loop termination in GitHub Actions workflow for Docker i…
0xrushi Oct 29, 2025
c6c631c
refactor: consolidate Docker Compose build steps and improve image ha…
0xrushi Oct 29, 2025
cd903f7
refactor: simplify service build configuration in GitHub Actions work…
0xrushi Oct 29, 2025
b58b781
fix: update image tag removal logging and adjust build condition in G…
0xrushi Oct 29, 2025
d43da99
changed comments for rabbitai
thestumonkey Oct 28, 2025
1809b53
Merge branch 'close-convo2' of https://github.com/thestumonkey/friend…
thestumonkey Oct 31, 2025
ec6292d
Merge branch 'close-convo2' of https://github.com/thestumonkey/friend…
thestumonkey Oct 31, 2025
22cfc20
Merge branch 'close-convo2' of https://github.com/thestumonkey/friend…
thestumonkey Oct 31, 2025
8bd6dba
reverted docker compose
thestumonkey Oct 31, 2025
74be27e
reverted docker compose
thestumonkey Oct 31, 2025
213c7dd
Merge branch 'close-convo2' of https://github.com/thestumonkey/friend…
thestumonkey Oct 31, 2025
8875ca3
Enhance OpenAI client initialization with optional Langfuse tracing a…
AnkushMalaker Nov 3, 2025
d893958
Refactor queue handling by centralizing queue names into a single lis…
AnkushMalaker Nov 3, 2025
b009596
Update audio upload API endpoint and enhance integration tests. Chang…
AnkushMalaker Nov 3, 2025
14f5242
Merge pull request #144 from thestumonkey/close-convo2
AnkushMalaker Nov 3, 2025
c17a3a1
Merge branch 'main' of github.com:0xrushi/friend-lite into feat/actions
0xrushi Nov 8, 2025
65ddb49
Update service URLs and enhance speaker-recognition setup
0xrushi Nov 8, 2025
257c7c1
cuda variants
0xrushi Nov 9, 2025
4d968e0
Refactor GitHub Actions workflow and enhance audio stream worker shut…
0xrushi Nov 9, 2025
e0ef7f4
Update service URLs for speaker recognition and Nginx configuration
0xrushi Nov 9, 2025
e4f261e
Fixed issue where the timestamps for segements were incorrect due to …
thestumonkey Nov 15, 2025
4f027bc
Squashed commit of the following:
thestumonkey Nov 15, 2025
59391b7
Merge branch 'audio_segment_timefix' into dev
thestumonkey Nov 15, 2025
2036b9c
better summary and delete convo + cleanup
thestumonkey Nov 17, 2025
bb1682a
Changed timeouts of jobs to be 24h
thestumonkey Nov 17, 2025
7269bb7
Filter out empty segments
thestumonkey Nov 17, 2025
5a9f74b
improve prompt
thestumonkey Nov 17, 2025
59a613b
removed duplicate segments from the conversation model
thestumonkey Nov 17, 2025
6736a5d
added segement timing tracking for padding and dropped segments
thestumonkey Nov 18, 2025
a64f4fe
removed deprecated function and invalid import
thestumonkey Nov 18, 2025
bcd2a2b
removed old processing routes that are deprecated
thestumonkey Nov 18, 2025
c26c75a
fixed incorrect param
thestumonkey Nov 18, 2025
7077964
Add health status checker and update setup instructions
AnkushMalaker Nov 18, 2025
eeb4395
Merge pull request #150 from 0xrushi/feat/actions
AnkushMalaker Nov 18, 2025
62d0951
ensure cleanup happens on convo fail and moved some methods to convo_…
thestumonkey Nov 18, 2025
afc81db
Merge branch 'main' into cleanup_convo
thestumonkey Nov 18, 2025
c75e9eb
Merge pull request #158 from thestumonkey/cleanup_convo
AnkushMalaker Nov 21, 2025
553120b
Add GitHub Actions workflow for Jekyll site deployment
thestumonkey Nov 29, 2025
543fcea
Merge pull request #165 from chronicler-ai/thestumonkey-github-pages
thestumonkey Nov 29, 2025
ec76037
added git workflow
thestumonkey Nov 29, 2025
73e446a
Merge pull request #166 from thestumonkey/workflow
thestumonkey Nov 29, 2025
86c1f7a
Added AudioStream library for robot test to be able to simulate stream
thestumonkey Nov 22, 2025
b117291
removed * which breaks windows
thestumonkey Nov 22, 2025
2128ea9
Added middleware so server shows API responses in logs and masks the …
thestumonkey Nov 22, 2025
1515d35
removed old task manager
thestumonkey Nov 22, 2025
c974084
enable job filtering by type
thestumonkey Nov 22, 2025
87f4ff5
removed deprecvated processors
thestumonkey Nov 22, 2025
16181e9
Enabled creation and update of users to get tests to pass
thestumonkey Nov 22, 2025
13f890d
added computed properties for conversation model to get active transc…
thestumonkey Nov 22, 2025
2cc3972
moved queue health endpoint, and added better job query functions
thestumonkey Nov 22, 2025
8782c1a
added params to force waiting for chunk queue to be empty
thestumonkey Nov 22, 2025
a766026
ensure segments are updated on transcript versions
thestumonkey Nov 22, 2025
83b9753
added self healing function if redis loses the worker connection
thestumonkey Nov 22, 2025
31adba6
Changed function to get the conversation audio in order to properly auth
thestumonkey Nov 22, 2025
9a56f7e
Thinned out the payload from conversation controller
thestumonkey Nov 22, 2025
23b4543
moved metadatalinking to jobs
thestumonkey Nov 22, 2025
f46bfa8
added memory version addiing
thestumonkey Nov 22, 2025
2c516fd
added lib for mcp and test framework
thestumonkey Nov 22, 2025
537234b
Moved testing framework setup files to own folder
thestumonkey Nov 22, 2025
a277b36
added tagging file to segment tests that run at different speeds
thestumonkey Nov 22, 2025
b4e9777
Added tests to check queues with audio streaming
thestumonkey Nov 22, 2025
2b9031f
Updated robot tests
thestumonkey Nov 22, 2025
1dbdc01
Override ON method in order to return API response messages back to t…
thestumonkey Nov 22, 2025
5963216
Added test to check for failing workers
thestumonkey Nov 22, 2025
b879e2c
Add Robot Framework tests workflow for CI/CD
thestumonkey Nov 22, 2025
8816bc3
testing env
thestumonkey Nov 22, 2025
096ca05
Fix duplicate environment keys in Robot tests workflow
thestumonkey Nov 22, 2025
8347fcf
Fix test environment file location
thestumonkey Nov 22, 2025
912fcb5
Fix service startup issues in Robot tests workflow
thestumonkey Nov 22, 2025
223c16f
Fix test asset path and improve HTML report instructions
thestumonkey Nov 22, 2025
c0d3ef2
Add test audio assets and fix environment variables
thestumonkey Nov 22, 2025
5cff757
Start RQ workers in CI environment
thestumonkey Nov 22, 2025
51ece28
Add service logs output after tests run
thestumonkey Nov 22, 2025
789672a
Add OPENAI_BASE_URL to backend and worker containers
thestumonkey Nov 22, 2025
ada305d
Add worker registration verification step before tests
thestumonkey Nov 22, 2025
5496801
Check if workers container is running and show logs if not
thestumonkey Nov 22, 2025
635301f
Add environment variables to worker verification step
thestumonkey Nov 22, 2025
e9a1e1b
Start workers after backend is healthy, not with infrastructure services
thestumonkey Nov 22, 2025
aee26a3
Add GitHub Pages deployment for HTML test reports
thestumonkey Nov 22, 2025
807526a
Remove robotframework-reporter-action and add deployment summary
thestumonkey Nov 23, 2025
223e79a
Add Docker layer caching and pip caching to speed up builds
thestumonkey Nov 23, 2025
3a3b4cb
Consolidate and standardize test tags with comprehensive guidelines
thestumonkey Nov 23, 2025
68de6d6
Simplify to 11 approved tags only
thestumonkey Nov 23, 2025
cb11767
fixed conversation active_transcript version and tidied test
thestumonkey Nov 23, 2025
875f496
Add PR comment with test results to robot-tests workflow
thestumonkey Nov 23, 2025
679344e
Add PR comment with test results to robot-tests workflow
thestumonkey Nov 23, 2025
97e5575
Refactor robot-tests workflow to follow integration-tests pattern
thestumonkey Nov 24, 2025
d532596
Increase audio chunks for inactivity timeout test to ensure conversat…
thestumonkey Nov 24, 2025
fb5a31b
Revert to old robot-tests.yml workflow with explicit service management
thestumonkey Nov 25, 2025
848f1fc
Fix YAML syntax error in robot-tests.yml and add act testing guide
thestumonkey Nov 25, 2025
f8d06f9
added support to use a folder for audio uploads
thestumonkey Nov 26, 2025
98a8408
Fixed bug where consumer lock wasn't being cleared
thestumonkey Nov 26, 2025
b82a6ea
Added fixture for tests and queue flushing
thestumonkey Nov 26, 2025
64b3785
Fixed all tests
thestumonkey Nov 26, 2025
1d874a5
fixed asynbc issue with flush jobs on github
thestumonkey Nov 26, 2025
0d50fb9
fixed asynbc issue with flush jobs on github
thestumonkey Nov 26, 2025
9e128a5
fixed cancel job to avoid deadlocks
thestumonkey Nov 27, 2025
fdd0aa3
changed find test conversation to find the first (fixture) one
thestumonkey Nov 27, 2025
733aae4
fixed exporting env keys
thestumonkey Nov 27, 2025
09bab4a
added pre-commit hook to run tests
thestumonkey Nov 28, 2025
8d76886
Clear up of test keywords
thestumonkey Nov 28, 2025
3032825
Added pre-commit install steps to setup
thestumonkey Nov 28, 2025
2f4f4ce
fixed speaker recog getting env vars
thestumonkey Nov 28, 2025
eaf011f
added testing user guide
thestumonkey Nov 28, 2025
27d9249
added write access to PR comments
thestumonkey Nov 29, 2025
fcf372c
Cleat test folder
thestumonkey Nov 29, 2025
0ab1b5b
Cleat test folder
thestumonkey Nov 29, 2025
f857923
Merge branch 'robot_tests' into robot2
thestumonkey Nov 29, 2025
f8f35c0
verifying api keys export
thestumonkey Nov 29, 2025
c9c3920
Fix GitHub Actions env var ordering - revert to working structure
thestumonkey Nov 29, 2025
8f1526f
verifying api keys export
thestumonkey Nov 29, 2025
fa8310a
add checks for secrets
thestumonkey Nov 29, 2025
f0f2f67
fixed test env nor starting in dev env
thestumonkey Nov 29, 2025
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
Binary file added .assets/advanced-dashboard-webui.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .assets/memory-dashboard.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed .assets/plan.png
Binary file not shown.
2 changes: 1 addition & 1 deletion .env.template
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ PARAKEET_ASR_URL=http://host.docker.internal:8767

# MongoDB configuration
MONGODB_URI=mongodb://mongo:${MONGODB_PORT}
MONGODB_K8S_URI=mongodb://mongodb.${INFRASTRUCTURE_NAMESPACE}.svc.cluster.local:27017/friend
MONGODB_K8S_URI=mongodb://mongodb.${INFRASTRUCTURE_NAMESPACE}.svc.cluster.local:27017/friend-lite

# Qdrant configuration
QDRANT_BASE_URL=qdrant
Expand Down
248 changes: 248 additions & 0 deletions .github/workflows/advanced-docker-compose-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
name: Build and Deploy Advanced (Docker Compose)

on:
workflow_dispatch:
inputs:
version:
description: Optional version tag override (e.g. v1.2.3)
required: false
push:
branches: [ "main" ]
paths:
- "*"
- "backends/advanced/**"
- "extras/asr-services/**"
- "extras/speaker-recognition/**"
- "extras/openmemory-mcp/**"
- ".github/workflows/advanced-docker-compose-build.yml"
tags:
- "v*"


permissions:
contents: read
packages: write
actions: read

env:
REGISTRY: ghcr.io

jobs:
build-default:
runs-on: ubuntu-latest
timeout-minutes: 60
env:
ADVANCED_ENV: ${{ secrets.ADVANCED_ENV }}
RUNNER_FLAVOUR: ubuntu-latest
defaults:
run:
shell: bash
working-directory: backends/advanced

steps:
- name: Show selected runner
run: echo "Workflow running on ${RUNNER_FLAVOUR} runner"
working-directory: .

- name: Checkout
uses: actions/checkout@v4

- name: Print commit details
run: |
echo "Event: ${{ github.event_name }}"
echo "Ref: $GITHUB_REF"
echo "Ref name: ${{ github.ref_name }}"
echo "Repository: $GITHUB_REPOSITORY"
echo "Actor: $GITHUB_ACTOR"
echo "SHA: $GITHUB_SHA"
echo "Short SHA: ${GITHUB_SHA::7}"
echo "Commit info:"
git log -1 --pretty=format:'Author: %an <%ae>%nDate: %ad%nSubject: %s' || true

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Copy .env.template to .env
run: |
set -euo pipefail
copy_env() {
local dir="$1"
local template="${dir}/.env.template"
local target="${dir}/.env"
if [ -f "$template" ]; then
echo "Copying $template to $target"
cp "$template" "$target"
else
echo "$template not found; skipping"
fi
}

copy_env .
copy_env ../../extras/asr-services
copy_env ../../extras/speaker-recognition
copy_env ../../extras/openmemory-mcp

- name: Create .env from secret (if provided)
if: env.ADVANCED_ENV != ''
run: |
echo "Writing .env from ADVANCED_ENV secret"
printf "%s\n" "${ADVANCED_ENV}" > .env

- name: Source .env (if present)
run: |
if [ -f .env ]; then
set -a
# shellcheck disable=SC1091
source .env
set +a
else
echo ".env not found; continuing"
fi

- name: Determine version
id: version
run: |
if [ -n "${{ github.event.inputs.version }}" ]; then
VERSION="${{ github.event.inputs.version }}"
elif [[ "${GITHUB_REF}" == refs/tags/* ]]; then
VERSION="${GITHUB_REF#refs/tags/}"
else
VERSION="sha-${GITHUB_SHA::7}"
fi
echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"

- name: Build, tag, and push services sequentially with version
env:
OWNER: ${{ github.repository_owner }}
VERSION: ${{ steps.version.outputs.VERSION }}
run: |
set -euo pipefail
docker compose version
OWNER_LC=$(echo "$OWNER" | tr '[:upper:]' '[:lower:]')

# CUDA variants from pyproject.toml
CUDA_VARIANTS=("cpu" "cu121" "cu126" "cu128")

# Base services (no CUDA variants, no profiles)
base_service_specs=(
"friend-backend|advanced-friend-backend|docker-compose.yml|."
"workers|advanced-workers|docker-compose.yml|."
"webui|advanced-webui|docker-compose.yml|."
"openmemory-mcp|openmemory-mcp|../../extras/openmemory-mcp/docker-compose.yml|../../extras/openmemory-mcp"
)

# Build and push base services
for spec in "${base_service_specs[@]}"; do
IFS='|' read -r svc svc_repo compose_file project_dir <<< "$spec"

echo "::group::Building and pushing $svc_repo"
if [ "$compose_file" = "docker-compose.yml" ] && [ "$project_dir" = "." ]; then
docker compose build --pull "$svc"
else
docker compose -f "$compose_file" --project-directory "$project_dir" build "$svc"
fi
# Resolve the built image ID via compose (avoids name mismatches)
if [ "$compose_file" = "docker-compose.yml" ] && [ "$project_dir" = "." ]; then
img_id=$(docker compose images -q "$svc" | head -n1)
else
img_id=$(docker compose -f "$compose_file" --project-directory "$project_dir" images -q "$svc" | head -n1)
fi
if [ -z "${img_id:-}" ]; then
echo "Skipping $svc_repo (no built image found after build)"
echo "::endgroup::"
continue
fi

# Tag and push with version
target_image="$REGISTRY/$OWNER_LC/$svc_repo:$VERSION"
latest_image="$REGISTRY/$OWNER_LC/$svc_repo:latest"
echo "Tagging $img_id as $target_image"
docker tag "$img_id" "$target_image"
echo "Tagging $img_id as $latest_image"
docker tag "$img_id" "$latest_image"

echo "Pushing $target_image"
docker push "$target_image"
echo "Pushing $latest_image"
docker push "$latest_image"

# Clean up local tags
docker image rm -f "$target_image" || true
docker image rm -f "$latest_image" || true
echo "::endgroup::"
done

# Build and push parakeet-asr with CUDA variants (cu121, cu126, cu128)
echo "::group::Building and pushing parakeet-asr CUDA variants"
cd ../../extras/asr-services
for cuda_variant in cu121 cu126 cu128; do
echo "Building parakeet-asr-${cuda_variant}"
export CUDA_VERSION="${cuda_variant}"
docker compose build parakeet-asr

img_id=$(docker compose images -q parakeet-asr | head -n1)
if [ -n "${img_id:-}" ]; then
target_image="$REGISTRY/$OWNER_LC/parakeet-asr-${cuda_variant}:$VERSION"
latest_image="$REGISTRY/$OWNER_LC/parakeet-asr-${cuda_variant}:latest"
echo "Tagging $img_id as $target_image"
docker tag "$img_id" "$target_image"
echo "Tagging $img_id as $latest_image"
docker tag "$img_id" "$latest_image"

echo "Pushing $target_image"
docker push "$target_image"
echo "Pushing $latest_image"
docker push "$latest_image"

# Clean up local tags
docker image rm -f "$target_image" || true
docker image rm -f "$latest_image" || true
fi
done
cd - > /dev/null
echo "::endgroup::"

# Build and push speaker-recognition with all CUDA variants (including CPU)
# Note: speaker-service has profiles, but we can build it directly by setting PYTORCH_CUDA_VERSION
echo "::group::Building and pushing speaker-recognition variants"
cd ../../extras/speaker-recognition
for cuda_variant in "${CUDA_VARIANTS[@]}"; do
echo "Building speaker-recognition-${cuda_variant}"
export PYTORCH_CUDA_VERSION="${cuda_variant}"
# Build speaker-service directly (profiles only affect 'up', not 'build')
docker compose build speaker-service

img_id=$(docker compose images -q speaker-service | head -n1)
if [ -n "${img_id:-}" ]; then
target_image="$REGISTRY/$OWNER_LC/speaker-recognition-${cuda_variant}:$VERSION"
latest_image="$REGISTRY/$OWNER_LC/speaker-recognition-${cuda_variant}:latest"
echo "Tagging $img_id as $target_image"
docker tag "$img_id" "$target_image"
echo "Tagging $img_id as $latest_image"
docker tag "$img_id" "$latest_image"

echo "Pushing $target_image"
docker push "$target_image"
echo "Pushing $latest_image"
docker push "$latest_image"

# Clean up local tags
docker image rm -f "$target_image" || true
docker image rm -f "$latest_image" || true
fi
done
cd - > /dev/null
echo "::endgroup::"

# Summary
echo "::group::Build Summary"
echo "Built and pushed images with version tag: ${VERSION}"
echo "Images pushed to: $REGISTRY/$OWNER_LC/"
echo "::endgroup::"
20 changes: 19 additions & 1 deletion .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,25 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4


- name: Verify required secrets
env:
DEEPGRAM_API_KEY: ${{ secrets.DEEPGRAM_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
echo "Verifying required secrets..."
if [ -z "$DEEPGRAM_API_KEY" ]; then
echo "❌ ERROR: DEEPGRAM_API_KEY secret is not set"
exit 1
fi
if [ -z "$OPENAI_API_KEY" ]; then
echo "❌ ERROR: OPENAI_API_KEY secret is not set"
exit 1
fi
echo "✓ DEEPGRAM_API_KEY is set (length: ${#DEEPGRAM_API_KEY})"
echo "✓ OPENAI_API_KEY is set (length: ${#OPENAI_API_KEY})"
echo "✓ All required secrets verified"

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

Expand Down
51 changes: 51 additions & 0 deletions .github/workflows/jekyll-gh-pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Sample workflow for building and deploying a Jekyll site to GitHub Pages
name: Deploy Jekyll with GitHub Pages dependencies preinstalled

on:
# Runs on pushes targeting the default branch
push:
branches: ["main"]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false

jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Build with Jekyll
uses: actions/jekyll-build-pages@v1
with:
source: ./
destination: ./_site
- name: Upload artifact
uses: actions/upload-pages-artifact@v3

# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
Loading
Loading