Skip to content

style: fix formatting #37

style: fix formatting

style: fix formatting #37

Workflow file for this run

name: Linux Build
on:
push:
paths-ignore:
- "README.md"
- ".gitignore"
- "LICENSE"
- "*.md"
- "docs/**"
pull_request:
paths-ignore:
- "README.md"
- ".gitignore"
- "LICENSE"
- "*.md"
- "docs/**"
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
defaults:
run:
working-directory: auto-cpufreq
permissions:
contents: write
jobs:
format:
name: Check formatting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Auto-fix formatting
run: cargo fmt --all
- name: Check for formatting changes
id: fmt_diff
working-directory: .
run: |
git diff --exit-code || echo "has_changes=true" >> $GITHUB_OUTPUT
- name: Commit formatting fixes (branch only)
if: steps.fmt_diff.outputs.has_changes == 'true' && github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/')
working-directory: .
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add -A
git commit -m "style: auto-fix cargo fmt"
git push
- name: Warn on tag push with formatting issues
if: steps.fmt_diff.outputs.has_changes == 'true' && startsWith(github.ref, 'refs/tags/')
working-directory: .
run: |
echo "⚠️ Formatting issues exist but continuing for tag release."
echo "Run 'cargo fmt --all' before tagging next time."
- name: Fail on PR with formatting issues
if: steps.fmt_diff.outputs.has_changes == 'true' && github.event_name == 'pull_request'
run: |
echo "❌ Formatting issues found. Run 'cargo fmt --all' locally."
exit 1
clippy:
name: Clippy lints
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Install dependencies
working-directory: .
run: |
sudo apt-get update
sudo apt-get install -y \
pkg-config \
libssl-dev \
libdbus-1-dev \
dmidecode \
libgtk-4-dev \
libappindicator3-dev \
gir1.2-appindicator3-0.1 \
libglib2.0-dev \
libcairo2-dev \
libpango1.0-dev \
libgdk-pixbuf2.0-dev \
gobject-introspection \
libgirepository1.0-dev
- name: Cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
auto-cpufreq/target
key: ${{ runner.os }}-cargo-clippy-${{ hashFiles('auto-cpufreq/Cargo.lock') }}
- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings
build_cli:
name: Build CLI (no GUI)
runs-on: ubuntu-latest
needs: [format, clippy]
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install dependencies
working-directory: .
run: |
sudo apt-get update
sudo apt-get install -y \
pkg-config \
libssl-dev \
libdbus-1-dev \
dmidecode
- name: Cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
auto-cpufreq/target
key: ${{ runner.os }}-cargo-cli-${{ hashFiles('auto-cpufreq/Cargo.lock') }}
- name: Build release (CLI only)
run: cargo build --release --verbose
- name: Run tests
run: cargo test --release --verbose
continue-on-error: true
- name: Check binary
run: |
ls -lh target/release/auto-cpufreq
file target/release/auto-cpufreq
ldd target/release/auto-cpufreq || true
- name: Upload CLI binary
uses: actions/upload-artifact@v4
with:
name: auto-cpufreq-linux-cli
path: auto-cpufreq/target/release/auto-cpufreq
retention-days: 30
build_gui:
name: Build with GUI (GTK4)
runs-on: ubuntu-latest
needs: [format, clippy]
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install dependencies
working-directory: .
run: |
sudo apt-get update
sudo apt-get install -y \
pkg-config \
libssl-dev \
libdbus-1-dev \
dmidecode \
libgtk-4-dev \
libappindicator3-dev \
gir1.2-appindicator3-0.1 \
libglib2.0-dev \
libcairo2-dev \
libpango1.0-dev \
libgdk-pixbuf2.0-dev \
gobject-introspection \
libgirepository1.0-dev
- name: Cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
auto-cpufreq/target
key: ${{ runner.os }}-cargo-gui-${{ hashFiles('auto-cpufreq/Cargo.lock') }}
- name: Build release (with GUI)
run: cargo build --release --features gui --verbose
- name: Check binaries
run: |
ls -lh target/release/auto-cpufreq*
file target/release/auto-cpufreq
[ -f target/release/auto-cpufreq-gtk ] && file target/release/auto-cpufreq-gtk || echo "⚠️ GUI binary not found"
[ -f target/release/auto-cpufreq-tray ] && file target/release/auto-cpufreq-tray || echo "⚠️ Tray binary not found"
- name: Upload GUI binaries
uses: actions/upload-artifact@v4
with:
name: auto-cpufreq-linux-gui
path: |
auto-cpufreq/target/release/auto-cpufreq
auto-cpufreq/target/release/auto-cpufreq-gtk
auto-cpufreq/target/release/auto-cpufreq-tray
retention-days: 30
test_install:
name: Test installation script
runs-on: ubuntu-latest
needs: [build_cli]
steps:
- uses: actions/checkout@v4
- name: Install system dependencies
working-directory: .
run: |
sudo apt-get update
sudo apt-get install -y \
pkg-config \
libssl-dev \
libdbus-1-dev \
dmidecode
- name: Download CLI artifact
uses: actions/download-artifact@v4
with:
name: auto-cpufreq-linux-cli
path: auto-cpufreq/target/release/
- name: Make binary executable
run: chmod +x target/release/auto-cpufreq
- name: Test installer (dry run)
working-directory: .
run: |
if [ -f auto-cpufreq-installer ]; then
chmod +x auto-cpufreq-installer
./auto-cpufreq-installer --help || echo "Installer help not available"
else
echo "auto-cpufreq-installer not found, skipping"
fi
- name: Install and verify binary
run: |
sudo cp target/release/auto-cpufreq /usr/local/bin/
auto-cpufreq --version || echo "Version check failed"
auto-cpufreq --help
test_distros:
name: Test on ${{ matrix.distro }}
runs-on: ubuntu-latest
needs: [build_cli]
strategy:
matrix:
distro:
- ubuntu:22.04
- ubuntu:24.04
- debian:12
- fedora:39
- archlinux:latest
container:
image: ${{ matrix.distro }}
steps:
- uses: actions/checkout@v4
- name: Install dependencies (Debian/Ubuntu)
if: startsWith(matrix.distro, 'ubuntu') || startsWith(matrix.distro, 'debian')
working-directory: .
run: apt-get update && apt-get install -y curl gcc pkg-config libssl-dev libdbus-1-dev dmidecode
- name: Install dependencies (Fedora)
if: startsWith(matrix.distro, 'fedora')
working-directory: .
run: dnf install -y curl gcc openssl-devel dbus-devel dmidecode pkgconfig
- name: Install dependencies (Arch)
if: startsWith(matrix.distro, 'archlinux')
working-directory: .
run: pacman -Sy --noconfirm curl gcc openssl dbus dmidecode pkg-config
- name: Install Rust
working-directory: .
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
. $HOME/.cargo/env
rustc --version
- name: Build
run: |
. $HOME/.cargo/env
cargo build --release
- name: Basic smoke test
run: |
./target/release/auto-cpufreq --version || true
./target/release/auto-cpufreq --help || true
security_audit:
name: Security audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install cargo-audit
working-directory: .
run: cargo install cargo-audit
- name: Run security audit
run: cargo audit
continue-on-error: true
coverage:
name: Code coverage
runs-on: ubuntu-latest
needs: [build_cli]
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: llvm-tools-preview
- name: Install dependencies
working-directory: .
run: |
sudo apt-get update
sudo apt-get install -y \
pkg-config \
libssl-dev \
libdbus-1-dev \
dmidecode \
libgtk-4-dev \
libappindicator3-dev \
gir1.2-appindicator3-0.1 \
libglib2.0-dev \
libcairo2-dev \
libpango1.0-dev \
libgdk-pixbuf2.0-dev \
gobject-introspection \
libgirepository1.0-dev
- name: Install cargo-llvm-cov
working-directory: .
run: cargo install cargo-llvm-cov
- name: Generate coverage
run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
continue-on-error: true
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: auto-cpufreq/lcov.info
fail_ci_if_error: false
continue-on-error: true
create_artifacts:
name: Create release artifacts
runs-on: ubuntu-latest
needs: [build_cli, build_gui, test_install]
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install dependencies
working-directory: .
run: |
sudo apt-get update
sudo apt-get install -y \
pkg-config \
libssl-dev \
libdbus-1-dev \
dmidecode \
libgtk-4-dev \
libappindicator3-dev \
gir1.2-appindicator3-0.1 \
libglib2.0-dev \
libcairo2-dev \
libpango1.0-dev \
libgdk-pixbuf2.0-dev \
gobject-introspection \
libgirepository1.0-dev
- name: Build CLI binary
run: cargo build --release
- name: Build GUI binary
run: cargo build --release --features gui
- name: List built binaries
run: ls -lh target/release/auto-cpufreq*
- name: Package CLI binary
run: cp target/release/auto-cpufreq auto-cpufreq-linux-x86_64
- name: Package GUI tarball
run: |
cd ..
GUI_FILES="auto-cpufreq/target/release/auto-cpufreq"
[ -f auto-cpufreq/target/release/auto-cpufreq-gtk ] && GUI_FILES="$GUI_FILES auto-cpufreq/target/release/auto-cpufreq-gtk"
[ -f auto-cpufreq/target/release/auto-cpufreq-tray ] && GUI_FILES="$GUI_FILES auto-cpufreq/target/release/auto-cpufreq-tray"
tar czf auto-cpufreq/auto-cpufreq-linux-x86_64-gui.tar.gz \
$GUI_FILES \
scripts/ \
images/ \
README.md \
LICENSE
- name: Generate checksums
run: |
sha256sum auto-cpufreq-linux-x86_64 > checksums.txt
sha256sum auto-cpufreq-linux-x86_64-gui.tar.gz >> checksums.txt
cat checksums.txt
- name: Publish GitHub Release
uses: softprops/action-gh-release@v2
with:
files: |
auto-cpufreq/auto-cpufreq-linux-x86_64
auto-cpufreq/auto-cpufreq-linux-x86_64-gui.tar.gz
auto-cpufreq/checksums.txt
generate_release_notes: true