Release 0.1.1 [auto-version-bump]

This commit is contained in:
Gitea Actions
2026-10-20 11:26:37 +02:00
parent a85a49dfd5
commit d6da8e3b8f
6 changed files with 1997 additions and 13 deletions
Generated
+1978
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -3,7 +3,7 @@ members = ["crates/rule-engine"]
resolver = "2" resolver = "2"
[workspace.package] [workspace.package]
version = "0.1.0" version = "0.1.1"
edition = "2024" edition = "2024"
license = "MIT" license = "MIT"
+3 -5
View File
@@ -129,8 +129,8 @@ impl LuauRuntime {
if effects.len() > MAX_EFFECTS { if effects.len() > MAX_EFFECTS {
return Err(RuleError::TooManyEffects); return Err(RuleError::TooManyEffects);
} }
let encoded = serde_json::to_vec(&effects) let encoded =
.map_err(|error| RuleError::Sandbox(error.to_string()))?; serde_json::to_vec(&effects).map_err(|error| RuleError::Sandbox(error.to_string()))?;
if encoded.len() > MAX_RESULT_BYTES { if encoded.len() > MAX_RESULT_BYTES {
return Err(RuleError::ResultTooLarge); return Err(RuleError::ResultTooLarge);
} }
@@ -220,9 +220,7 @@ mod tests {
"return function() return {{ kind = 'advance_time', payload = 'not an object' }} end", "return function() return {{ kind = 'advance_time', payload = 'not an object' }} end",
)); ));
assert!(matches!(result.outcome, EvaluationOutcome::Rejected { .. })); assert!(matches!(result.outcome, EvaluationOutcome::Rejected { .. }));
let result = evaluate_request(request( let result = evaluate_request(request("return function() return 'not an effect list' end"));
"return function() return 'not an effect list' end",
));
assert!(matches!(result.outcome, EvaluationOutcome::Rejected { .. })); assert!(matches!(result.outcome, EvaluationOutcome::Rejected { .. }));
} }
+12 -4
View File
@@ -1,7 +1,7 @@
use ai_spel_rule_engine::{ use ai_spel_rule_engine::{
CONTRACT_VERSION, EVALUATION_SUBJECT, EvaluationRequest, EvaluationResponse, evaluate_request, CONTRACT_VERSION, EVALUATION_SUBJECT, EvaluationRequest, EvaluationResponse, evaluate_request,
}; };
use async_nats::{Client, ConnectOptions, Subscriber, Subject}; use async_nats::{Client, ConnectOptions, Subject, Subscriber};
use axum::{Router, extract::State, http::StatusCode, routing::get}; use axum::{Router, extract::State, http::StatusCode, routing::get};
use futures_util::StreamExt; use futures_util::StreamExt;
use std::{env, sync::Arc, time::Duration}; use std::{env, sync::Arc, time::Duration};
@@ -131,13 +131,18 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.with_state(health.clone()); .with_state(health.clone());
let health_address = env::var("HEALTH_ADDR").unwrap_or_else(|_| "0.0.0.0:8080".into()); let health_address = env::var("HEALTH_ADDR").unwrap_or_else(|_| "0.0.0.0:8080".into());
let health_listener = tokio::net::TcpListener::bind(health_address).await?; let health_listener = tokio::net::TcpListener::bind(health_address).await?;
tokio::spawn(async move { let _ = axum::serve(health_listener, health_router).await; }); tokio::spawn(async move {
let _ = axum::serve(health_listener, health_router).await;
});
let client = loop { let client = loop {
match connect_nats().await { match connect_nats().await {
Ok(client) => break client, Ok(client) => break client,
Err(error) => { Err(error) => {
eprintln!("{{\"level\":\"warn\",\"event\":\"nats.connect_retry\",\"error_category\":\"nats_connect\",\"detail\":{:?}}}", error.to_string()); eprintln!(
"{{\"level\":\"warn\",\"event\":\"nats.connect_retry\",\"error_category\":\"nats_connect\",\"detail\":{:?}}}",
error.to_string()
);
time::sleep(Duration::from_secs(2)).await; time::sleep(Duration::from_secs(2)).await;
} }
} }
@@ -166,6 +171,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.and_then(|value| value.parse::<usize>().ok()) .and_then(|value| value.parse::<usize>().ok())
.filter(|value| (1..=32).contains(value)) .filter(|value| (1..=32).contains(value))
.unwrap_or(8); .unwrap_or(8);
eprintln!("{{\"level\":\"info\",\"event\":\"rule_engine.ready\",\"contract_version\":{},\"max_concurrency\":{}}}", CONTRACT_VERSION, concurrency); eprintln!(
"{{\"level\":\"info\",\"event\":\"rule_engine.ready\",\"contract_version\":{},\"max_concurrency\":{}}}",
CONTRACT_VERSION, concurrency
);
serve_rule_requests(client, subscriber, concurrency).await serve_rule_requests(client, subscriber, concurrency).await
} }
+1 -1
View File
@@ -8,7 +8,7 @@ spec:
source: source:
repoURL: harbor.k3s.k0.nu/ai-spel repoURL: harbor.k3s.k0.nu/ai-spel
chart: ai-spel-rule-engine chart: ai-spel-rule-engine
targetRevision: "0.1.0" targetRevision: "0.1.1"
helm: helm:
releaseName: ai-spel-rule-engine releaseName: ai-spel-rule-engine
destination: destination:
+2 -2
View File
@@ -2,5 +2,5 @@ apiVersion: v2
name: ai-spel-rule-engine name: ai-spel-rule-engine
description: Isolated, sandboxed Luau proposal evaluator description: Isolated, sandboxed Luau proposal evaluator
type: application type: application
version: 0.1.0 version: 0.1.1
appVersion: "0.1.0" appVersion: "0.1.1"