name: Continuous Integration # Set the permissions of the github token to the minimum and only enable what is needed # See https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions permissions: {} on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: push: branches: - main pull_request: branches: - main # ensure that the workflow is only triggered once per PR, subsequent pushes to the PR will cancel # and restart the workflow. See https://docs.github.com/en/actions/using-jobs/using-concurrency concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true # lint, clippy and coverage jobs are intentionally early in the workflow to catch simple formatting, # typos, and missing tests as early as possible. This allows us to fix these and resubmit the PR # without having to wait for the comprehensive matrix of tests to complete. jobs: # Lint the formatting of the codebase. lint-formatting: name: Check Formatting runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master with: toolchain: nightly components: rustfmt - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - uses: taiki-e/install-action@2c73a741d1544cc346e9b0af11868feba03eb69d # v2 with: tool: taplo-cli - run: cargo xtask format --check # Check for typos in the codebase. # See lint-typos: name: Check Typos runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: crate-ci/typos@52bd719c2c91f9d676e2aa359fc8e0db8925e6d8 # master # Check for any disallowed dependencies in the codebase due to license / security issues. # See dependencies: name: Check Dependencies runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master with: toolchain: stable - uses: taiki-e/install-action@2c73a741d1544cc346e9b0af11868feba03eb69d # v2 with: tool: cargo-deny - run: cargo deny --log-level info --all-features check # Check for any unused dependencies in the codebase. # See cargo-machete: name: Check Unused Dependencies runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: bnjbvr/cargo-machete@b54422fa3319b3cac180f6030b663fe57af51635 # v0.8.0 # Run cargo clippy. # # We check for clippy warnings on beta, but these are not hard failures. They should often be # fixed to prevent clippy failing on the next stable release, but don't block PRs on them unless # they are introduced by the PR. lint-clippy: name: Check Clippy runs-on: ubuntu-latest strategy: fail-fast: false matrix: toolchain: ["stable", "beta"] continue-on-error: ${{ matrix.toolchain == 'beta' }} steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master with: toolchain: ${{ matrix.toolchain }} components: clippy - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - run: cargo xtask clippy # Run markdownlint on all markdown files in the repository. lint-markdown: name: Check Markdown runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: DavidAnson/markdownlint-cli2-action@992badcdf24e3b8eb7e87ff9287fe931bcb00c6e # v20 with: globs: | '**/*.md' '!target' # Run cargo coverage. This will generate a coverage report and upload it to codecov. # coverage: name: Coverage Report runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master with: toolchain: stable components: llvm-tools - uses: taiki-e/install-action@2c73a741d1544cc346e9b0af11868feba03eb69d # v2 with: tool: cargo-llvm-cov - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - run: cargo xtask coverage - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5 with: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true # Run cargo check. This is a fast way to catch any obvious errors in the code. check: name: Check ${{ matrix.os }} ${{ matrix.toolchain }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] toolchain: ["1.85.0", "stable"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master with: toolchain: ${{ matrix.toolchain }} - uses: taiki-e/install-action@f3a27926ea13d7be3ee2f4cbb925883cf9442b56 # v2 with: tool: cargo-hack - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - run: cargo xtask check --all-features build-no-std: name: Build No-Std runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master with: toolchain: stable targets: x86_64-unknown-none - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 # This makes it easier to debug the exact versions of the dependencies - run: cargo tree --target x86_64-unknown-none -p ratatui-core - run: cargo tree --target x86_64-unknown-none -p ratatui-widgets - run: cargo tree --target x86_64-unknown-none -p ratatui-macros - run: cargo tree --target x86_64-unknown-none -p ratatui --no-default-features - run: cargo build --target x86_64-unknown-none -p ratatui-core - run: cargo build --target x86_64-unknown-none -p ratatui-widgets - run: cargo build --target x86_64-unknown-none -p ratatui-macros - run: cargo build --target x86_64-unknown-none -p ratatui --no-default-features # Check if README.md is up-to-date with the crate's documentation. check-readme: name: Check README runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - uses: taiki-e/install-action@2c73a741d1544cc346e9b0af11868feba03eb69d # v2 with: tool: cargo-rdme - run: cargo xtask readme --check # Run cargo rustdoc with the same options that would be used by docs.rs, taking into account the # package.metadata.docs.rs configured in Cargo.toml. https://github.com/dtolnay/cargo-docs-rs lint-docs: name: Check Docs runs-on: ubuntu-latest env: RUSTDOCFLAGS: -Dwarnings steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master with: toolchain: nightly - uses: dtolnay/install@74f735cdf643820234e37ae1c4089a08fd266d8a # master with: crate: cargo-docs-rs - uses: taiki-e/install-action@2c73a741d1544cc346e9b0af11868feba03eb69d # v2 with: tool: cargo-hack - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - run: cargo xtask docs # Run cargo test on the documentation of the crate. This will catch any code examples that don't # compile, or any other issues in the documentation. test-docs: name: Test Docs runs-on: ubuntu-latest steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master with: toolchain: stable - uses: taiki-e/install-action@f3a27926ea13d7be3ee2f4cbb925883cf9442b56 # v2 with: tool: cargo-hack - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - run: cargo xtask test-docs # Run cargo test on the libraries of the crate. test-libs: name: Test Libs ${{ matrix.toolchain }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: toolchain: ["1.85.0", "stable"] steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master with: toolchain: stable - uses: taiki-e/install-action@f3a27926ea13d7be3ee2f4cbb925883cf9442b56 # v2 with: tool: cargo-hack - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - run: cargo xtask test-libs # Run cargo test on all the backends. test-backends: name: Test ${{matrix.backend}} on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] backend: [crossterm, termion, termwiz] exclude: # termion is not supported on windows - os: windows-latest backend: termion steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # master with: toolchain: stable - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2 - run: cargo xtask test-backend ${{ matrix.backend }}