name: Tests env: RUST_BACKTRACE: 1 CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse on: workflow_dispatch: push: branches: - '**' paths: - '.gitea/**' - 'melib/src/**' - 'melib/Cargo.toml' - 'meli/src/**' - 'Cargo.toml' - 'Cargo.lock' jobs: test: name: Test on ${{ matrix.build }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: build: [linux-amd64, ] include: - build: linux-amd64 os: ubuntu-latest rust: stable target: x86_64-unknown-linux-gnu steps: - uses: https://github.com/actions/checkout@v2 - id: os-deps name: install OS dependencies run: | apt-get update apt-get install -y libdbus-1-dev pkg-config mandoc libssl-dev - id: cache-rustup name: Cache Rust toolchain uses: https://github.com/actions/cache@v3 with: path: ~/.rustup key: toolchain-${{ matrix.os }}-${{ matrix.rust }} - if: ${{ steps.cache-rustup.outputs.cache-hit != 'true' }} name: Install Rust ${{ matrix.rust }} uses: https://github.com/actions-rs/toolchain@v1 with: profile: minimal toolchain: ${{ matrix.rust }} components: clippy, rustfmt target: ${{ matrix.target }} override: true - name: Configure cargo data directory # After this point, all cargo registry and crate data is stored in # $GITHUB_WORKSPACE/.cargo_home. This allows us to cache only the files # that are needed during the build process. Additionally, this works # around a bug in the 'cache' action that causes directories outside of # the workspace dir to be saved/restored incorrectly. run: echo "CARGO_HOME=$(pwd)/.cargo_home" >> $GITHUB_ENV - id: cache-cargo name: Cache cargo configuration and installations uses: https://github.com/actions/cache@v3 with: path: ${{ env.CARGO_HOME }} key: cargo-${{ matrix.os }}-${{ matrix.rust }} - if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target name: Setup Rust target run: | mkdir -p "${{ env.CARGO_HOME }}" cat << EOF > "${{ env.CARGO_HOME }}"/config.toml [build] target = "${{ matrix.target }}" EOF - if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target name: Add lint dependencies run: | cargo install --target "${{ matrix.target }}" cargo-sort - name: cargo-check run: | cargo check --all-features --all --tests --examples --benches --bins - name: cargo test if: success() || failure() # always run even if other steps fail, except when cancelled run: | cargo test --all --no-fail-fast --all-features - name: cargo-sort if: success() || failure() run: | cargo sort --check - name: rustfmt if: success() || failure() run: | cargo fmt --check --all - name: clippy if: success() || failure() run: | cargo clippy --no-deps --all-features --all --tests --examples --benches --bins