From db0a54f84b757df691ecd6a8031a8205b3b0af2e Mon Sep 17 00:00:00 2001 From: NathanFlurry Date: Fri, 21 Nov 2025 05:25:44 +0000 Subject: [PATCH 1/4] fix(docker): update openssl version 3.0.17 -> 3.5.1 to fix tls panic (#3516) --- engine/docker/universal/Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/engine/docker/universal/Dockerfile b/engine/docker/universal/Dockerfile index e411855677..60bcbaa777 100644 --- a/engine/docker/universal/Dockerfile +++ b/engine/docker/universal/Dockerfile @@ -2,7 +2,7 @@ # MARK: Builder # TODO(RVT-4168): Compile libfdb from scratch for ARM -FROM rust:1.88.0-bookworm AS builder +FROM rust:1.91.0-trixie AS builder # Docker automatically provides TARGETARCH ARG TARGETARCH @@ -75,7 +75,7 @@ RUN \ cp target/$CARGO_BUILD_MODE/rivet-engine /app/dist/ # MARK: Engine (full, base) -FROM debian:12.9-slim AS engine-full-base +FROM debian:13.1-slim AS engine-full-base # Docker automatically provides TARGETARCH ARG TARGETARCH @@ -108,7 +108,7 @@ ENTRYPOINT ["/usr/bin/rivet-engine"] CMD ["start"] # MARK: Engine (Slim) -FROM debian:12.9-slim AS engine-slim +FROM debian:13.1-slim AS engine-slim LABEL org.opencontainers.image.source=https://github.com/rivet-gg/rivet @@ -130,3 +130,4 @@ COPY --from=builder /app/dist/rivet-engine /usr/bin/rivet-engine ENTRYPOINT ["/usr/bin/rivet-engine"] CMD ["start"] + From e9942108c96e29cca206cc5de62fbd28416315c6 Mon Sep 17 00:00:00 2001 From: NathanFlurry Date: Fri, 21 Nov 2025 05:25:45 +0000 Subject: [PATCH 2/4] chore(rivetkit): allow speciying custom path for createFIleSystemDriver (#3517) --- .../rivetkit/src/drivers/file-system/global-state.ts | 2 +- .../packages/rivetkit/src/drivers/file-system/utils.ts | 5 ++--- rivetkit-typescript/packages/rivetkit/src/mod.ts | 8 ++++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/global-state.ts b/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/global-state.ts index 661588a34f..813850c135 100644 --- a/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/global-state.ts +++ b/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/global-state.ts @@ -110,7 +110,7 @@ export class FileSystemGlobalState { constructor(persist: boolean = true, customPath?: string) { this.#persist = persist; - this.#storagePath = persist ? getStoragePath(customPath) : "/tmp"; + this.#storagePath = persist ? (customPath ?? getStoragePath()) : "/tmp"; const path = getNodePath(); this.#stateDir = path.join(this.#storagePath, "state"); this.#dbsDir = path.join(this.#storagePath, "databases"); diff --git a/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/utils.ts b/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/utils.ts index 785aa4808d..8d0a77f546 100644 --- a/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/utils.ts +++ b/rivetkit-typescript/packages/rivetkit/src/drivers/file-system/utils.ts @@ -50,10 +50,9 @@ function createHashForPath(dirPath: string): string { /** * Get the storage path for the current working directory or a specified path */ -export function getStoragePath(customPath?: string): string { +export function getStoragePath(): string { const dataPath = getDataPath("rivetkit"); - const pathToHash = customPath || process.cwd(); - const dirHash = createHashForPath(pathToHash); + const dirHash = createHashForPath(process.cwd()); const path = getNodePath(); return path.join(dataPath, dirHash); } diff --git a/rivetkit-typescript/packages/rivetkit/src/mod.ts b/rivetkit-typescript/packages/rivetkit/src/mod.ts index 469c6beb90..324d375bdd 100644 --- a/rivetkit-typescript/packages/rivetkit/src/mod.ts +++ b/rivetkit-typescript/packages/rivetkit/src/mod.ts @@ -7,10 +7,10 @@ export { export { InlineWebSocketAdapter } from "@/common/inline-websocket-adapter"; export { noopNext } from "@/common/utils"; export { createEngineDriver } from "@/drivers/engine/mod"; -// export { -// createFileSystemDriver, -// createMemoryDriver, -// } from "@/drivers/file-system/mod"; +export { + createFileSystemDriver, + createMemoryDriver, +} from "@/drivers/file-system/mod"; export type { ActorQuery } from "@/manager/protocol/query"; export * from "@/registry/mod"; export { toUint8Array } from "@/utils"; From ba1623ccb9d6a5c1b75151201ff883286c8d7bc5 Mon Sep 17 00:00:00 2001 From: NathanFlurry Date: Fri, 21 Nov 2025 05:25:45 +0000 Subject: [PATCH 3/4] feat(engine): add long --version details (#3518) --- Cargo.lock | 5 ++-- Cargo.toml | 2 +- engine/packages/api-public/Cargo.toml | 2 -- engine/packages/api-public/build.rs | 8 ------ engine/packages/api-public/src/metadata.rs | 17 +++++------ engine/packages/engine/Cargo.toml | 1 + engine/packages/engine/src/main.rs | 17 ++++++++++- engine/packages/util/Cargo.toml | 5 ++++ engine/packages/util/build.rs | 13 +++++++++ engine/packages/util/src/build_meta.rs | 33 ++++++++++++++++++++++ engine/packages/util/src/lib.rs | 1 + 11 files changed, 82 insertions(+), 22 deletions(-) create mode 100644 engine/packages/util/build.rs create mode 100644 engine/packages/util/src/build_meta.rs diff --git a/Cargo.lock b/Cargo.lock index d5d3341b38..e3ea54b176 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4337,8 +4337,6 @@ dependencies = [ "tracing", "urlencoding", "utoipa", - "vergen", - "vergen-gitcl", ] [[package]] @@ -4499,6 +4497,7 @@ dependencies = [ "indoc", "lz4_flex", "namespace", + "once_cell", "pegboard", "pegboard-runner", "pegboard-serverless", @@ -4935,6 +4934,8 @@ dependencies = [ "url", "utoipa", "uuid", + "vergen", + "vergen-gitcl", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index fc88edc9fc..f90578c745 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -149,7 +149,7 @@ features = ["now"] [workspace.dependencies.clap] version = "4.3" -features = ["derive"] +features = ["derive", "cargo"] [workspace.dependencies.rivet-term] git = "https://github.com/rivet-dev/rivet-term" diff --git a/engine/packages/api-public/Cargo.toml b/engine/packages/api-public/Cargo.toml index 77e6aa2f61..18d04cb394 100644 --- a/engine/packages/api-public/Cargo.toml +++ b/engine/packages/api-public/Cargo.toml @@ -36,5 +36,3 @@ utoipa.workspace = true [build-dependencies] anyhow.workspace = true fs_extra.workspace = true -vergen.workspace = true -vergen-gitcl.workspace = true diff --git a/engine/packages/api-public/build.rs b/engine/packages/api-public/build.rs index 36cbe97b44..975d29deab 100644 --- a/engine/packages/api-public/build.rs +++ b/engine/packages/api-public/build.rs @@ -5,14 +5,6 @@ use std::fs; use std::path::Path; fn main() -> Result<()> { - // Configure vergen to emit build metadata - vergen::Emitter::default() - .add_instructions(&vergen::BuildBuilder::all_build()?)? - .add_instructions(&vergen::CargoBuilder::all_cargo()?)? - .add_instructions(&vergen::RustcBuilder::all_rustc()?)? - .add_instructions(&vergen_gitcl::GitclBuilder::all_git()?)? - .emit()?; - let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); let out_dir = env::var("OUT_DIR").unwrap(); let ui_dir = Path::new(&out_dir).join("ui"); diff --git a/engine/packages/api-public/src/metadata.rs b/engine/packages/api-public/src/metadata.rs index 07cdfd8c5d..1a06f32376 100644 --- a/engine/packages/api-public/src/metadata.rs +++ b/engine/packages/api-public/src/metadata.rs @@ -1,6 +1,7 @@ use axum::Json; use axum::response::IntoResponse; use rivet_api_builder::extract::Extension; +use rivet_util::build_meta; use serde_json::json; use crate::ctx::ApiCtx; @@ -11,13 +12,13 @@ pub async fn get_metadata(Extension(ctx): Extension) -> impl IntoRespons ctx.skip_auth(); Json(json!({ - "runtime": "engine", - "version": env!("CARGO_PKG_VERSION"), - "git_sha": env!("VERGEN_GIT_SHA"), - "build_timestamp": env!("VERGEN_BUILD_TIMESTAMP"), - "rustc_version": env!("VERGEN_RUSTC_SEMVER"), - "rustc_host": env!("VERGEN_RUSTC_HOST_TRIPLE"), - "cargo_target": env!("VERGEN_CARGO_TARGET_TRIPLE"), - "cargo_profile": if env!("VERGEN_CARGO_DEBUG") == "true" { "debug" } else { "release" } + "runtime": build_meta::RUNTIME, + "version": build_meta::VERSION, + "git_sha": build_meta::GIT_SHA, + "build_timestamp": build_meta::BUILD_TIMESTAMP, + "rustc_version": build_meta::RUSTC_VERSION, + "rustc_host": build_meta::RUSTC_HOST, + "cargo_target": build_meta::CARGO_TARGET, + "cargo_profile": build_meta::cargo_profile() })) } diff --git a/engine/packages/engine/Cargo.toml b/engine/packages/engine/Cargo.toml index efda95749f..5ec6d4b841 100644 --- a/engine/packages/engine/Cargo.toml +++ b/engine/packages/engine/Cargo.toml @@ -20,6 +20,7 @@ hex.workspace = true include_dir.workspace = true indoc.workspace = true lz4_flex.workspace = true +once_cell.workspace = true pegboard-runner.workspace = true pegboard-serverless.workspace = true reqwest.workspace = true diff --git a/engine/packages/engine/src/main.rs b/engine/packages/engine/src/main.rs index b352e28ce4..7c1aa10de4 100644 --- a/engine/packages/engine/src/main.rs +++ b/engine/packages/engine/src/main.rs @@ -2,10 +2,25 @@ use std::{path::PathBuf, sync::Arc}; use anyhow::*; use clap::Parser; +use once_cell::sync::Lazy; use rivet_engine::{SubCommand, run_config}; +use rivet_util::build_meta; + +static LONG_VERSION: Lazy = Lazy::new(|| { + format!( + "{}\nGit SHA: {}\nBuild Timestamp: {}\nRustc Version: {}\nRustc Host: {}\nCargo Target: {}\nCargo Profile: {}", + build_meta::VERSION, + build_meta::GIT_SHA, + build_meta::BUILD_TIMESTAMP, + build_meta::RUSTC_VERSION, + build_meta::RUSTC_HOST, + build_meta::CARGO_TARGET, + build_meta::cargo_profile() + ) +}); #[derive(Parser)] -#[command(name = "Rivet", version, about)] +#[command(name = "Rivet", version, long_version = LONG_VERSION.as_str(), about)] struct Cli { #[command(subcommand)] command: SubCommand, diff --git a/engine/packages/util/Cargo.toml b/engine/packages/util/Cargo.toml index ae306cf3d3..32e55dcaaa 100644 --- a/engine/packages/util/Cargo.toml +++ b/engine/packages/util/Cargo.toml @@ -34,3 +34,8 @@ tracing.workspace = true url.workspace = true uuid.workspace = true utoipa.workspace = true + +[build-dependencies] +anyhow.workspace = true +vergen.workspace = true +vergen-gitcl.workspace = true diff --git a/engine/packages/util/build.rs b/engine/packages/util/build.rs new file mode 100644 index 0000000000..8ecec41e3b --- /dev/null +++ b/engine/packages/util/build.rs @@ -0,0 +1,13 @@ +use anyhow::Result; + +fn main() -> Result<()> { + // Configure vergen to emit build metadata + vergen::Emitter::default() + .add_instructions(&vergen::BuildBuilder::all_build()?)? + .add_instructions(&vergen::CargoBuilder::all_cargo()?)? + .add_instructions(&vergen::RustcBuilder::all_rustc()?)? + .add_instructions(&vergen_gitcl::GitclBuilder::all_git()?)? + .emit()?; + + Ok(()) +} diff --git a/engine/packages/util/src/build_meta.rs b/engine/packages/util/src/build_meta.rs new file mode 100644 index 0000000000..f5d808d59b --- /dev/null +++ b/engine/packages/util/src/build_meta.rs @@ -0,0 +1,33 @@ +/// Runtime identifier for the engine +pub const RUNTIME: &str = "engine"; + +/// Package version from Cargo.toml +pub const VERSION: &str = env!("CARGO_PKG_VERSION"); + +/// Git commit SHA +pub const GIT_SHA: &str = env!("VERGEN_GIT_SHA"); + +/// Build timestamp +pub const BUILD_TIMESTAMP: &str = env!("VERGEN_BUILD_TIMESTAMP"); + +/// Rustc version used to compile +pub const RUSTC_VERSION: &str = env!("VERGEN_RUSTC_SEMVER"); + +/// Rustc host triple +pub const RUSTC_HOST: &str = env!("VERGEN_RUSTC_HOST_TRIPLE"); + +/// Cargo target triple +pub const CARGO_TARGET: &str = env!("VERGEN_CARGO_TARGET_TRIPLE"); + +/// Cargo debug flag as string +const CARGO_DEBUG: &str = env!("VERGEN_CARGO_DEBUG"); + +/// Cargo profile (debug or release) +/// Returns "debug" if VERGEN_CARGO_DEBUG is "true", otherwise "release" +pub fn cargo_profile() -> &'static str { + if CARGO_DEBUG == "true" { + "debug" + } else { + "release" + } +} diff --git a/engine/packages/util/src/lib.rs b/engine/packages/util/src/lib.rs index d69d627a2a..5a9037666f 100644 --- a/engine/packages/util/src/lib.rs +++ b/engine/packages/util/src/lib.rs @@ -3,6 +3,7 @@ pub use rivet_util_id as id; pub mod backoff; pub mod billing; +pub mod build_meta; pub mod check; pub mod duration; pub mod faker; From 1f093635c6cce38e4cd79c417bff6dc6839218d0 Mon Sep 17 00:00:00 2001 From: NathanFlurry Date: Fri, 21 Nov 2025 05:25:45 +0000 Subject: [PATCH 4/4] chore: disable biome in lefthook (#3519) --- engine/packages/engine/tests/common/actors.rs | 9 ++++++--- engine/packages/pegboard-gateway/src/lib.rs | 8 ++++---- engine/packages/pegboard-gateway/src/shared_state.rs | 6 +++--- lefthook.yml | 9 +++++---- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/engine/packages/engine/tests/common/actors.rs b/engine/packages/engine/tests/common/actors.rs index 9bfb04d6f7..e8105e682b 100644 --- a/engine/packages/engine/tests/common/actors.rs +++ b/engine/packages/engine/tests/common/actors.rs @@ -440,9 +440,12 @@ pub async fn ping_actor_websocket_via_guard(guard_port: u16, actor_id: &str) -> // URL encode the actor ID since colons are not allowed in WebSocket protocol names request.headers_mut().insert( "Sec-WebSocket-Protocol", - format!("rivet, rivet_target.actor, rivet_actor.{}", urlencoding::encode(&actor_id)) - .parse() - .unwrap(), + format!( + "rivet, rivet_target.actor, rivet_actor.{}", + urlencoding::encode(&actor_id) + ) + .parse() + .unwrap(), ); // Connect to WebSocket diff --git a/engine/packages/pegboard-gateway/src/lib.rs b/engine/packages/pegboard-gateway/src/lib.rs index 0aa62fb010..9fb07566d0 100644 --- a/engine/packages/pegboard-gateway/src/lib.rs +++ b/engine/packages/pegboard-gateway/src/lib.rs @@ -7,20 +7,20 @@ use http_body_util::{BodyExt, Full}; use hyper::{Request, Response, StatusCode}; use rivet_error::*; use rivet_guard_core::{ + WebSocketHandle, custom_serve::{CustomServeTrait, HibernationResult}, errors::{ServiceUnavailable, WebSocketServiceUnavailable}, - proxy_service::{is_ws_hibernate, ResponseBody}, + proxy_service::{ResponseBody, is_ws_hibernate}, request_context::RequestContext, websocket_handle::WebSocketReceiver, - WebSocketHandle, }; use rivet_runner_protocol as protocol; use rivet_util::serde::HashableMap; use std::{sync::Arc, time::Duration}; -use tokio::sync::{watch, Mutex}; +use tokio::sync::{Mutex, watch}; use tokio_tungstenite::tungstenite::{ - protocol::frame::{coding::CloseCode, CloseFrame}, Message, + protocol::frame::{CloseFrame, coding::CloseCode}, }; use crate::shared_state::{InFlightRequestHandle, SharedState}; diff --git a/engine/packages/pegboard-gateway/src/shared_state.rs b/engine/packages/pegboard-gateway/src/shared_state.rs index 344889abcf..568bbf5f6e 100644 --- a/engine/packages/pegboard-gateway/src/shared_state.rs +++ b/engine/packages/pegboard-gateway/src/shared_state.rs @@ -1,8 +1,8 @@ use anyhow::Result; use gas::prelude::*; use rivet_guard_core::errors::WebSocketServiceTimeout; -use rivet_runner_protocol::{self as protocol, versioned, PROTOCOL_VERSION}; -use scc::{hash_map::Entry, HashMap}; +use rivet_runner_protocol::{self as protocol, PROTOCOL_VERSION, versioned}; +use scc::{HashMap, hash_map::Entry}; use std::{ ops::Deref, sync::Arc, @@ -12,7 +12,7 @@ use tokio::sync::{mpsc, watch}; use universalpubsub::{NextOutput, PubSub, PublishOpts, Subscriber}; use vbare::OwnedVersionedData; -use crate::{metrics, WebsocketPendingLimitReached}; +use crate::{WebsocketPendingLimitReached, metrics}; const GC_INTERVAL: Duration = Duration::from_secs(15); const TUNNEL_PING_TIMEOUT: i64 = util::duration::seconds(30); diff --git a/lefthook.yml b/lefthook.yml index 610de47cd5..fb161307ca 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -5,8 +5,9 @@ pre-commit: run: cargo fmt --all tags: formatting stage_fixed: true - biome-fmt: - run: pnpm fmt - tags: formatting - stage_fixed: true + # TODO: Bring this back after big dumb errors are fixed + # biome-fmt: + # run: pnpm fmt + # tags: formatting + # stage_fixed: true