Commit Graph
37 Commits
Author SHA1 Message Date
Sylvain Zimmer 336da6f8fc review fixes 2026-06-09 14:17:14 +02:00
Sylvain Zimmer 27db845d43 ♻️(rfc5322) move email parsing & composing code to new jmap-email lib 2026-06-09 14:17:14 +02:00
Sylvain Zimmerandjbpenrath f360570798 (blobs) implement tiered storage and refactor blobs/attachments
This allows to use S3-compatible object storage to offload blobs, making Postgres much lighter. We design for storing ~1B emails on a single instance.

We also take this opportunity to do model changes on blobs & attachments.

Migration 0027 is one-way, no going back after this one so check your backups.
2026-05-20 20:48:00 +02:00
Sylvain ZimmerandGitHub a3ccc7a57b (channels) add encryption, custom scopes and levels, auditing (#599)
- Scoped API-key channels with per-scope authorization, personal user channels (users/me/channels), encrypted channel secrets, API-key regeneration (API + admin UI), channel last-used tracking, and a raw email submission endpoint.
 - Provisioning mailbox lookup/listing API.
 - Stricter outbound MIME size checks, DKIM signing improvements, and hardened channel/permission validation.
 - Expanded end-to-end and unit coverage for channels, auth/scopes, provisioning, submission, metrics, and admin flows.
2026-04-09 00:53:03 +02:00
Sylvain Zimmer 83005e058d 💚(ci) reuse amd64 frontend artifacts in arm64 build 2026-02-26 00:59:06 +01:00
Sylvain Zimmer 18dcdf6273 💚(ci) avoid cleaning up old attestations or releases 2026-02-25 15:15:54 +01:00
Sylvain Zimmer 7750ad835d 💚(docker) fix buildx digest sha256 computation 2026-02-25 12:53:22 +01:00
Sylvain Zimmer 6e5ddc81c0 💚(packages) add packages for tagged versions and fix multi-arch
Platform-specific images now have explicit tags (-amd64, -arm64) so delete-only-untagged-versions won't garbage collect them
2026-02-25 11:26:33 +01:00
jbpenrath bacc0128a7 💚(ci) fix crowdin_download workflow
We recently remove backend translation but this script
still tries to create a empty django.pot in an folder that
does not existe anymore and compile .mo files
2026-02-25 09:41:24 +01:00
Sylvain ZimmerandGitHub f18277b742 🔨(devx) update developer experience: uv, rustfs, caddy, new makefile (#556)
This large PR modernizes the backend of the app:
 - Python Dependency Management: Poetry → uv
 - Object Storage for local dev: MinIO (now unmaintained) → RustFS
 - Makefile Target Standardization to align with other LaSuite repos
 - Internationalization Removal on backend: we only care about i18n on the frontend
 - Backend dependencies upgrade
2026-02-23 12:30:36 +01:00
Stephan MeijerandGitHub 31361094e9 ⬆️(ci) upgrade GitHub Actions workflow steps to latest versions (#555)
Update all GitHub Actions to their latest major versions for improved
performance, security patches, and Node.js runtime compatibility.

Signed-off-by: Stephan Meijer <me@stephanmeijer.com>
2026-02-19 20:38:17 +01:00
Stephan MeijerandGitHub 9fd5eb6c43 👷(docker) add arm64 platform support for image builds (#554)
Signed-off-by: Stephan Meijer <me@stephanmeijer.com>
2026-02-19 18:11:58 +01:00
BastienandGitHub a67fd36c33 (ops) implement production docker images (#451)
* (ops) implement production docker images

Github workflows:
  - moved docker-publish jobs into a separate file on push main only
Backend:
  - added healthcheck on backend Dockerfile + minor fixes
  - bumped django to 5.1.15 to mitigate major CVE
  - moved /healthz endpoint to /__heartbeat__ + added db connection
    check
Frontend:
  - Added runtime-prod Dockerfile target + minor fixes on the Dockerfile
  - bump next to 15.5.9 to mitigate major CVE
  - moved nginx config to standard nginx container configuration
    template, fixed `scalingo_postfrontend` accordingly
Keycloak:
  - Added production Dockerfile
  - Removed scalingo_pgdump script & cron.json
socks-proxy:
  - added package upgrades run into runtime Dockerfile stage
Misc:
  - removed scalingo_pgdump.sh & cron.json
  - fixed compose and e2e nginx configs with /healthz replacement

* (fix) coderabbit recommandations
2026-01-12 15:18:25 +01:00
jbpenrath a87d8f4a46 (e2e) add first tests
Add first test to test import and send message

Resolve #238
2025-11-25 23:28:21 +01:00
Jean-Baptiste PENRATHandGitHub 2d9fd3e5a1 💚(crowdin) fix crowdin upload job (#399)
The `synchronize-with-crowdin` was not working since we add the msg-import
s3 storage.
2025-10-30 11:34:53 +01:00
Jean-Baptiste PENRATHandGitHub 10be269761 (import) Enhance message import through multipart upload (#372)
- Added multipart upload capabilities for EML and MBOX files to the
  message imports bucket.
- Introduced new API endpoints for initiating uploads, completing
  uploads, and aborting uploads.
- Updated serializers and viewsets to handle file uploads efficiently.
- Improved frontend components to display upload progress and handle
  file uploads seamlessly.
- Adjusted backend services to process uploaded files asynchronously,
  ensuring better performance and user experience.
- Updated documentation and tests to reflect the new functionality.
2025-10-14 17:31:17 +02:00
Jean-Baptiste PENRATHandGitHub 408f6e61de 💚(crowdin) push french translations through ci (#367)
Upload french translations only as we want to translate this language
during dev
2025-10-07 18:36:02 +02:00
jbpenrath 032501eb5f 🔧(crowdin) setup a crowdin workflow
Enable commands to upload and download translation file to/from crowdin.
Setup ci workflow to automatically update translation files on each merge on
main branch. Also add a worklow that can be manually triggered which is in
charge to update application translation files then open a PR.
2025-10-06 10:06:14 +02:00
03a8dc743d (mta) add Direct mode for MTA out (#285)
This PR adds support for 2 MTA out modes : Direct-to-MX and SMTP-relay outbound delivery. Direct mode supports SOCKS5 proxies, and we bundle a new `src/socks-proxy` component to support it.

We also add an end-to-end self-check command plus scheduled health-check task with optional Prometheus metrics.

---------

Co-authored-by: Bastien Ogier <bastien.ogier@ext.anct.gouv.fr>
Co-authored-by: Stanislas Bruhiere <stanislas@bruhiere.fr>
2025-09-04 15:48:46 +02:00
jbpenrath 7c07711489 👽️(openapi) improve user definition with or without abilities
The OpenAPI Schema does not embedded abilities property.
We fix that and make two serializers for User model in order to get proper
openapi definition for User instance with abilities and without abilities.
2025-07-31 17:19:23 +02:00
Sylvain ZimmerandGitHub 9b4ba9ba09 (dns) add admin page for DNS records (#283)
* (dns) add admin page for DNS records. Fixes #177

* 👷(dockerflow) add a flag to disable Dockerflow

* 💚(ghactions) fix check-api-update that was missing Orval

* 💚(ci) fix tests that depended on Keycloak

* ♻️(admin) refactor CopyableInput into a separate component

* 🎨(dns) improve code style
2025-07-21 14:41:08 +02:00
Sylvain ZimmerandSabrina Demagny 9bef38c53a 💚(lint) fix lint GH action 2025-07-18 14:11:29 +02:00
Sylvain ZimmerandSabrina Demagny 4545f4ff48 (roles) implement MailboxAccessRole.SENDER 2025-07-18 14:11:29 +02:00
Sylvain Zimmer 21ee4e9177 📈(posthog) add posthog.identify call to ID users' feedbacks 2025-07-17 22:32:47 +02:00
BastienandGitHub 286e01f3e8 actions: cleanup container tags and add the retention action. (#269) 2025-07-15 14:04:55 +02:00
jbpenrath 5e72ec0c6d 💚(ci) fix lint-all job
Use the command `make lint` instead of the deleted `make lint-check`
2025-07-15 13:55:51 +02:00
Sylvain Zimmer d93f1a9e71 💚(actions) fix github action with dockerfile target stage 2025-07-15 11:29:20 +02:00
Sylvain ZimmerandGitHub f1a89a5bdb (all) refactor several areas before 0.1 release (#265)
We are going to release a 0.1 version soon, along with our first production deployment. Starting from there, migrations and a consistent developer experience will be officially supported. To make that easier, this large patch cleans up several areas:
 * Reset migrations one last time
 * Update models for storage efficiency (move textchoices to integerchoices on high-volume tables)
 * Use Blobs for mail mime data and draft bodies. Having them in a separate PG table is a first step, we will later start offloading them to object storage.
 * Add default ZSTD compression to blobs
 * Add per-domain DKIM Keys
 * Add DNS check and provisioning, with a first Scaleway provider
 * Fix Keycloak user provisioning
 * Fix Attachment storage, they are now stored individually only at the drafting stage. Afterwards they are extracted from the main blob. This may be optimized later but at least we only store once. For JMAP compatibility, this requires using fake IDs in the blob API route.
 * Add a management command and recurring task to retry unsent messages
 * Improve the local developer experience with new ports and make commands
 * Repackage MTA-in and MTA-out to be closer to Backend: Poetry, multi-step Dockerfile, move compose and makefile to the root
 * Migrate to OpenSearch
 * Improve overall documentation and add a self-hosting page

Contributes to #177 and #185
2025-07-15 10:41:55 +02:00
Bastien Ogier 1c3d218042 ci: docker build and push mta-in and mta-out. 2025-07-09 20:25:57 +00:00
Sabrina Demagny d39932c353 💚(backend) fix lint and collectstatic needed
Fix lint failures and run collectstatic
before running tests
2025-06-02 16:47:29 +02:00
Jean-Baptiste PENRATHandGitHub 7ddcc668f3 💚(ci) add job check-api-state (#111)
Add a job to ensure that api schema and client
are up-to-date.
2025-05-21 22:22:27 +02:00
Sylvain ZimmerandGitHub 1f4047a061 (celery) add Celery worker, search, recipient statuses, better build (#88)
Before, sending was done synchronously on the api/send POST call. Now
we just build the MIME message and mark the message for sending, and
queue the actual SMTP (or internal) sending for the worker. We use
this opportunity to add fine-grained delivery statuses for each
recipient, something that traditional email systems are unable to do!

Expanding on that, this (too large) PR adds an initial Elasticsearch
index of threads. It also overhauls the build and CI system, using
Poetry instead of Pip.
2025-05-13 00:52:48 +02:00
Sylvain Zimmer 318cb72aa9 (rfc5322) add stronger RFC5322 parsing and connect to MTAs
This large commit upgrades our raw email parsing from the native
Python library to the Flanker package.
2025-04-22 10:34:26 +02:00
jbpenrath 925f71f8a1 💚(ci) add jobs to check frontend
Run test, lint and try to build the front
2025-04-22 10:24:18 +02:00
jbpenrath e9abfcac9a 💚(ci) fix lint-back job
Since we added a setup.py module, the lint-back was failing
as setuptools was not install in the ci job
2025-04-16 22:09:07 +02:00
Sabrina Demagny 74332e4642 👷(ci) run tests and linters 2025-04-15 17:50:12 +02:00
Sylvain Zimmer 53db5a748d 🎉(all) bootstrap the Messages project
We used the Drive repository as starting point. There are still
some leftovers that will be cleaned up over time.
2025-04-13 18:48:04 +02:00