diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml new file mode 100644 index 0000000..589f494 --- /dev/null +++ b/.forgejo/workflows/ci.yml @@ -0,0 +1,66 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +env: + CARGO_TERM_COLOR: always + RUSTFLAGS: "-D warnings" + RUST_TOOLCHAIN: "1.86" + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + +jobs: + ci: + name: Linux x86_64 (Forgejo) + runs-on: ubuntu-latest + steps: + - name: Checkout text-readability-score via external URL + run: | + set -eu + mkdir -p "$GITHUB_WORKSPACE" + cd "$GITHUB_WORKSPACE" + git init -q + git remote add origin \ + "https://x-access-token:${GITHUB_TOKEN}@git.flemming.ws/${GITHUB_REPOSITORY}.git" + git fetch --depth=1 origin "$GITHUB_SHA" + git checkout -q FETCH_HEAD + + - name: Configure git URL rewrite for SDK fetch + env: + SDK_PAT: ${{ secrets.MODULE_SDK_PAT }} + run: | + git config --global \ + "url.https://x-access-token:${SDK_PAT}@git.flemming.ws/.insteadOf" \ + "https://git.flemming.ws/" + + - name: Install system dependencies + run: | + apt-get update -qq + apt-get install -y --no-install-recommends \ + curl ca-certificates build-essential pkg-config libssl-dev git + + - name: Install Rust toolchain + run: | + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ + | sh -s -- -y --profile minimal \ + --default-toolchain "$RUST_TOOLCHAIN" \ + --target wasm32-wasip2 --component rustfmt --component clippy + echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" + + - name: Cargo fmt --check + run: cargo fmt --all -- --check + + - name: Cargo clippy + run: cargo clippy --all-targets -- -D warnings + + - name: Cargo build (host) + run: cargo build --all-targets + + - name: Cargo test (host) + run: cargo test --all-targets + + - name: Cargo build (wasm32-wasip2) + run: cargo build --release --target wasm32-wasip2 diff --git a/src/lib.rs b/src/lib.rs index c7de4a2..a3fd87d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -49,7 +49,7 @@ pub fn invoke(_ctx: Context, inputs: Inputs) -> Result { .require_json("norm") .map_err(|e| ModuleError::invalid_input(format!("norm shape: {e}")))?; - let graph_iVm: Option = inputs.get("graph").and_then(|p| match p { + let graph_ivm: Option = inputs.get("graph").and_then(|p| match p { Payload::Json(s) => serde_json::from_str(s).ok(), _ => None, }); @@ -62,7 +62,7 @@ pub fn invoke(_ctx: Context, inputs: Inputs) -> Result { .join(" "); let flesch = flesch_de(&full_text); - let depth = depth_index(graph_iVm.as_ref()); + let depth = depth_index(graph_ivm.as_ref()); let composite = composite_frust(flesch, depth); let out = Output { @@ -89,7 +89,10 @@ fn flesch_de(text: &str) -> f32 { } fn count_sentences(text: &str) -> usize { - text.chars().filter(|c| matches!(c, '.' | '!' | '?')).count().max(1) + text.chars() + .filter(|c| matches!(c, '.' | '!' | '?')) + .count() + .max(1) } fn count_syllables(word: &str) -> usize { @@ -134,6 +137,7 @@ fn composite_frust(flesch: f32, depth: f32) -> f32 { #[cfg(test)] mod tests { + #![allow(clippy::unwrap_used, clippy::expect_used, clippy::panic)] use super::*; #[test]