Skip to content

Add clippy to CI & fix lints #115

Add clippy to CI & fix lints

Add clippy to CI & fix lints #115

Workflow file for this run

on:
push:
branches:
- master
pull_request:
branches:
- master
name: CI
env:
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
jobs:
build_and_test:
name: Build and Test
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
channel: 1.68.0
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
channel: stable
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
channel: beta
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
channel: nightly
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust Toolchain
run: |
rustup default "$TOOLCHAIN"
rustup update "$TOOLCHAIN"
env:
TOOLCHAIN: ${{ matrix.channel }}-${{ matrix.target }}
- name: Build and Test (Debug, No Default Features)
run: cargo test --no-default-features
- name: Build and Test (Debug, enable_unstable_features_that_may_break_with_minor_version_bumps)
run: cargo test --no-default-features --features enable_unstable_features_that_may_break_with_minor_version_bumps
- name: Build and Test (Debug, serde)
run: cargo test --no-default-features --features serde
- name: Build and Test (Release, All Features)
run: cargo test --release --all-features
- name: Build and Test (Minimal Versions, All Features)
if: matrix.channel == 'nightly'
run: cargo test --all-features -Z minimal-versions
lint:
name: Lint
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Cargo clippy
run: cargo clippy --tests
- name: Check for broken intra-doc links
run: cargo doc --all-features --document-private-items --no-deps
ci_succeeded:
name: Build and Test Succeeded
if: always()
needs: [build_and_test, lint]
runs-on: ubuntu-22.04
outputs:
release: ${{ steps.release_check.outputs.release }}
tag_name: ${{ steps.release_check.outputs.tag_name }}
steps:
- name: Fail if Any Previous Job Failed
if: contains(needs.*.result, 'failure')
run: exit 1
- name: Checkout
uses: actions/checkout@v3
- name: Check if Release Needed
id: release_check
run: |
set -euo pipefail
TAG_NAME="v$(cargo metadata --no-deps --format-version=1 | jq -er '.packages[] | select(.name=="plist") | .version')"
echo "tag_name=$TAG_NAME" >> "$GITHUB_OUTPUT"
if git ls-remote --exit-code origin "refs/tags/$TAG_NAME"
then
echo "release=false" >> "$GITHUB_OUTPUT"
else
echo "release=true" >> "$GITHUB_OUTPUT"
fi
release:
name: Release
needs: ci_succeeded
if: github.ref == 'refs/heads/master' && needs.ci_succeeded.outputs.release == 'true'
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install cargo-semver-checks
run: cargo install cargo-semver-checks --locked
- name: Run cargo-semver-checks
run: cargo semver-checks check-release
- name: Publish Crate
run: |
cargo publish --token "$CRATES_IO_TOKEN"
env:
CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}
- name: Create GitHub Release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ needs.ci_succeeded.outputs.tag_name }}
release_name: ${{ needs.ci_succeeded.outputs.tag_name }}
draft: false
prerelease: false