mirror of
https://github.com/ClementTsang/bottom.git
synced 2024-11-09 04:44:55 +03:00
dd66ae774c
* refactor: simplify some config -> constraints code * iteratively progress... * update bcr; this might need testing since I removed some old proc code * widget side * fix battery * fix widget tests with bandaid for now The issue was that the calculations assume a certain ratio for CPU legends. * add some tests * bump up * fix proc drawing issues So with the proc widget in certain places, there would be a panic during constraint determination. Looks like back when I wrote this I made some gross assumptions about certain things. In particular, the problem here was that the search added an additional "one" height, so that needs to be accounted for after we removed the "doubling" code. * tests * fix tests * reorganize tests * clippy * fix cross tests not working * fix builds for android
294 lines
9.4 KiB
YAML
294 lines
9.4 KiB
YAML
# Main CI workflow to validate PRs and branches are correctly formatted
|
|
# and pass tests.
|
|
#
|
|
# CI workflow was based on a lot of work from other people:
|
|
# - https://github.com/heim-rs/heim/blob/master/.github/workflows/ci.yml
|
|
# - https://github.com/BurntSushi/ripgrep/blob/master/.github/workflows/ci.yml
|
|
# - https://www.reillywood.com/blog/rust-faster-ci/
|
|
# - https://matklad.github.io/2021/09/04/fast-rust-builds.html
|
|
#
|
|
# Supported platforms run the following tasks:
|
|
# - cargo fmt
|
|
# - cargo test (built/test in separate steps)
|
|
# - cargo clippy (apparently faster to do it after the build/test)
|
|
#
|
|
# Unsupported platforms run the following tasks:
|
|
# - cargo build
|
|
#
|
|
# Note that not all platforms are tested using this CI action! There are some
|
|
# tested by Cirrus CI due to (free) platform limitations on GitHub. Currently,
|
|
# this is just macOS M1 and FreeBSD.
|
|
|
|
name: ci
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
CARGO_INCREMENTAL: 0
|
|
CARGO_PROFILE_DEV_DEBUG: 0
|
|
CARGO_HUSKY_DONT_INSTALL_HOOKS: true
|
|
COMPLETION_DIR: "target/tmp/bottom/completion/"
|
|
MANPAGE_DIR: "target/tmp/bottom/manpage/"
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' || github.repository != 'ClementTsang/bottom' }}
|
|
|
|
jobs:
|
|
# Check if things should be skipped.
|
|
pre-job:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
should_skip: ${{ steps.skip_check.outputs.should_skip }}
|
|
steps:
|
|
- name: Check if this action should be skipped
|
|
id: skip_check
|
|
uses: fkirc/skip-duplicate-actions@12aca0a884f6137d619d6a8a09fcc3406ced5281 # v5.3.0
|
|
with:
|
|
skip_after_successful_duplicate: "true"
|
|
paths: '[".cargo/**", ".github/workflows/ci.yml", "sample_configs/**", "src/**", "tests/**", "build.rs", "Cargo.lock", "Cargo.toml", "clippy.toml", "rustfmt.toml", "Cross.toml"]'
|
|
do_not_skip: '["workflow_dispatch", "push"]'
|
|
|
|
# Runs rustfmt + tests + clippy on the main supported platforms.
|
|
#
|
|
# Note that m1 macOS is tested via CirrusCI.
|
|
supported:
|
|
needs: pre-job
|
|
if: ${{ needs.pre-job.outputs.should_skip != 'true' }}
|
|
runs-on: ${{ matrix.info.os }}
|
|
timeout-minutes: 18
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
info:
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "x86_64-unknown-linux-gnu",
|
|
cross: false,
|
|
}
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "aarch64-unknown-linux-gnu",
|
|
cross: true,
|
|
}
|
|
- { os: "macos-12", target: "x86_64-apple-darwin", cross: false }
|
|
- {
|
|
os: "windows-2019",
|
|
target: "x86_64-pc-windows-msvc",
|
|
cross: false,
|
|
}
|
|
features: ["--all-features", "--no-default-features"]
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
|
|
- name: Set up Rust toolchain
|
|
uses: dtolnay/rust-toolchain@b44cb146d03e8d870c57ab64b80f04586349ca5d
|
|
with:
|
|
toolchain: stable
|
|
components: rustfmt, clippy
|
|
target: ${{ matrix.info.target }}
|
|
|
|
- name: Enable Rust cache
|
|
uses: Swatinem/rust-cache@a95ba195448af2da9b00fb742d14ffaaf3c21f43 # 2.7.0
|
|
if: ${{ github.event_name != 'pull_request' || ! github.event.pull_request.head.repo.fork }} # If it is a PR, only if not a fork
|
|
with:
|
|
key: ${{ matrix.info.target }}
|
|
cache-all-crates: true
|
|
|
|
- name: Check cargo fmt
|
|
run: cargo fmt --all -- --check
|
|
|
|
- name: Build tests
|
|
uses: ClementTsang/cargo-action@v0.0.5
|
|
with:
|
|
command: test
|
|
args: --no-run --locked ${{ matrix.features }} --target=${{ matrix.info.target }}
|
|
use-cross: ${{ matrix.info.cross }}
|
|
cross-version: 0.2.5
|
|
env:
|
|
RUST_BACKTRACE: full
|
|
|
|
- name: Run tests
|
|
uses: ClementTsang/cargo-action@v0.0.5
|
|
with:
|
|
command: test
|
|
args: --no-fail-fast ${{ matrix.features }} --target=${{ matrix.info.target }} -- --nocapture --quiet
|
|
use-cross: ${{ matrix.info.cross }}
|
|
cross-version: 0.2.5
|
|
env:
|
|
RUST_BACKTRACE: full
|
|
|
|
- name: Run clippy
|
|
uses: ClementTsang/cargo-action@v0.0.5
|
|
with:
|
|
command: clippy
|
|
args: ${{ matrix.features }} --all-targets --workspace --target=${{ matrix.info.target }} -- -D warnings
|
|
use-cross: ${{ matrix.info.cross }}
|
|
cross-version: 0.2.5
|
|
env:
|
|
RUST_BACKTRACE: full
|
|
|
|
# Try running cargo build on all other platforms.
|
|
# TODO: Maybe some of these should be allowed to fail.
|
|
other-check:
|
|
needs: pre-job
|
|
runs-on: ${{ matrix.info.os }}
|
|
if: ${{ needs.pre-job.outputs.should_skip != 'true' }}
|
|
timeout-minutes: 20
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
info:
|
|
# x86 or x64
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "i686-unknown-linux-gnu",
|
|
cross: true,
|
|
rust: stable,
|
|
}
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "x86_64-unknown-linux-musl",
|
|
cross: false,
|
|
rust: stable,
|
|
}
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "i686-unknown-linux-musl",
|
|
cross: true,
|
|
rust: stable,
|
|
}
|
|
- {
|
|
os: "windows-2019",
|
|
target: "i686-pc-windows-msvc",
|
|
cross: false,
|
|
rust: stable,
|
|
}
|
|
- {
|
|
os: "windows-2019",
|
|
target: "x86_64-pc-windows-gnu",
|
|
cross: false,
|
|
rust: stable,
|
|
}
|
|
|
|
# Beta
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "x86_64-unknown-linux-gnu",
|
|
cross: false,
|
|
rust: beta,
|
|
}
|
|
- {
|
|
os: "macos-12",
|
|
target: "x86_64-apple-darwin",
|
|
cross: false,
|
|
rust: beta,
|
|
}
|
|
- {
|
|
os: "windows-2019",
|
|
target: "x86_64-pc-windows-msvc",
|
|
cross: false,
|
|
rust: beta,
|
|
}
|
|
|
|
# armv7
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "armv7-unknown-linux-gnueabihf",
|
|
cross: true,
|
|
rust: stable,
|
|
}
|
|
|
|
# armv6
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "arm-unknown-linux-gnueabihf",
|
|
cross: true,
|
|
rust: stable,
|
|
}
|
|
|
|
# PowerPC 64 LE
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "powerpc64le-unknown-linux-gnu",
|
|
cross: true,
|
|
rust: stable,
|
|
}
|
|
|
|
# Risc-V 64gc
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "riscv64gc-unknown-linux-gnu",
|
|
cross: true,
|
|
rust: stable,
|
|
}
|
|
|
|
# Android ARM64
|
|
- {
|
|
os: "ubuntu-latest",
|
|
target: "aarch64-linux-android",
|
|
cross: true,
|
|
rust: stable,
|
|
cross-version: "git:cabfc3b02d1edec03869fabdabf6a7f8b0519160",
|
|
no-default-features: true,
|
|
}
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
|
|
- name: Set up Rust toolchain
|
|
uses: dtolnay/rust-toolchain@b44cb146d03e8d870c57ab64b80f04586349ca5d
|
|
with:
|
|
toolchain: ${{ matrix.info.rust }}
|
|
target: ${{ matrix.info.target }}
|
|
|
|
- name: Enable Rust cache
|
|
uses: Swatinem/rust-cache@a95ba195448af2da9b00fb742d14ffaaf3c21f43 # 2.7.0
|
|
if: ${{ github.event_name != 'pull_request' || ! github.event.pull_request.head.repo.fork }} # If it is a PR, only if not a fork
|
|
with:
|
|
key: ${{ matrix.info.target }}
|
|
cache-all-crates: true
|
|
|
|
- name: Try building with only default features enabled
|
|
uses: ClementTsang/cargo-action@v0.0.5
|
|
if: ${{ matrix.info.no-default-features != true }}
|
|
with:
|
|
command: build
|
|
args: --all-targets --verbose --target=${{ matrix.info.target }} --locked
|
|
use-cross: ${{ matrix.info.cross }}
|
|
cross-version: ${{ matrix.info.cross-version || '0.2.5' }}
|
|
|
|
- name: Try building with no features enabled
|
|
uses: ClementTsang/cargo-action@v0.0.5
|
|
if: ${{ matrix.info.no-default-features == true }}
|
|
with:
|
|
command: build
|
|
args: --all-targets --verbose --target=${{ matrix.info.target }} --locked --no-default-features
|
|
use-cross: ${{ matrix.info.cross }}
|
|
cross-version: ${{ matrix.info.cross-version || '0.2.5' }}
|
|
|
|
completion:
|
|
name: "CI Pass Check"
|
|
needs: [supported, other-check]
|
|
if: ${{ success() || failure() }}
|
|
runs-on: "ubuntu-latest"
|
|
steps:
|
|
- name: CI Passed
|
|
if: ${{ (needs.supported.result == 'success' && needs.other-check.result == 'success') || (needs.supported.result == 'skipped' && needs.other-check.result == 'skipped') }}
|
|
run: |
|
|
echo "CI workflow completed successfully.";
|
|
|
|
- name: CI Failed
|
|
if: ${{ needs.supported.result == 'failure' && needs.other-check.result == 'failure' }}
|
|
run: |
|
|
echo "CI workflow failed at some point.";
|
|
exit 1;
|