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 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 nodejs - name: Install pnpm run: | curl -fsSL https://get.pnpm.io/install.sh | SHELL=/bin/sh sh - - name: Install dependencies run: | export PATH="$HOME/.local/share/pnpm:$PATH" pnpm install --frozen-lockfile - name: Run duplicate detector run: | export PATH="$HOME/.local/share/pnpm:$PATH" pnpm 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 nodejs 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 pnpm run: | curl -fsSL https://get.pnpm.io/install.sh | SHELL=/bin/sh sh - - name: Install dependencies run: | export PATH="$HOME/.local/share/pnpm:$PATH" pnpm install --frozen-lockfile - name: Build TypeScript package run: | export PATH="$HOME/.cargo/bin:$HOME/.local/share/pnpm:$PATH" export MTP_TYPE_MAPS="$PWD/example/type-maps.yaml" pnpm run build env: RUSTFLAGS: --cfg web_sys_unstable_apis - name: Build web client run: | export PATH="$HOME/.local/share/pnpm:$PATH" pnpm --filter mtp-web-client run build