From f81e3291bdd57af9ceedb2987b111acc7051d69c Mon Sep 17 00:00:00 2001 From: Tom Date: Tue, 31 Mar 2026 03:06:39 -0700 Subject: [PATCH 1/8] fix: test failure due to wrong assertion (#707) --- crates/core/parser/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/core/parser/src/lib.rs b/crates/core/parser/src/lib.rs index bb5b50d7..27211c1b 100644 --- a/crates/core/parser/src/lib.rs +++ b/crates/core/parser/src/lib.rs @@ -262,7 +262,7 @@ mod tests { ) .collect::>(); - assert_eq!(output.len(), 6); + assert_eq!(output.len(), 7); assert_eq!(output[0], MessageToken::CodeblockMarker(1)); assert_eq!( output[1], From f30b729ca90d0be6853c57ab4935694e5e59ae56 Mon Sep 17 00:00:00 2001 From: Tom Date: Tue, 31 Mar 2026 15:25:36 -0700 Subject: [PATCH 2/8] fix: don't send self dm notifications (#706) * fix: don't send self dm notifications Signed-off-by: IAmTomahawkx * fix: test failure due to wrong assertion (#707) Signed-off-by: IAmTomahawkx * fix: RA auto import moment Signed-off-by: IAmTomahawkx --------- Signed-off-by: IAmTomahawkx --- crates/core/database/src/models/messages/model.rs | 8 ++++++-- crates/core/models/src/v0/messages.rs | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/core/database/src/models/messages/model.rs b/crates/core/database/src/models/messages/model.rs index fc417d79..bacb3c53 100644 --- a/crates/core/database/src/models/messages/model.rs +++ b/crates/core/database/src/models/messages/model.rs @@ -705,7 +705,7 @@ impl Message { Some( PushNotification::from( self.clone().into_model(user, member), - Some(author), + Some(author.clone()), channel.to_owned().into(), ) .await, @@ -713,7 +713,11 @@ impl Message { self.clone(), match channel { Channel::DirectMessage { recipients, .. } - | Channel::Group { recipients, .. } => recipients.clone(), + | Channel::Group { recipients, .. } => recipients + .iter() + .filter(|uid| *uid != author.id()) + .cloned() + .collect(), Channel::TextChannel { .. } => { self.mentions.clone().unwrap_or_default() } diff --git a/crates/core/models/src/v0/messages.rs b/crates/core/models/src/v0/messages.rs index e1183175..2b03d211 100644 --- a/crates/core/models/src/v0/messages.rs +++ b/crates/core/models/src/v0/messages.rs @@ -391,6 +391,7 @@ auto_derived!( ); /// Message Author Abstraction +#[derive(Clone)] pub enum MessageAuthor<'a> { User(&'a User), Webhook(&'a Webhook), From f2c056a1515be493b195f3f5db5886c2ddf36700 Mon Sep 17 00:00:00 2001 From: Angelo Kontaxis Date: Thu, 2 Apr 2026 03:48:22 +0100 Subject: [PATCH 3/8] fix: add migration to update existing files to be animated (#705) * fix: add migration to update existing files to be animated Signed-off-by: Zomatree * Revert "fix: add migration to update existing files to be animated" This reverts commit 4e1f1c116cd2a7f648889ce8f0c8a951024fb90e. Signed-off-by: Zomatree * fix: calculate animated for existing files when fetched Signed-off-by: Zomatree --------- Signed-off-by: Zomatree --- .../database/src/models/file_hashes/model.rs | 3 +- .../database/src/models/file_hashes/ops.rs | 6 +++ .../src/models/file_hashes/ops/mongodb.rs | 23 ++++++++++ .../src/models/file_hashes/ops/reference.rs | 26 +++++++++++- crates/core/models/src/v0/files.rs | 2 +- crates/services/autumn/src/api.rs | 42 ++++++++++++++++--- crates/services/autumn/src/metadata.rs | 2 +- 7 files changed, 92 insertions(+), 12 deletions(-) diff --git a/crates/core/database/src/models/file_hashes/model.rs b/crates/core/database/src/models/file_hashes/model.rs index b25abb12..dfc9b96e 100644 --- a/crates/core/database/src/models/file_hashes/model.rs +++ b/crates/core/database/src/models/file_hashes/model.rs @@ -46,8 +46,7 @@ auto_derived!( width: isize, height: isize, thumbhash: Option>, - #[serde(default)] - animated: bool, + animated: Option, }, /// File is a video with specific dimensions Video { width: isize, height: isize }, diff --git a/crates/core/database/src/models/file_hashes/ops.rs b/crates/core/database/src/models/file_hashes/ops.rs index 4b249e4c..cdd6c936 100644 --- a/crates/core/database/src/models/file_hashes/ops.rs +++ b/crates/core/database/src/models/file_hashes/ops.rs @@ -17,6 +17,12 @@ pub trait AbstractAttachmentHashes: Sync + Send { /// Update an attachment hash nonce value. async fn set_attachment_hash_nonce(&self, hash: &str, nonce: &str) -> Result<()>; + /// Updates the attachments animated metadata value. + /// + /// The primary use for this is to update the metadata for existing uploaded files, this + /// can only be used for images. + async fn set_attachment_hash_animated(&self, hash: &str, animated: bool) -> Result<()>; + /// Delete attachment hash by id. async fn delete_attachment_hash(&self, id: &str) -> Result<()>; } diff --git a/crates/core/database/src/models/file_hashes/ops/mongodb.rs b/crates/core/database/src/models/file_hashes/ops/mongodb.rs index e2f06067..9e67a0a5 100644 --- a/crates/core/database/src/models/file_hashes/ops/mongodb.rs +++ b/crates/core/database/src/models/file_hashes/ops/mongodb.rs @@ -48,6 +48,29 @@ impl AbstractAttachmentHashes for MongoDb { .map_err(|_| create_database_error!("update_one", COL)) } + /// Updates the attachments animated metadata value. + /// + /// The primary use for this is to update the metadata for existing uploaded files, this + /// can only be used for images. + async fn set_attachment_hash_animated(&self, hash: &str, animated: bool) -> Result<()> { + self.col::(COL) + .update_one( + doc! { + "_id": hash, + "metadata.type": "Image", + "metadata.animated": { "$exists": false }, + }, + doc! { + "$set": { + "metadata.animated": animated + } + }, + ) + .await + .map(|_| ()) + .map_err(|_| create_database_error!("update_one", COL)) + } + /// Delete attachment hash by id. async fn delete_attachment_hash(&self, id: &str) -> Result<()> { query!(self, delete_one_by_id, COL, id).map(|_| ()) diff --git a/crates/core/database/src/models/file_hashes/ops/reference.rs b/crates/core/database/src/models/file_hashes/ops/reference.rs index 7733523e..3c54d9e2 100644 --- a/crates/core/database/src/models/file_hashes/ops/reference.rs +++ b/crates/core/database/src/models/file_hashes/ops/reference.rs @@ -1,7 +1,6 @@ use revolt_result::Result; -use crate::FileHash; -use crate::ReferenceDb; +use crate::{FileHash, Metadata, ReferenceDb}; use super::AbstractAttachmentHashes; @@ -39,6 +38,29 @@ impl AbstractAttachmentHashes for ReferenceDb { } } + /// Updates the attachments animated metadata value. + /// + /// The primary use for this is to update the metadata for existing uploaded files, this + /// can only be used for images. + async fn set_attachment_hash_animated(&self, hash: &str, animated: bool) -> Result<()> { + let mut hashes = self.file_hashes.lock().await; + if let Some(FileHash { + metadata: + Metadata::Image { + animated: Some(animated_metadata), + .. + }, + .. + }) = hashes.get_mut(hash) + { + *animated_metadata = animated; + + Ok(()) + } else { + Err(create_error!(NotFound)) + } + } + /// Delete attachment hash by id. async fn delete_attachment_hash(&self, id: &str) -> Result<()> { let mut file_hashes = self.file_hashes.lock().await; diff --git a/crates/core/models/src/v0/files.rs b/crates/core/models/src/v0/files.rs index 32ccf0e1..2d68b7f2 100644 --- a/crates/core/models/src/v0/files.rs +++ b/crates/core/models/src/v0/files.rs @@ -51,7 +51,7 @@ auto_derived!( width: usize, height: usize, thumbhash: Option>, - animated: bool, + animated: Option, }, /// File is a video with specific dimensions Video { width: usize, height: usize }, diff --git a/crates/services/autumn/src/api.rs b/crates/services/autumn/src/api.rs index 4018e72c..49a61c43 100644 --- a/crates/services/autumn/src/api.rs +++ b/crates/services/autumn/src/api.rs @@ -1,5 +1,5 @@ use std::{ - io::{Cursor, Read}, + io::{Cursor, Read, Write}, time::Duration, }; @@ -15,9 +15,10 @@ use lazy_static::lazy_static; use revolt_config::{config, report_internal_error}; use revolt_database::{iso8601_timestamp::Timestamp, Database, FileHash, Metadata, User}; use revolt_files::{ - create_thumbnail, decode_image, fetch_from_s3, upload_to_s3, AUTHENTICATION_TAG_SIZE_BYTES, + create_thumbnail, decode_image, fetch_from_s3, is_animated, upload_to_s3, + AUTHENTICATION_TAG_SIZE_BYTES, }; -use revolt_result::{create_error, Error, Result}; +use revolt_result::{create_error, Error, Result, ToRevoltError}; use serde::{Deserialize, Serialize}; use sha2::Digest; use tempfile::NamedTempFile; @@ -25,7 +26,9 @@ use tokio::time::Instant; use tower_http::cors::{AllowHeaders, Any, CorsLayer}; use utoipa::ToSchema; -use crate::{exif::strip_metadata, metadata::generate_metadata, mime_type::determine_mime_type, AppState}; +use crate::{ + exif::strip_metadata, metadata::generate_metadata, mime_type::determine_mime_type, AppState, +}; /// Build the API router pub async fn router() -> Router { @@ -380,7 +383,30 @@ async fn fetch_preview( let hash = file.as_hash(&db).await?; - let is_animated = matches!(hash.metadata, Metadata::Image { animated: true, .. }); + let mut data = None; + + // If animated is unset, check the file contents to see if it is animated and update the filehash + let is_animated = match &hash.metadata { + Metadata::Image { + animated: Some(value), + .. + } => *value, + Metadata::Image { animated: None, .. } => { + let file_data = retrieve_file_by_hash(&hash).await?; + + let mut named_file = NamedTempFile::new().to_internal_error()?; + named_file.write(&file_data).to_internal_error()?; + + data = Some(file_data); + + // If it fails for some reason, set it to not be animated + let animated = is_animated(&named_file, &hash.content_type).unwrap_or(false); + db.set_attachment_hash_animated(&hash.id, animated).await?; + + animated + } + _ => false, + }; // Only process image files and don't process GIFs if not avatar or icon if !matches!(hash.metadata, Metadata::Image { .. }) @@ -392,7 +418,11 @@ async fn fetch_preview( } // Original image data - let data = retrieve_file_by_hash(&hash).await?; + let data = if let Some(data) = data { + data + } else { + retrieve_file_by_hash(&hash).await? + }; // Read image and create thumbnail let data = create_thumbnail( diff --git a/crates/services/autumn/src/metadata.rs b/crates/services/autumn/src/metadata.rs index 3493cf49..8e0c89cd 100644 --- a/crates/services/autumn/src/metadata.rs +++ b/crates/services/autumn/src/metadata.rs @@ -37,7 +37,7 @@ pub fn generate_metadata(f: &NamedTempFile, mime_type: &str) -> Metadata { thumbhash::rgba_to_thumb_hash(width as usize, height as usize, &rgba) }) .ok(), - animated: is_animated(f, mime_type).unwrap_or(false), + animated: is_animated(f, mime_type).or(Some(false)), }) .unwrap_or_default() } else if mime_type.starts_with("video/") { From fb8fe1655776791421284a6a093e86f0320c258a Mon Sep 17 00:00:00 2001 From: Damocles <106018783+Damocles078@users.noreply.github.com> Date: Thu, 2 Apr 2026 04:51:14 +0200 Subject: [PATCH 4/8] fix: mise start + missing docker image (#564) * fix: mise start + missing docker image Signed-off-by: Damocles078 * fix: bump livekit version Signed-off-by: Damocles <106018783+Damocles078@users.noreply.github.com> --------- Signed-off-by: Damocles078 Signed-off-by: Tom Signed-off-by: Damocles <106018783+Damocles078@users.noreply.github.com> Co-authored-by: Tom --- .mise/config.toml | 9 ++++++++ .mise/tasks/build | 2 +- .mise/tasks/docker/start | 8 +++++++ README.md | 46 ++++++++++++++++++++++------------------ 4 files changed, 43 insertions(+), 22 deletions(-) diff --git a/.mise/config.toml b/.mise/config.toml index 85fcd898..f5238e77 100644 --- a/.mise/config.toml +++ b/.mise/config.toml @@ -16,4 +16,13 @@ idiomatic_version_file_enable_tools = ["rust"] [tasks.start] description = "Run all services" depends = ["docker:start", "build"] +wait_for = ["docker:start", "build"] run = [{ task = "service:*" }] + +[env] +BUILDER = "cargo" +DOCKER_NETWORK_NAME = "stoatchat_default" +DATABASE_PORT = "27017" +RABBIT_PORT = "5672" +REDIS_PORT = "6379" +_.file = { path = ".env", tools = true } diff --git a/.mise/tasks/build b/.mise/tasks/build index c97c28d8..2e584eaf 100755 --- a/.mise/tasks/build +++ b/.mise/tasks/build @@ -2,4 +2,4 @@ #MISE description="Build project" set -e -cargo build "$@" +${BUILDER} build "$@" diff --git a/.mise/tasks/docker/start b/.mise/tasks/docker/start index cfcb0a9a..c045a4bd 100755 --- a/.mise/tasks/docker/start +++ b/.mise/tasks/docker/start @@ -3,3 +3,11 @@ set -e docker compose up -d + +docker run \ +--network=${DOCKER_NETWORK_NAME} \ +--name wait \ +--rm dokku/wait -c \ +rabbit:${RABBIT_PORT},\ +database:${DATABASE_PORT},\ +redis:${REDIS_PORT} diff --git a/README.md b/README.md index dd62769a..e090149e 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,14 @@ mise install mise build ``` +> [!TIP] +> You can override `BUILDER` in your `.env` file to run cargo with mold if you installed it: +> +> ```bash +> # .env +> BUILDER = "mold --run cargo" +> ``` + A default configuration `Revolt.toml` is present in this project that is suited for development. If you'd like to change anything, create a `Revolt.overrides.toml` file and specify relevant variables. @@ -112,7 +120,7 @@ If you'd like to change anything, create a `Revolt.overrides.toml` file and spec > - "14672:15672" > ``` > -> And corresponding Revolt configuration: +> With the corresponding Revolt configuration: > > ```toml > # Revolt.overrides.toml @@ -124,32 +132,25 @@ If you'd like to change anything, create a `Revolt.overrides.toml` file and spec > [rabbit] > port = 14072 > ``` +> +> And mise configuration +> +> ```bash +> #.env +> DATABASE_PORT = "14017" +> RABBIT_PORT = "14072" +> REDIS_PORT = "14079" +> ``` Then continue: ```bash -# start other necessary services -docker compose up -d +cp livekit.example.yml livekit.yml -# run the API server -cargo run --bin revolt-delta -# run the events server -cargo run --bin revolt-bonfire -# run the file server -cargo run --bin revolt-autumn -# run the proxy server -cargo run --bin revolt-january -# run the tenor proxy -cargo run --bin revolt-gifbox -# run the push daemon (not usually needed in regular development) -cargo run --bin revolt-pushd - -# hint: -# mold -run -# mold -run ./scripts/start.sh +mise start ``` -You can start a web client by doing the following: +You can start a web client by doing the following in another terminal: ```bash # if you do not have yarn yet and have a modern Node.js: @@ -163,6 +164,9 @@ cd stoat-web When signing up, go to http://localhost:14080 to find confirmation/password reset emails. +To stop all services, hit (CTRL + c) in the terminal you ran `mise start` and run `mise docker:stop` + + ## Deployment Guide ### Cutting new crate releases @@ -198,7 +202,7 @@ If you have bumped the crate versions, proceed to [GitHub releases](https://gith First, start the required services: ```sh -docker compose -f docker-compose.db.yml up -d +docker compose up -d ``` Now run tests for whichever database: From 4ea8f90c0d8eaad253ba152682a013a014eb57bd Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Fri, 3 Apr 2026 00:28:49 +0100 Subject: [PATCH 5/8] docs: update donation link (#709) --- docs/docs/help.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/help.md b/docs/docs/help.md index 91887e6b..7de5ca51 100644 --- a/docs/docs/help.md +++ b/docs/docs/help.md @@ -23,7 +23,7 @@ You can contribute translations through [**Weblate**](https://translate.stoat.ch ### 3. Donate Stoat is not backed by a big company, is not currently monetised (for example, via a subscription service) and does not serve you advertisements; as such, Stoat currently relies entirely on donations. -You can learn more about donating [here](https://wiki.revolt.chat/notes/project/financial-support/) - if you want to make a larger donation, please consult me first. +You can learn more about donating [here](https://ko-fi.com/stoatchat) - if you want to make a larger donation, please consult me first. ### 4. Join the project From 47336a7940a076e358ffd3c78d0614512c96f728 Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Fri, 10 Apr 2026 20:44:29 +0100 Subject: [PATCH 6/8] docs: pr template (#713) --- .github/pull_request_template.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..da918526 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,24 @@ + + +Fixes # (issue) + +## How was this PR tested? + + + +- [ ] Test A +- [ ] Test B + +## Checklist: + +- [ ] I have carefully read [the contributing guidelines](https://developers.stoat.chat/developing/contrib/) +- [ ] I have performed a self-review of my own code +- [ ] I have made corresponding changes to the documentation if applicable +- [ ] I have no unrelated changes in the PR +- [ ] I have confirmed that any new dependencies are strictly necessary +- [ ] I have written tests for new code (if applicable) +- [ ] I have followed naming conventions/patterns in the surrounding code + +## Please declare, if any, LLM usage involved in creating this PR + +... From 61fd13629f9fbf750139c8928f83750502428179 Mon Sep 17 00:00:00 2001 From: "stoat-release[bot]" <245062572+stoat-release[bot]@users.noreply.github.com> Date: Sat, 11 Apr 2026 12:31:11 +0100 Subject: [PATCH 7/8] chore(main): release 0.12.1 (#700) Co-authored-by: stoat-release[bot] <245062572+stoat-release[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] --- .release-please-manifest.json | 2 +- CHANGELOG.md | 10 +++++++ Cargo.lock | 36 ++++++++++++------------- crates/bonfire/Cargo.toml | 2 +- crates/core/coalesced/Cargo.toml | 2 +- crates/core/config/Cargo.toml | 4 +-- crates/core/database/Cargo.toml | 14 +++++----- crates/core/files/Cargo.toml | 6 ++--- crates/core/models/Cargo.toml | 6 ++--- crates/core/parser/Cargo.toml | 2 +- crates/core/permissions/Cargo.toml | 4 +-- crates/core/presence/Cargo.toml | 4 +-- crates/core/ratelimits/Cargo.toml | 8 +++--- crates/core/result/Cargo.toml | 2 +- crates/daemons/crond/Cargo.toml | 10 +++---- crates/daemons/pushd/Cargo.toml | 14 +++++----- crates/daemons/voice-ingress/Cargo.toml | 2 +- crates/delta/Cargo.toml | 2 +- crates/services/autumn/Cargo.toml | 12 ++++----- crates/services/gifbox/Cargo.toml | 14 +++++----- crates/services/january/Cargo.toml | 10 +++---- version.txt | 2 +- 22 files changed, 89 insertions(+), 79 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 53d4a3f2..8950f712 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.12.0" + ".": "0.12.1" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 7153a56f..cc7f7328 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [0.12.1](https://github.com/stoatchat/stoatchat/compare/v0.12.0...v0.12.1) (2026-04-10) + + +### Bug Fixes + +* add migration to update existing files to be animated ([#705](https://github.com/stoatchat/stoatchat/issues/705)) ([f2c056a](https://github.com/stoatchat/stoatchat/commit/f2c056a1515be493b195f3f5db5886c2ddf36700)) +* don't send self dm notifications ([#706](https://github.com/stoatchat/stoatchat/issues/706)) ([f30b729](https://github.com/stoatchat/stoatchat/commit/f30b729ca90d0be6853c57ab4935694e5e59ae56)) +* mise start + missing docker image ([#564](https://github.com/stoatchat/stoatchat/issues/564)) ([fb8fe16](https://github.com/stoatchat/stoatchat/commit/fb8fe1655776791421284a6a093e86f0320c258a)) +* test failure due to wrong assertion ([#707](https://github.com/stoatchat/stoatchat/issues/707)) ([f81e329](https://github.com/stoatchat/stoatchat/commit/f81e3291bdd57af9ceedb2987b111acc7051d69c)) + ## [0.12.0](https://github.com/stoatchat/stoatchat/compare/v0.11.5...v0.12.0) (2026-03-28) diff --git a/Cargo.lock b/Cargo.lock index 99a062dc..96987c74 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6798,7 +6798,7 @@ dependencies = [ [[package]] name = "revolt-autumn" -version = "0.12.0" +version = "0.12.1" dependencies = [ "axum", "axum-macros", @@ -6837,7 +6837,7 @@ dependencies = [ [[package]] name = "revolt-bonfire" -version = "0.12.0" +version = "0.12.1" dependencies = [ "async-channel 2.5.0", "async-std", @@ -6868,7 +6868,7 @@ dependencies = [ [[package]] name = "revolt-coalesced" -version = "0.12.0" +version = "0.12.1" dependencies = [ "indexmap 2.13.0", "lru 0.16.3", @@ -6877,7 +6877,7 @@ dependencies = [ [[package]] name = "revolt-config" -version = "0.12.0" +version = "0.12.1" dependencies = [ "async-std", "cached", @@ -6894,7 +6894,7 @@ dependencies = [ [[package]] name = "revolt-crond" -version = "0.12.0" +version = "0.12.1" dependencies = [ "log", "revolt-config", @@ -6906,7 +6906,7 @@ dependencies = [ [[package]] name = "revolt-database" -version = "0.12.0" +version = "0.12.1" dependencies = [ "amqprs", "async-lock 2.8.0", @@ -6956,7 +6956,7 @@ dependencies = [ [[package]] name = "revolt-delta" -version = "0.12.0" +version = "0.12.1" dependencies = [ "amqprs", "async-channel 1.9.0", @@ -7006,7 +7006,7 @@ dependencies = [ [[package]] name = "revolt-files" -version = "0.12.0" +version = "0.12.1" dependencies = [ "aes-gcm", "anyhow", @@ -7034,7 +7034,7 @@ dependencies = [ [[package]] name = "revolt-gifbox" -version = "0.12.0" +version = "0.12.1" dependencies = [ "axum", "axum-extra", @@ -7057,7 +7057,7 @@ dependencies = [ [[package]] name = "revolt-january" -version = "0.12.0" +version = "0.12.1" dependencies = [ "async-recursion", "axum", @@ -7085,7 +7085,7 @@ dependencies = [ [[package]] name = "revolt-models" -version = "0.12.0" +version = "0.12.1" dependencies = [ "indexmap 1.9.3", "iso8601-timestamp", @@ -7104,14 +7104,14 @@ dependencies = [ [[package]] name = "revolt-parser" -version = "0.12.0" +version = "0.12.1" dependencies = [ "logos", ] [[package]] name = "revolt-permissions" -version = "0.12.0" +version = "0.12.1" dependencies = [ "async-std", "async-trait", @@ -7126,7 +7126,7 @@ dependencies = [ [[package]] name = "revolt-presence" -version = "0.12.0" +version = "0.12.1" dependencies = [ "async-std", "log", @@ -7138,7 +7138,7 @@ dependencies = [ [[package]] name = "revolt-pushd" -version = "0.12.0" +version = "0.12.1" dependencies = [ "amqprs", "anyhow", @@ -7169,7 +7169,7 @@ dependencies = [ [[package]] name = "revolt-ratelimits" -version = "0.12.0" +version = "0.12.1" dependencies = [ "async-trait", "authifier", @@ -7186,7 +7186,7 @@ dependencies = [ [[package]] name = "revolt-result" -version = "0.12.0" +version = "0.12.1" dependencies = [ "axum", "log", @@ -7202,7 +7202,7 @@ dependencies = [ [[package]] name = "revolt-voice-ingress" -version = "0.12.0" +version = "0.12.1" dependencies = [ "amqprs", "async-std", diff --git a/crates/bonfire/Cargo.toml b/crates/bonfire/Cargo.toml index e4481b1c..c5f42a47 100644 --- a/crates/bonfire/Cargo.toml +++ b/crates/bonfire/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-bonfire" -version = "0.12.0" +version = "0.12.1" license = "AGPL-3.0-or-later" edition = "2021" publish = false diff --git a/crates/core/coalesced/Cargo.toml b/crates/core/coalesced/Cargo.toml index 4b589c0d..2e770bd7 100644 --- a/crates/core/coalesced/Cargo.toml +++ b/crates/core/coalesced/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-coalesced" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "MIT" authors = ["Paul Makles ", "Zomatree "] diff --git a/crates/core/config/Cargo.toml b/crates/core/config/Cargo.toml index ad1ee469..e74cbca4 100644 --- a/crates/core/config/Cargo.toml +++ b/crates/core/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-config" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "MIT" authors = ["Paul Makles "] @@ -38,4 +38,4 @@ sentry = { version = "0.31.5", optional = true } sentry-anyhow = { version = "0.38.1", optional = true } # Core -revolt-result = { version = "0.12.0", path = "../result", optional = true } +revolt-result = { version = "0.12.1", path = "../result", optional = true } diff --git a/crates/core/database/Cargo.toml b/crates/core/database/Cargo.toml index 05a66179..fafbccd4 100644 --- a/crates/core/database/Cargo.toml +++ b/crates/core/database/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-database" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "AGPL-3.0-or-later" authors = ["Paul Makles "] @@ -32,19 +32,19 @@ default = ["mongodb", "async-std-runtime", "tasks"] [dependencies] # Core -revolt-config = { version = "0.12.0", path = "../config", features = [ +revolt-config = { version = "0.12.1", path = "../config", features = [ "report-macros", ] } -revolt-result = { version = "0.12.0", path = "../result" } -revolt-models = { version = "0.12.0", path = "../models", features = [ +revolt-result = { version = "0.12.1", path = "../result" } +revolt-models = { version = "0.12.1", path = "../models", features = [ "validator", ] } -revolt-presence = { version = "0.12.0", path = "../presence" } -revolt-permissions = { version = "0.12.0", path = "../permissions", features = [ +revolt-presence = { version = "0.12.1", path = "../presence" } +revolt-permissions = { version = "0.12.1", path = "../permissions", features = [ "serde", "bson", ] } -revolt-parser = { version = "0.12.0", path = "../parser" } +revolt-parser = { version = "0.12.1", path = "../parser" } # Utility log = "0.4" diff --git a/crates/core/files/Cargo.toml b/crates/core/files/Cargo.toml index 2a4a5205..926b8c15 100644 --- a/crates/core/files/Cargo.toml +++ b/crates/core/files/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-files" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "AGPL-3.0-or-later" authors = ["Paul Makles "] @@ -27,10 +27,10 @@ typenum = "1.17.0" aws-config = "1.5.5" aws-sdk-s3 = { version = "1.46.0", features = ["behavior-version-latest"] } -revolt-config = { version = "0.12.0", path = "../config", features = [ +revolt-config = { version = "0.12.1", path = "../config", features = [ "report-macros", ] } -revolt-result = { version = "0.12.0", path = "../result" } +revolt-result = { version = "0.12.1", path = "../result" } # image processing jxl-oxide = { workspace = true } diff --git a/crates/core/models/Cargo.toml b/crates/core/models/Cargo.toml index a1a65e19..34fd5a15 100644 --- a/crates/core/models/Cargo.toml +++ b/crates/core/models/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-models" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "MIT" authors = ["Paul Makles "] @@ -21,8 +21,8 @@ default = ["serde", "partials", "rocket"] [dependencies] # Core -revolt-config = { version = "0.12.0", path = "../config" } -revolt-permissions = { version = "0.12.0", path = "../permissions" } +revolt-config = { version = "0.12.1", path = "../config" } +revolt-permissions = { version = "0.12.1", path = "../permissions" } # Utility regex = "1.11" diff --git a/crates/core/parser/Cargo.toml b/crates/core/parser/Cargo.toml index f542b7aa..20d9e8c7 100644 --- a/crates/core/parser/Cargo.toml +++ b/crates/core/parser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-parser" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "MIT" authors = ["Zomatree ", "Paul Makles "] diff --git a/crates/core/permissions/Cargo.toml b/crates/core/permissions/Cargo.toml index 98edf99b..f351e059 100644 --- a/crates/core/permissions/Cargo.toml +++ b/crates/core/permissions/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-permissions" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "MIT" authors = ["Paul Makles "] @@ -22,7 +22,7 @@ async-std = { version = "1.8.0", features = ["attributes"] } [dependencies] # Core -revolt-result = { version = "0.12.0", path = "../result" } +revolt-result = { version = "0.12.1", path = "../result" } # Utility auto_ops = "0.3.0" diff --git a/crates/core/presence/Cargo.toml b/crates/core/presence/Cargo.toml index 3b3ce3ee..899fef51 100644 --- a/crates/core/presence/Cargo.toml +++ b/crates/core/presence/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-presence" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "AGPL-3.0-or-later" authors = ["Paul Makles "] @@ -17,7 +17,7 @@ redis-is-patched = [] async-std = { version = "1.8.0", features = ["attributes"] } # Config for loading Redis URI -revolt-config = { version = "0.12.0", path = "../config" } +revolt-config = { version = "0.12.1", path = "../config" } [dependencies] # Utility diff --git a/crates/core/ratelimits/Cargo.toml b/crates/core/ratelimits/Cargo.toml index 54c1a702..0bdca6bf 100644 --- a/crates/core/ratelimits/Cargo.toml +++ b/crates/core/ratelimits/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-ratelimits" -version = "0.12.0" +version = "0.12.1" edition = "2024" license = "MIT" authors = ["Zomatree ", "Paul Makles "] @@ -18,9 +18,9 @@ axum = ["dep:axum", "revolt-database/axum-impl"] default = ["rocket", "axum"] [dependencies] -revolt-database = { version = "0.12.0", path = "../database" } -revolt-result = { version = "0.12.0", path = "../result" } -revolt-config = { version = "0.12.0", path = "../config" } +revolt-database = { version = "0.12.1", path = "../database" } +revolt-result = { version = "0.12.1", path = "../result" } +revolt-config = { version = "0.12.1", path = "../config" } rocket = { version = "0.5.1", optional = true } revolt_rocket_okapi = { version = "0.10.0", optional = true } diff --git a/crates/core/result/Cargo.toml b/crates/core/result/Cargo.toml index 0ebcc4e2..de21e357 100644 --- a/crates/core/result/Cargo.toml +++ b/crates/core/result/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-result" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "MIT" authors = ["Paul Makles "] diff --git a/crates/daemons/crond/Cargo.toml b/crates/daemons/crond/Cargo.toml index 1f9de2b0..570729cd 100644 --- a/crates/daemons/crond/Cargo.toml +++ b/crates/daemons/crond/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-crond" -version = "0.12.0" +version = "0.12.1" license = "AGPL-3.0-or-later" authors = ["Paul Makles "] edition = "2021" @@ -17,7 +17,7 @@ log = "0.4" tokio = { version = "1" } # Core -revolt-database = { version = "0.12.0", path = "../../core/database" } -revolt-result = { version = "0.12.0", path = "../../core/result" } -revolt-config = { version = "0.12.0", path = "../../core/config" } -revolt-files = { version = "0.12.0", path = "../../core/files" } +revolt-database = { version = "0.12.1", path = "../../core/database" } +revolt-result = { version = "0.12.1", path = "../../core/result" } +revolt-config = { version = "0.12.1", path = "../../core/config" } +revolt-files = { version = "0.12.1", path = "../../core/files" } diff --git a/crates/daemons/pushd/Cargo.toml b/crates/daemons/pushd/Cargo.toml index 95e13fb2..2a3d4fc1 100644 --- a/crates/daemons/pushd/Cargo.toml +++ b/crates/daemons/pushd/Cargo.toml @@ -1,24 +1,24 @@ [package] name = "revolt-pushd" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "AGPL-3.0-or-later" publish = false [dependencies] -revolt-result = { version = "0.12.0", path = "../../core/result" } -revolt-config = { version = "0.12.0", path = "../../core/config", features = [ +revolt-result = { version = "0.12.1", path = "../../core/result" } +revolt-config = { version = "0.12.1", path = "../../core/config", features = [ "report-macros", "anyhow", ] } -revolt-database = { version = "0.12.0", path = "../../core/database" } -revolt-models = { version = "0.12.0", path = "../../core/models", features = [ +revolt-database = { version = "0.12.1", path = "../../core/database" } +revolt-models = { version = "0.12.1", path = "../../core/models", features = [ "validator", ] } -revolt-presence = { version = "0.12.0", path = "../../core/presence", features = [ +revolt-presence = { version = "0.12.1", path = "../../core/presence", features = [ "redis-is-patched", ] } -revolt-parser = { version = "0.12.0", path = "../../core/parser" } +revolt-parser = { version = "0.12.1", path = "../../core/parser" } anyhow = { version = "1.0.98" } diff --git a/crates/daemons/voice-ingress/Cargo.toml b/crates/daemons/voice-ingress/Cargo.toml index 0b498d93..f41e4ec1 100644 --- a/crates/daemons/voice-ingress/Cargo.toml +++ b/crates/daemons/voice-ingress/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-voice-ingress" -version = "0.12.0" +version = "0.12.1" license = "AGPL-3.0-or-later" edition = "2021" publish = false diff --git a/crates/delta/Cargo.toml b/crates/delta/Cargo.toml index 7976d208..47cd64ac 100644 --- a/crates/delta/Cargo.toml +++ b/crates/delta/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-delta" -version = "0.12.0" +version = "0.12.1" license = "AGPL-3.0-or-later" authors = ["Paul Makles "] edition = "2018" diff --git a/crates/services/autumn/Cargo.toml b/crates/services/autumn/Cargo.toml index aad1efe5..521d91b7 100644 --- a/crates/services/autumn/Cargo.toml +++ b/crates/services/autumn/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-autumn" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "AGPL-3.0-or-later" publish = false @@ -45,16 +45,16 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } # Core crates -revolt-files = { version = "0.12.0", path = "../../core/files" } -revolt-config = { version = "0.12.0", path = "../../core/config" } -revolt-database = { version = "0.12.0", path = "../../core/database", features = [ +revolt-files = { version = "0.12.1", path = "../../core/files" } +revolt-config = { version = "0.12.1", path = "../../core/config" } +revolt-database = { version = "0.12.1", path = "../../core/database", features = [ "axum-impl", ] } -revolt-result = { version = "0.12.0", path = "../../core/result", features = [ +revolt-result = { version = "0.12.1", path = "../../core/result", features = [ "utoipa", "axum", ] } -revolt-ratelimits = { version = "0.12.0", path = "../../core/ratelimits", features = ["axum"] } +revolt-ratelimits = { version = "0.12.1", path = "../../core/ratelimits", features = ["axum"] } # Axum / web server tempfile = "3.12.0" diff --git a/crates/services/gifbox/Cargo.toml b/crates/services/gifbox/Cargo.toml index 5a4d8e21..ae689d8e 100644 --- a/crates/services/gifbox/Cargo.toml +++ b/crates/services/gifbox/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-gifbox" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "AGPL-3.0-or-later" publish = false @@ -17,19 +17,19 @@ tokio = { version = "1.0", features = ["full"] } reqwest = { version = "0.12", features = ["json"] } # Core crates -revolt-config = { version = "0.12.0", path = "../../core/config" } -revolt-models = { version = "0.12.0", path = "../../core/models" } -revolt-result = { version = "0.12.0", path = "../../core/result", features = [ +revolt-config = { version = "0.12.1", path = "../../core/config" } +revolt-models = { version = "0.12.1", path = "../../core/models" } +revolt-result = { version = "0.12.1", path = "../../core/result", features = [ "utoipa", "axum", ] } -revolt-coalesced = { version = "0.12.0", path = "../../core/coalesced", features = [ +revolt-coalesced = { version = "0.12.1", path = "../../core/coalesced", features = [ "queue", ] } -revolt-database = { version = "0.12.0", path = "../../core/database", features = [ +revolt-database = { version = "0.12.1", path = "../../core/database", features = [ "axum-impl", ] } -revolt-ratelimits = { version = "0.12.0", path = "../../core/ratelimits", features = [ +revolt-ratelimits = { version = "0.12.1", path = "../../core/ratelimits", features = [ "axum", ] } diff --git a/crates/services/january/Cargo.toml b/crates/services/january/Cargo.toml index 0595827b..b2bc30e6 100644 --- a/crates/services/january/Cargo.toml +++ b/crates/services/january/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "revolt-january" -version = "0.12.0" +version = "0.12.1" edition = "2021" license = "AGPL-3.0-or-later" publish = false @@ -33,13 +33,13 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } # Core crates -revolt-config = { version = "0.12.0", path = "../../core/config" } -revolt-models = { version = "0.12.0", path = "../../core/models" } -revolt-result = { version = "0.12.0", path = "../../core/result", features = [ +revolt-config = { version = "0.12.1", path = "../../core/config" } +revolt-models = { version = "0.12.1", path = "../../core/models" } +revolt-result = { version = "0.12.1", path = "../../core/result", features = [ "utoipa", "axum", ] } -revolt-files = { version = "0.12.0", path = "../../core/files" } +revolt-files = { version = "0.12.1", path = "../../core/files" } # Axum / web server axum = { version = "0.7.5" } diff --git a/version.txt b/version.txt index ac454c6a..34a83616 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.12.0 +0.12.1 From 144e939c6bca85ae0162645bb45949e22796c928 Mon Sep 17 00:00:00 2001 From: infi Date: Sun, 12 Apr 2026 01:46:05 +0200 Subject: [PATCH 8/8] docs: add run in yaak button to endpoints page (#711) --- docs/docs/developers/endpoints.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/docs/developers/endpoints.md b/docs/docs/developers/endpoints.md index a89b4d3e..99a7d6f4 100644 --- a/docs/docs/developers/endpoints.md +++ b/docs/docs/developers/endpoints.md @@ -4,6 +4,8 @@ sidebar_position: 1 # Endpoints +[![Run in Yaak](https://external.stoatusercontent.com/proxy?url=https://yaak.app/static/button.svg)](https://yaak.app/button/run?name=Stoat+API&url=https%3A%2F%2Fstoat.chat%2Fapi%2Fopenapi.json) + **We are moving stuff around currently following the rebrand, guidance will follow soon!** You can connect to the API on the following URLs: