name: CI on: push: branches: [master] pull_request: env: CARGO_TERM_COLOR: always jobs: fmt: name: rustfmt runs-on: docker steps: - uses: https://data.forgejo.org/actions/checkout@v4 - name: Install system dependencies run: apt-get update && apt-get install -y --no-install-recommends ca-certificates curl build-essential pkg-config libssl-dev - name: Install Rust run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --component rustfmt - name: Check formatting run: | export PATH="$HOME/.cargo/bin:$PATH" cargo fmt --all --check clippy: name: clippy runs-on: docker steps: - uses: https://data.forgejo.org/actions/checkout@v4 - name: Install system dependencies run: apt-get update && apt-get install -y --no-install-recommends ca-certificates curl build-essential pkg-config libssl-dev - name: Install Rust run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --component clippy - name: Run clippy run: | export PATH="$HOME/.cargo/bin:$PATH" export MTP_TYPE_MAPS="$PWD/example/type-maps.yaml" cargo clippy --workspace --exclude mtp-wasm --all-targets --all-features -- -D warnings \ -W unreachable-pub \ -W clippy::cognitive_complexity \ -W clippy::missing_docs_in_private_items \ -W clippy::missing_errors_doc \ -W clippy::missing_panics_doc \ -W clippy::missing_safety_doc \ -W clippy::undocumented_unsafe_blocks \ -W clippy::pedantic \ -W clippy::restriction \ -A clippy::blanket_clippy_restriction_lints test: name: test runs-on: docker steps: - uses: https://data.forgejo.org/actions/checkout@v4 - name: Install system dependencies run: apt-get update && apt-get install -y --no-install-recommends ca-certificates curl build-essential pkg-config libssl-dev - name: Install Rust run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal - name: Run tests run: | export PATH="$HOME/.cargo/bin:$PATH" export MTP_TYPE_MAPS="$PWD/example/type-maps.yaml" cargo test --workspace --exclude mtp-wasm --all-features wasm: name: wasm build runs-on: docker steps: - uses: https://data.forgejo.org/actions/checkout@v4 - name: Install system dependencies run: apt-get update && apt-get install -y --no-install-recommends ca-certificates curl build-essential pkg-config libssl-dev lld - name: Install Rust run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --target wasm32-unknown-unknown - name: Build wasm crate run: | export PATH="$HOME/.cargo/bin:$PATH" export MTP_TYPE_MAPS="$PWD/example/type-maps.yaml" cargo build -p mtp-wasm --target wasm32-unknown-unknown env: RUSTFLAGS: --cfg web_sys_unstable_apis example: name: example runs-on: docker steps: - uses: https://data.forgejo.org/actions/checkout@v4 - name: Install system dependencies run: apt-get update && apt-get install -y --no-install-recommends ca-certificates curl build-essential pkg-config libssl-dev - name: Install Rust run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal - name: Check example usage workspace working-directory: example run: | export PATH="$HOME/.cargo/bin:$PATH" export MTP_TYPE_MAPS="$PWD/type-maps.yaml" cargo check --workspace --all-targets --all-features deny: name: cargo-deny runs-on: docker steps: - uses: https://data.forgejo.org/actions/checkout@v4 - name: Install system dependencies run: apt-get update && apt-get install -y --no-install-recommends ca-certificates curl build-essential pkg-config libssl-dev - name: Install Rust run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal - name: Install cargo-deny run: | export PATH="$HOME/.cargo/bin:$PATH" cargo install cargo-deny --locked - name: Run cargo-deny run: | export PATH="$HOME/.cargo/bin:$PATH" cargo deny check machete: name: cargo-machete runs-on: docker steps: - uses: https://data.forgejo.org/actions/checkout@v4 - name: Install system dependencies run: apt-get update && apt-get install -y --no-install-recommends ca-certificates curl build-essential pkg-config libssl-dev - name: Install Rust run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal - name: Install cargo-machete run: | export PATH="$HOME/.cargo/bin:$PATH" cargo install cargo-machete --locked - name: Run cargo-machete run: | export PATH="$HOME/.cargo/bin:$PATH" cargo machete duplicates: name: duplicate code runs-on: docker steps: - uses: https://data.forgejo.org/actions/checkout@v4 - name: Install system dependencies run: apt-get update && apt-get install -y --no-install-recommends ca-certificates curl unzip - name: Install Bun run: | curl -fsSL https://bun.sh/install | bash - name: Install dependencies run: | export PATH="$HOME/.bun/bin:$PATH" bun install --frozen-lockfile - name: Run duplicate detector run: | export PATH="$HOME/.bun/bin:$PATH" bun run dup web-client: name: web client runs-on: docker steps: - uses: https://data.forgejo.org/actions/checkout@v4 - name: Install system dependencies run: apt-get update && apt-get install -y --no-install-recommends ca-certificates curl unzip build-essential pkg-config libssl-dev lld - name: Install Rust run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --target wasm32-unknown-unknown - name: Install wasm-pack run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - name: Build wasm package run: | export PATH="$HOME/.cargo/bin:$PATH" export MTP_TYPE_MAPS="$PWD/example/type-maps.yaml" wasm-pack build wasm --target web env: RUSTFLAGS: --cfg web_sys_unstable_apis - name: Install Bun run: | curl -fsSL https://bun.sh/install | bash - name: Install dependencies working-directory: example/web-client run: | export PATH="$HOME/.bun/bin:$PATH" bun install --frozen-lockfile - name: Build web client working-directory: example/web-client run: | export PATH="$HOME/.bun/bin:$PATH" bun run build