From 3706868b0a6ee1e56534a3a640848f628a2d0684 Mon Sep 17 00:00:00 2001 From: Austin Gill Date: Sat, 9 Mar 2024 09:30:08 -0600 Subject: [PATCH] Add CI/CD pipeline --- .github/workflows/lint.yml | 61 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..4862b34 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,61 @@ +name: Lint +on: [push] +env: + RUSTFLAGS: -D warnings + CARGO_TERM_COLOR: always + +jobs: + gitlint: + runs-on: ubuntu-latest + steps: + - name: Lint Git commits + # TODO: This doesn't let you setup custom rules. For example, I like to allow the + # max-line length rule to be violated, if it's an indented blockquote (code block, log + # snippet), or if it looks like a URL or footnote. + # Maybe just shell out to gitlint, and save custom rules here in the repo? + uses: aschbacd/gitlint-action@v1 + with: + commit-message-body-max-length: 80 + + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: stable + components: rustfmt + - name: Setup Rust cache + uses: swatinem/rust-cache@v2 + - name: Run rustfmt + run: cargo fmt -- --check --config group_imports=StdExternalCrate,imports_granularity=Module + + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: stable + components: clippy + - name: Setup Rust cache + uses: swatinem/rust-cache@v2 + - name: Build + run: cargo build --release --all-targets + - name: Clippy + run: cargo clippy --release --all-targets + + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: stable + - name: Setup Rust cache + uses: swatinem/rust-cache@v2 + - name: Test + run: cargo test --release --all-targets