mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-21 12:49:06 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 90c3ecc9c3 | |||
| d7f140b7d1 | |||
| a47a5f5781 | |||
| 0eba147018 | |||
| 18a27f7b45 |
16
.github/workflows/dockerhub-backend.yml
vendored
16
.github/workflows/dockerhub-backend.yml
vendored
@@ -1,12 +1,9 @@
|
|||||||
name: Build and Push Backend Docker Image (Docker Hub)
|
name: Build and Push Backend Docker Image (Docker Hub)
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
push:
|
||||||
types:
|
tags:
|
||||||
- closed
|
- "v*"
|
||||||
paths:
|
|
||||||
- "server/**"
|
|
||||||
- ".github/workflows/dockerhub-backend.yml"
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
@@ -16,11 +13,6 @@ env:
|
|||||||
jobs:
|
jobs:
|
||||||
build-and-push:
|
build-and-push:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: |
|
|
||||||
github.event_name == 'workflow_dispatch' ||
|
|
||||||
(github.event.pull_request.merged == true &&
|
|
||||||
startsWith(github.event.pull_request.head.ref, 'release-please--branches--'))
|
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
@@ -42,7 +34,7 @@ jobs:
|
|||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,event=branch
|
type=ref,event=branch
|
||||||
type=sha,prefix={{branch}}-
|
type=ref,event=tag
|
||||||
type=raw,value=latest,enable={{is_default_branch}}
|
type=raw,value=latest,enable={{is_default_branch}}
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
|
|||||||
28
.github/workflows/dockerhub-frontend.yml
vendored
28
.github/workflows/dockerhub-frontend.yml
vendored
@@ -1,12 +1,9 @@
|
|||||||
name: Build and Push Frontend Docker Image
|
name: Build and Push Frontend Docker Image
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
push:
|
||||||
types:
|
tags:
|
||||||
- closed
|
- "v*"
|
||||||
paths:
|
|
||||||
- "www/**"
|
|
||||||
- ".github/workflows/dockerhub-frontend.yml"
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
@@ -16,11 +13,6 @@ env:
|
|||||||
jobs:
|
jobs:
|
||||||
build-and-push:
|
build-and-push:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: |
|
|
||||||
github.event_name == 'workflow_dispatch' ||
|
|
||||||
(github.event.pull_request.merged == true &&
|
|
||||||
startsWith(github.event.pull_request.head.ref, 'release-please--branches--'))
|
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
@@ -42,7 +34,7 @@ jobs:
|
|||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,event=branch
|
type=ref,event=branch
|
||||||
type=sha,prefix={{branch}}-
|
type=ref,event=tag
|
||||||
type=raw,value=latest,enable={{is_default_branch}}
|
type=raw,value=latest,enable={{is_default_branch}}
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
@@ -61,10 +53,18 @@ jobs:
|
|||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
|
|
||||||
- name: Trigger Coolify deployment
|
deploy:
|
||||||
|
needs: build-and-push
|
||||||
|
runs-on: ubuntu-latest
|
||||||
if: success()
|
if: success()
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
environment: [reflector-monadical, reflector-media]
|
||||||
|
environment: ${{ matrix.environment }}
|
||||||
|
steps:
|
||||||
|
- name: Trigger Coolify deployment
|
||||||
run: |
|
run: |
|
||||||
curl -X POST "${{ secrets.COOLIFY_WEBHOOK_URL }}" \
|
curl -X POST "${{ secrets.COOLIFY_WEBHOOK_URL }}" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-H "Authorization: Bearer ${{ secrets.COOLIFY_WEBHOOK_TOKEN }}" \
|
-H "Authorization: Bearer ${{ secrets.COOLIFY_WEBHOOK_TOKEN }}" \
|
||||||
-f || (echo "Failed to trigger Coolify deployment" && exit 1)
|
-f || (echo "Failed to trigger Coolify deployment for ${{ matrix.environment }}" && exit 1)
|
||||||
|
|||||||
@@ -15,8 +15,10 @@ GITHUB_TOKEN=your-github-token-or-use-default-GITHUB_TOKEN
|
|||||||
|
|
||||||
# Coolify Deployment Webhook (required for frontend deployment)
|
# Coolify Deployment Webhook (required for frontend deployment)
|
||||||
# Used to trigger automatic deployment after image push
|
# Used to trigger automatic deployment after image push
|
||||||
COOLIFY_WEBHOOK_URL=https://app.monadical.io/api/v1/deploy?uuid=your-uuid&force=false
|
# Configure these secrets in GitHub Environments:
|
||||||
COOLIFY_WEBHOOK_TOKEN=your-coolify-webhook-token
|
# Each environment should have:
|
||||||
|
# - COOLIFY_WEBHOOK_URL: The webhook URL for that specific deployment
|
||||||
|
# - COOLIFY_WEBHOOK_TOKEN: The webhook token (can be the same for both if using same token)
|
||||||
|
|
||||||
# Optional: GitHub Actions Cache Token (for local testing with act)
|
# Optional: GitHub Actions Cache Token (for local testing with act)
|
||||||
GHA_CACHE_TOKEN=your-github-token-or-empty
|
GHA_CACHE_TOKEN=your-github-token-or-empty
|
||||||
|
|||||||
14
CHANGELOG.md
14
CHANGELOG.md
@@ -1,5 +1,19 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [0.23.2](https://github.com/Monadical-SAS/reflector/compare/v0.23.1...v0.23.2) (2025-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* build on push tags ([#785](https://github.com/Monadical-SAS/reflector/issues/785)) ([d7f140b](https://github.com/Monadical-SAS/reflector/commit/d7f140b7d1f4660d5da7a0da1357f68869e0b5cd))
|
||||||
|
|
||||||
|
## [0.23.1](https://github.com/Monadical-SAS/reflector/compare/v0.23.0...v0.23.1) (2025-12-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* populate room_name in transcript GET endpoint ([#783](https://github.com/Monadical-SAS/reflector/issues/783)) ([0eba147](https://github.com/Monadical-SAS/reflector/commit/0eba1470181c7b9e0a79964a1ef28c09bcbdd9d7))
|
||||||
|
|
||||||
## [0.23.0](https://github.com/Monadical-SAS/reflector/compare/v0.22.4...v0.23.0) (2025-12-10)
|
## [0.23.0](https://github.com/Monadical-SAS/reflector/compare/v0.22.4...v0.23.0) (2025-12-10)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ from pydantic import (
|
|||||||
import reflector.auth as auth
|
import reflector.auth as auth
|
||||||
from reflector.db import get_database
|
from reflector.db import get_database
|
||||||
from reflector.db.recordings import recordings_controller
|
from reflector.db.recordings import recordings_controller
|
||||||
|
from reflector.db.rooms import rooms_controller
|
||||||
from reflector.db.search import (
|
from reflector.db.search import (
|
||||||
DEFAULT_SEARCH_LIMIT,
|
DEFAULT_SEARCH_LIMIT,
|
||||||
SearchLimit,
|
SearchLimit,
|
||||||
@@ -473,6 +474,11 @@ async def transcript_get(
|
|||||||
|
|
||||||
is_multitrack = await _get_is_multitrack(transcript)
|
is_multitrack = await _get_is_multitrack(transcript)
|
||||||
|
|
||||||
|
room_name = None
|
||||||
|
if transcript.room_id:
|
||||||
|
room = await rooms_controller.get_by_id(transcript.room_id)
|
||||||
|
room_name = room.name if room else None
|
||||||
|
|
||||||
participants = []
|
participants = []
|
||||||
if transcript.participants:
|
if transcript.participants:
|
||||||
user_ids = [p.user_id for p in transcript.participants if p.user_id is not None]
|
user_ids = [p.user_id for p in transcript.participants if p.user_id is not None]
|
||||||
@@ -503,6 +509,7 @@ async def transcript_get(
|
|||||||
"meeting_id": transcript.meeting_id,
|
"meeting_id": transcript.meeting_id,
|
||||||
"source_kind": transcript.source_kind,
|
"source_kind": transcript.source_kind,
|
||||||
"room_id": transcript.room_id,
|
"room_id": transcript.room_id,
|
||||||
|
"room_name": room_name,
|
||||||
"audio_deleted": transcript.audio_deleted,
|
"audio_deleted": transcript.audio_deleted,
|
||||||
"participants": participants,
|
"participants": participants,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from reflector.db.rooms import rooms_controller
|
||||||
|
from reflector.db.transcripts import transcripts_controller
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_transcript_create(client):
|
async def test_transcript_create(client):
|
||||||
@@ -182,3 +185,51 @@ async def test_transcript_mark_reviewed(authenticated_client, client):
|
|||||||
response = await client.get(f"/transcripts/{tid}")
|
response = await client.get(f"/transcripts/{tid}")
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert response.json()["reviewed"] is True
|
assert response.json()["reviewed"] is True
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_transcript_get_returns_room_name(authenticated_client, client):
|
||||||
|
"""Test that getting a transcript returns its room_name when linked to a room."""
|
||||||
|
# Create a room
|
||||||
|
room = await rooms_controller.add(
|
||||||
|
name="test-room-for-transcript",
|
||||||
|
user_id="test-user",
|
||||||
|
zulip_auto_post=False,
|
||||||
|
zulip_stream="",
|
||||||
|
zulip_topic="",
|
||||||
|
is_locked=False,
|
||||||
|
room_mode="normal",
|
||||||
|
recording_type="cloud",
|
||||||
|
recording_trigger="automatic-2nd-participant",
|
||||||
|
is_shared=False,
|
||||||
|
webhook_url="",
|
||||||
|
webhook_secret="",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create a transcript linked to the room
|
||||||
|
transcript = await transcripts_controller.add(
|
||||||
|
name="transcript-with-room",
|
||||||
|
source_kind="file",
|
||||||
|
room_id=room.id,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Get the transcript and verify room_name is returned
|
||||||
|
response = await client.get(f"/transcripts/{transcript.id}")
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert response.json()["room_id"] == room.id
|
||||||
|
assert response.json()["room_name"] == "test-room-for-transcript"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_transcript_get_returns_null_room_name_when_no_room(
|
||||||
|
authenticated_client, client
|
||||||
|
):
|
||||||
|
"""Test that room_name is null when transcript has no room."""
|
||||||
|
response = await client.post("/transcripts", json={"name": "no-room-transcript"})
|
||||||
|
assert response.status_code == 200
|
||||||
|
tid = response.json()["id"]
|
||||||
|
|
||||||
|
response = await client.get(f"/transcripts/{tid}")
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert response.json()["room_id"] is None
|
||||||
|
assert response.json()["room_name"] is None
|
||||||
|
|||||||
Reference in New Issue
Block a user