Compare commits

...

4 Commits

Author SHA1 Message Date
lebaudantoine 47cd3eff74 🔖(minor) bump release to 1.2.0 2026-01-05 18:10:05 +01:00
lebaudantoine 5769203705 💄(frontend) add minor layout adjustments
Propose minor layout adjustments to ensure the DINUM version with French
copywriting does not look visually awkward due to line breaks.
2026-01-05 17:47:26 +01:00
lebaudantoine cadc186c62 🐛(backend) fix certificates volume mount path for Python 3.13
After upgrading Python to 3.13, not all development environments were
updated accordingly. This fixes the incorrect volume mount path
introduced by that upgrade.
2026-01-05 17:47:26 +01:00
lebaudantoine 5be7595533 🐛(summary) fix MinIO endpoint handling in constructor
Fix MinIO client configuration: I was incorrectly passing a full URL instead of
an endpoint, which caused errors in staging. Local development values did not
reflect the staging setup and were also out of sync with the backend.
2026-01-05 15:40:11 +01:00
18 changed files with 58 additions and 29 deletions
+8 -1
View File
@@ -8,13 +8,20 @@ and this project adheres to
## [Unreleased] ## [Unreleased]
## [1.2.0] - 2026-01-05
### Added
- ✨(agent) support Kyutai client for subtitle - ✨(agent) support Kyutai client for subtitle
- ✨(frontend) remove the beta badge
- ✨(all) support starting transcription and recording simultaneously - ✨(all) support starting transcription and recording simultaneously
- ✨(backend) persist options on a recording - ✨(backend) persist options on a recording
- ✨(all) support choosing the transcription language - ✨(all) support choosing the transcription language
- ✨(summary) add a download link to the audio/video file - ✨(summary) add a download link to the audio/video file
- ✨(frontend) allow unprivileged users to request a recording - ✨(frontend) allow unprivileged users to request a recording
### Changed
- 🚸(frontend) remove the beta badge
- ♻️(summary) extract file handling in a robust service - ♻️(summary) extract file handling in a robust service
- ♻️(all) manage recording state on the backend side - ♻️(all) manage recording state on the backend side
+1 -1
View File
@@ -1,7 +1,7 @@
APP_NAME="meet-app-summary-dev" APP_NAME="meet-app-summary-dev"
APP_API_TOKEN="password" APP_API_TOKEN="password"
AWS_STORAGE_BUCKET_NAME="meet-media-storage" AWS_STORAGE_BUCKET_NAME="http://meet-media-storage"
AWS_S3_ENDPOINT_URL="minio:9000" AWS_S3_ENDPOINT_URL="minio:9000"
AWS_S3_SECURE_ACCESS=false AWS_S3_SECURE_ACCESS=false
+1 -1
View File
@@ -1,7 +1,7 @@
[project] [project]
name = "agents" name = "agents"
version = "1.1.0" version = "1.2.0"
requires-python = ">=3.12" requires-python = ">=3.12"
dependencies = [ dependencies = [
"livekit-agents==1.3.10", "livekit-agents==1.3.10",
+1 -1
View File
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "meet" name = "meet"
version = "1.1.0" version = "1.2.0"
authors = [{ "name" = "DINUM", "email" = "dev@mail.numerique.gouv.fr" }] authors = [{ "name" = "DINUM", "email" = "dev@mail.numerique.gouv.fr" }]
classifiers = [ classifiers = [
"Development Status :: 5 - Production/Stable", "Development Status :: 5 - Production/Stable",
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "meet", "name": "meet",
"version": "1.1.0", "version": "1.2.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "meet", "name": "meet",
"version": "1.1.0", "version": "1.2.0",
"dependencies": { "dependencies": {
"@fontsource-variable/material-symbols-outlined": "5.2.30", "@fontsource-variable/material-symbols-outlined": "5.2.30",
"@fontsource/material-icons-outlined": "5.2.6", "@fontsource/material-icons-outlined": "5.2.6",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "meet", "name": "meet",
"private": true, "private": true,
"version": "1.1.0", "version": "1.2.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "panda codegen && vite", "dev": "panda codegen && vite",
@@ -66,16 +66,22 @@ export function ToastRecordingRequest({
name: participant?.name, name: participant?.name,
})} })}
{!options.isMenuOpen && ( {!options.isMenuOpen && (
<Button <div
size="sm"
variant="text"
className={css({ className={css({
color: 'primary.300', marginLeft: '0.5rem',
})} })}
onPress={options.openMenu}
> >
{t('openMenu')} <Button
</Button> size="sm"
variant="text"
className={css({
color: 'primary.300',
})}
onPress={options.openMenu}
>
{t('openMenu')}
</Button>
</div>
)} )}
</HStack> </HStack>
</StyledToastContainer> </StyledToastContainer>
@@ -161,6 +161,7 @@ export const ControlsButton = ({
fullWidth fullWidth
onPress={handle} onPress={handle}
isDisabled={isDisabled} isDisabled={isDisabled}
size="compact"
> >
{t('button.start')} {t('button.start')}
</Button> </Button>
@@ -29,9 +29,10 @@ export const RowWrapper = ({
className={css({ className={css({
width: '100%', width: '100%',
background: 'gray.100', background: 'gray.100',
padding: '8px', paddingBlock: '0.5rem',
paddingInline: '0',
display: 'flex', display: 'flex',
marginTop: '4px', marginTop: '0.25rem',
})} })}
> >
<div <div
@@ -40,6 +41,7 @@ export const RowWrapper = ({
display: 'flex', display: 'flex',
justifyContent: 'center', justifyContent: 'center',
alignItems: 'center', alignItems: 'center',
paddingInline: '0.25rem',
})} })}
> >
{/* fixme - doesn't handle properly material-symbols */} {/* fixme - doesn't handle properly material-symbols */}
@@ -47,10 +49,11 @@ export const RowWrapper = ({
</div> </div>
<div <div
className={css({ className={css({
flex: 5, flex: 6,
display: 'flex', display: 'flex',
alignItems: 'center', alignItems: 'center',
gap: '0.25rem', gap: '0.25rem',
paddingInlineEnd: '8px',
})} })}
> >
{children} {children}
@@ -31,6 +31,12 @@ export const buttonRecipe = cva({
borderRadius: 4, borderRadius: 4,
'--square-padding': '0', '--square-padding': '0',
}, },
compact: {
borderRadius: 4,
paddingX: '0.5',
paddingY: '0.625',
'--square-padding': '{spacing.0.625}',
},
}, },
square: { square: {
true: { true: {
@@ -99,7 +99,7 @@ backend:
# Extra volume mounts to manage our local custom CA and avoid to set ssl_verify: false # Extra volume mounts to manage our local custom CA and avoid to set ssl_verify: false
extraVolumeMounts: extraVolumeMounts:
- name: certs - name: certs
mountPath: /usr/local/lib/python3.12/site-packages/certifi/cacert.pem mountPath: /usr/local/lib/python3.13/site-packages/certifi/cacert.pem
subPath: cacert.pem subPath: cacert.pem
# Extra volumes to manage our local custom CA and avoid to set ssl_verify: false # Extra volumes to manage our local custom CA and avoid to set ssl_verify: false
@@ -150,7 +150,7 @@ summary:
APP_NAME: summary-microservice APP_NAME: summary-microservice
APP_API_TOKEN: password APP_API_TOKEN: password
AWS_STORAGE_BUCKET_NAME: meet-media-storage AWS_STORAGE_BUCKET_NAME: meet-media-storage
AWS_S3_ENDPOINT_URL: minio.meet.svc.cluster.local:9000 AWS_S3_ENDPOINT_URL: http://minio.meet.svc.cluster.local:9000/
AWS_S3_ACCESS_KEY_ID: meet AWS_S3_ACCESS_KEY_ID: meet
AWS_S3_SECRET_ACCESS_KEY: password AWS_S3_SECRET_ACCESS_KEY: password
AWS_S3_SECURE_ACCESS: False AWS_S3_SECURE_ACCESS: False
@@ -187,7 +187,7 @@ celeryTranscribe:
APP_NAME: summary-microservice APP_NAME: summary-microservice
APP_API_TOKEN: password APP_API_TOKEN: password
AWS_STORAGE_BUCKET_NAME: meet-media-storage AWS_STORAGE_BUCKET_NAME: meet-media-storage
AWS_S3_ENDPOINT_URL: minio.meet.svc.cluster.local:9000 AWS_S3_ENDPOINT_URL: http://minio.meet.svc.cluster.local:9000/
AWS_S3_ACCESS_KEY_ID: meet AWS_S3_ACCESS_KEY_ID: meet
AWS_S3_SECRET_ACCESS_KEY: password AWS_S3_SECRET_ACCESS_KEY: password
AWS_S3_SECURE_ACCESS: False AWS_S3_SECURE_ACCESS: False
@@ -225,7 +225,7 @@ celerySummarize:
APP_NAME: summary-microservice APP_NAME: summary-microservice
APP_API_TOKEN: password APP_API_TOKEN: password
AWS_STORAGE_BUCKET_NAME: meet-media-storage AWS_STORAGE_BUCKET_NAME: meet-media-storage
AWS_S3_ENDPOINT_URL: minio.meet.svc.cluster.local:9000 AWS_S3_ENDPOINT_URL: http://minio.meet.svc.cluster.local:9000/
AWS_S3_ACCESS_KEY_ID: meet AWS_S3_ACCESS_KEY_ID: meet
AWS_S3_SECRET_ACCESS_KEY: password AWS_S3_SECRET_ACCESS_KEY: password
AWS_S3_SECURE_ACCESS: False AWS_S3_SECURE_ACCESS: False
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "mail_mjml", "name": "mail_mjml",
"version": "1.1.0", "version": "1.2.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "mail_mjml", "name": "mail_mjml",
"version": "1.1.0", "version": "1.2.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@html-to/text-cli": "0.5.4", "@html-to/text-cli": "0.5.4",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "mail_mjml", "name": "mail_mjml",
"version": "1.1.0", "version": "1.2.0",
"description": "An util to generate html and text django's templates from mjml templates", "description": "An util to generate html and text django's templates from mjml templates",
"type": "module", "type": "module",
"dependencies": { "dependencies": {
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "sdk", "name": "sdk",
"version": "1.1.0", "version": "1.2.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "sdk", "name": "sdk",
"version": "1.1.0", "version": "1.2.0",
"license": "ISC", "license": "ISC",
"workspaces": [ "workspaces": [
"./library", "./library",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "sdk", "name": "sdk",
"version": "1.1.0", "version": "1.2.0",
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"description": "", "description": "",
+1 -1
View File
@@ -1,7 +1,7 @@
[project] [project]
name = "summary" name = "summary"
version = "1.1.0" version = "1.2.0"
dependencies = [ dependencies = [
"fastapi[standard]>=0.105.0", "fastapi[standard]>=0.105.0",
"uvicorn>=0.24.0", "uvicorn>=0.24.0",
+7 -1
View File
@@ -21,8 +21,14 @@ class FileService:
"""Initialize FileService with MinIO client and configuration.""" """Initialize FileService with MinIO client and configuration."""
self._logger = logger self._logger = logger
endpoint = (
settings.aws_s3_endpoint_url.removeprefix("https://")
.removeprefix("http://")
.rstrip("/")
)
self._minio_client = Minio( self._minio_client = Minio(
settings.aws_s3_endpoint_url, endpoint,
access_key=settings.aws_s3_access_key_id, access_key=settings.aws_s3_access_key_id,
secret_key=settings.aws_s3_secret_access_key.get_secret_value(), secret_key=settings.aws_s3_secret_access_key.get_secret_value(),
secure=settings.aws_s3_secure_access, secure=settings.aws_s3_secure_access,