diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..e1cd116 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,197 @@ +name: Continuous Integration + +on: + push: + branches: + - main + pull_request: + branches: + - main + schedule: + - cron: "0 0 * * 0" + +jobs: + build: + name: Build on ${{ matrix.build.OS }} (${{ matrix.build.TARGET }}) + runs-on: ${{ matrix.build.OS }} + strategy: + fail-fast: false + matrix: + build: + - { + OS: ubuntu-22.04, + TOOLCHAIN: stable, + TARGET: x86_64-unknown-linux-gnu, + } + - { + OS: windows-2022, + TOOLCHAIN: stable, + TARGET: x86_64-pc-windows-msvc, + } + - { OS: macos-14, TOOLCHAIN: stable, TARGET: x86_64-apple-darwin } + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ matrix.build.TOOLCHAIN }} + targets: ${{ matrix.build.TARGET }} + + - name: Cache Cargo dependencies + uses: Swatinem/rust-cache@v2 + + - name: Build the project + run: cargo build --locked --verbose + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: binsider-${{ matrix.build.TARGET }}-assets + path: target/debug/binsider* + + test: + name: Test + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Install cargo-llvm-cov + uses: taiki-e/install-action@cargo-llvm-cov + + - name: Cache Cargo dependencies + uses: Swatinem/rust-cache@v2 + + - name: Generate code coverage + run: cargo llvm-cov --lcov --output-path lcov.info + env: + OUT_DIR: target + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + name: code-coverage-report + files: lcov.info + fail_ci_if_error: true + verbose: true + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + commit-format: + name: Commit format + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + if: github.event_name != 'pull_request' + uses: actions/checkout@v4 + + - name: Checkout the repository + if: github.event_name == 'pull_request' + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Run committed + uses: crate-ci/committed@master + with: + args: "-vv" + commits: "HEAD" + + code-format: + name: Code format + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt + + - name: Check code formatting + run: cargo fmt --all -- --check + + - name: Cache Cargo dependencies + uses: Swatinem/rust-cache@v2 + + - name: Install editorconfig-checker + uses: editorconfig-checker/action-editorconfig-checker@main + + - name: Check file formatting + run: editorconfig-checker + + clippy: + name: Clippy + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + components: clippy + + - name: Cache Cargo dependencies + uses: Swatinem/rust-cache@v2 + + - name: Check lints + run: cargo clippy -- -D warnings + + deny: + name: Deny + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Run cargo-deny + uses: EmbarkStudios/cargo-deny-action@v1 + with: + command: check all + + links: + name: Links + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Run lychee + uses: lycheeverse/lychee-action@v1 + with: + args: -v *.md + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + typos: + name: Typos + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Check typos + uses: crate-ci/typos@master + + msrv: + name: MSRV + runs-on: ubuntu-latest + steps: + - name: Checkout the repository + uses: actions/checkout@v4 + + - name: Install cargo-binstall + uses: taiki-e/install-action@cargo-binstall + + - name: Install cargo-msrv + run: cargo binstall -y --force cargo-msrv + + - name: Run cargo-msrv + run: cargo msrv --output-format json verify | tail -n 1 | jq --exit-status '.success' diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml index 28a89c9..5c4c566 100644 --- a/.github/workflows/website.yml +++ b/.github/workflows/website.yml @@ -21,6 +21,19 @@ concurrency: cancel-in-progress: true jobs: + links: + name: Links + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Run lychee + uses: lycheeverse/lychee-action@v1 + with: + args: -v website/src/content/docs/ + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + build: name: Build website runs-on: ubuntu-latest diff --git a/committed.toml b/committed.toml new file mode 100644 index 0000000..6033d6f --- /dev/null +++ b/committed.toml @@ -0,0 +1,16 @@ +# configuration for https://github.com/crate-ci/committed + +# https://www.conventionalcommits.org +style = "conventional" +# allow merge commits +merge_commit = true +# subject is not required to be capitalized +subject_capitalized = false +# subject should start with an imperative verb +imperative_subject = true +# subject should not end with a punctuation +subject_not_punctuated = true +# disable line length +line_length = 0 +# disable subject length +subject_length = 0 diff --git a/deny.toml b/deny.toml new file mode 100644 index 0000000..fc168c0 --- /dev/null +++ b/deny.toml @@ -0,0 +1,20 @@ +# configuration for https://github.com/EmbarkStudios/cargo-deny + +[licenses] +confidence-threshold = 0.8 +allow = [ + "MIT", + "Apache-2.0", + "Unicode-DFS-2016", + "BSD-2-Clause", + "BSL-1.0", + "Zlib", +] + +[sources] +unknown-registry = "deny" +unknown-git = "warn" +allow-registry = ["https://github.com/rust-lang/crates.io-index"] + +[advisories] +ignore = ["RUSTSEC-2023-0040", "RUSTSEC-2023-0059", "RUSTSEC-2021-0145"] diff --git a/src/args.rs b/src/args.rs index c56e9e0..aa66cd5 100644 --- a/src/args.rs +++ b/src/args.rs @@ -7,8 +7,8 @@ use std::path::PathBuf; version, author = clap::crate_authors!("\n"), about, - rename_all_env = "screaming-snake", - help_template = "\ + rename_all_env = "screaming-snake", + help_template = "\ {before-help}{name} {version} {author-with-newline}{about-with-newline} {usage-heading} diff --git a/typos.toml b/typos.toml new file mode 100644 index 0000000..3d6052d --- /dev/null +++ b/typos.toml @@ -0,0 +1,6 @@ +# configuration for https://github.com/crate-ci/typos + +[default.extend-words] +ratatui = "ratatui" +rela = "rela" +siz = "siz" diff --git a/website/src/content/docs/getting-started/index.md b/website/src/content/docs/getting-started/index.md index 530a517..1a41076 100644 --- a/website/src/content/docs/getting-started/index.md +++ b/website/src/content/docs/getting-started/index.md @@ -10,7 +10,7 @@ cargo install binsider Also, check the other installation methods on the left sidebar. -Now you are ready to dive into the binaries! ✨ Simpy run: +Now you are ready to dive into the binaries! ✨ Simply run: ```bash binsider