more ci work, clippy

This commit is contained in:
Robin Appelman 2023-06-09 19:57:40 +02:00
commit f72f4689e6
8 changed files with 83 additions and 48 deletions

View file

@ -4,18 +4,47 @@ on:
push: push:
jobs: jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: cachix/install-nix-action@v20
- uses: icewind1991/attic-action@v1
with:
name: ci
instance: https://cache.icewind.me
authToken: '${{ secrets.ATTIC_TOKEN }}'
- run: nix build .#check
clippy:
runs-on: ubuntu-latest
needs: check
steps:
- uses: actions/checkout@v3
- uses: cachix/install-nix-action@v20
- uses: icewind1991/attic-action@v1
with:
name: ci
instance: https://cache.icewind.me
authToken: '${{ secrets.ATTIC_TOKEN }}'
- run: nix build .#clippy
matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v3
- uses: cachix/install-nix-action@v20
- id: set-matrix
run: echo "matrix={\"target\":$(nix eval --json ".#targets.x86_64-linux")}" | tee $GITHUB_OUTPUT
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [check, matrix]
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix: ${{fromJson(needs.matrix.outputs.matrix)}}
target:
- x86_64-unknown-linux-gnu
- x86_64-pc-windows-gnu
- x86_64-unknown-linux-musl
- i686-unknown-linux-musl
- armv7-unknown-linux-musleabihf
- aarch64-unknown-linux-musl
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- uses: cachix/install-nix-action@v20 - uses: cachix/install-nix-action@v20

11
flake.lock generated
View file

@ -7,16 +7,17 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1679567394, "lastModified": 1686242667,
"narHash": "sha256-ZvLuzPeARDLiQUt6zSZFGOs+HZmE+3g4QURc8mkBsfM=", "narHash": "sha256-I7Kwp06WX/9E+rEND1i1wjdKQQm3XiDxYOyNK9fuJu0=",
"owner": "nix-community", "owner": "icewind1991",
"repo": "naersk", "repo": "naersk",
"rev": "88cd22380154a2c36799fe8098888f0f59861a15", "rev": "6d245a3bbb2ee31ec726bb57b9a8b206302e7110",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "icewind1991",
"repo": "naersk", "repo": "naersk",
"rev": "6d245a3bbb2ee31ec726bb57b9a8b206302e7110",
"type": "github" "type": "github"
} }
}, },

View file

@ -2,7 +2,7 @@
inputs = { inputs = {
nixpkgs.url = "nixpkgs/nixos-23.05"; nixpkgs.url = "nixpkgs/nixos-23.05";
utils.url = "github:numtide/flake-utils"; utils.url = "github:numtide/flake-utils";
naersk.url = "github:nix-community/naersk"; naersk.url = "github:icewind1991/naersk?rev=6d245a3bbb2ee31ec726bb57b9a8b206302e7110";
naersk.inputs.nixpkgs.follows = "nixpkgs"; naersk.inputs.nixpkgs.follows = "nixpkgs";
rust-overlay.url = "github:oxalica/rust-overlay"; rust-overlay.url = "github:oxalica/rust-overlay";
rust-overlay.inputs.nixpkgs.follows = "nixpkgs"; rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
@ -21,6 +21,7 @@
pkgs = import nixpkgs { pkgs = import nixpkgs {
inherit system overlays; inherit system overlays;
}; };
lib = pkgs.lib;
pkgs-cross-mingw = import nixpkgs { pkgs-cross-mingw = import nixpkgs {
crossSystem = { crossSystem = {
@ -72,10 +73,14 @@
echo 'SUBSYSTEM=="powercap", ACTION=="change", ENV{TRIGGER}!="none", RUN+="${pkgs.coreutils-full}/bin/chgrp -R powermonitoring /sys%p", RUN+="${pkgs.coreutils-full}/bin/chmod -R g=u /sys%p"' >> $out/lib/udev/rules.d/51-palantir.rules echo 'SUBSYSTEM=="powercap", ACTION=="change", ENV{TRIGGER}!="none", RUN+="${pkgs.coreutils-full}/bin/chgrp -R powermonitoring /sys%p", RUN+="${pkgs.coreutils-full}/bin/chmod -R g=u /sys%p"' >> $out/lib/udev/rules.d/51-palantir.rules
''; '';
buildWindows = target: naersk'.buildPackage { src = lib.sources.sourceByRegex (lib.cleanSource ./.) ["Cargo.*" "(src|benches)(/.*)?"];
pname = "palantir";
src = ./.;
nearskOpt = {
pname = "palantir";
root = src;
};
buildWindows = target: naersk'.buildPackage (nearskOpt // {
strictDeps = true; strictDeps = true;
depsBuildBuild = with pkgs; [ depsBuildBuild = with pkgs; [
mingw_w64_cc mingw_w64_cc
@ -86,12 +91,9 @@
overrideMain = args: args // { buildInputs = [ windows.pthreads ]; }; overrideMain = args: args // { buildInputs = [ windows.pthreads ]; };
CARGO_BUILD_TARGET = target; CARGO_BUILD_TARGET = target;
}; });
buildLinux = target: naersk'.buildPackage ({
pname = "palantir";
src = ./.;
buildLinux = target: naersk'.buildPackage (nearskOpt // {
postInstall = addUdev; postInstall = addUdev;
CARGO_BUILD_TARGET = target; CARGO_BUILD_TARGET = target;
@ -99,21 +101,28 @@
buildAny = target: if (nixpkgs.lib.strings.hasInfix "windows" target) then (buildWindows target) else (buildLinux target); buildAny = target: if (nixpkgs.lib.strings.hasInfix "windows" target) then (buildWindows target) else (buildLinux target);
in rec { in rec {
# `nix build` # `nix build`
packages = nixpkgs.lib.attrsets.genAttrs targets buildAny; packages = nixpkgs.lib.attrsets.genAttrs targets buildAny // rec {
defaultPackage = naersk'.buildPackage { palantir = naersk'.buildPackage (nearskOpt // {
pname = "palantir";
src = ./.;
postInstall = addUdev; postInstall = addUdev;
});
check = naersk'.buildPackage (nearskOpt // {
mode = "check";
});
clippy = naersk'.buildPackage (nearskOpt // {
mode = "clippy";
});
default = palantir;
}; };
# `nix run`
apps.palantir = utils.lib.mkApp { apps.palantir = utils.lib.mkApp {
drv = packages.palantir; drv = packages.palantir;
}; };
defaultApp = apps.palantir; defaultApp = apps.palantir;
inherit targets;
# `nix develop` # `nix develop`
devShell = pkgs.mkShell { devShells.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [ nativeBuildInputs = with pkgs; [
toolchain toolchain
bacon bacon

View file

@ -105,5 +105,5 @@ pub async fn stat(docker: Docker) -> Result<impl Stream<Item = Container>> {
} }
}) })
.collect::<FuturesUnordered<_>>() .collect::<FuturesUnordered<_>>()
.filter_map(|opt| ready(opt))) .filter_map(ready))
} }

View file

@ -126,10 +126,12 @@ impl Iterator for DiskUsageParser<'_> {
return None; return None;
} }
let mount_point = parts.next()?; let mount_point = parts.next()?;
let stat = match statvfs(&mount_point) { let stat = match statvfs(mount_point) {
Ok(stat) => stat, Ok(stat) => stat,
Err(e) => return Some(Err(e)), Err(e) => return Some(Err(e)),
}; };
// cast is needed on 32bit platforms
#[allow(clippy::unnecessary_cast)]
Some(Ok(DiskUsage { Some(Ok(DiskUsage {
name: mount_point.to_string(), name: mount_point.to_string(),
size: stat.f_blocks * stat.f_frsize as u64, size: stat.f_blocks * stat.f_frsize as u64,

View file

@ -22,7 +22,7 @@ pub fn pools() -> impl Iterator<Item = DiskUsage> {
fn zpool_command() -> Result<String> { fn zpool_command() -> Result<String> {
let mut z = Command::new("zpool"); let mut z = Command::new("zpool");
z.args(&["list", "-p", "-H", "-o", "name,size,free"]); z.args(["list", "-p", "-H", "-o", "name,size,free"]);
let out = z.output()?; let out = z.output()?;
if out.status.success() { if out.status.success() {
Ok(String::from_utf8(out.stdout)?) Ok(String::from_utf8(out.stdout)?)

View file

@ -61,8 +61,8 @@ pub fn get_metrics(sensors: &Sensors) -> Result<String> {
let pools = pools(); let pools = pools();
let mut result = String::with_capacity(256); let mut result = String::with_capacity(256);
cpu.write(&mut result, &hostname); cpu.write(&mut result, hostname);
memory.write(&mut result, &hostname); memory.write(&mut result, hostname);
for pool in pools { for pool in pools {
writeln!( writeln!(
@ -78,22 +78,16 @@ pub fn get_metrics(sensors: &Sensors) -> Result<String> {
) )
.ok(); .ok();
} }
for network in networks { for network in networks.flatten() {
if let Ok(network) = network { network.write(&mut result, hostname);
network.write(&mut result, &hostname);
} }
} for disk in disks.flatten() {
for disk in disks {
if let Ok(disk) = disk {
disk.write(&mut result, hostname); disk.write(&mut result, hostname);
} }
}
for disk in disk_usage { for disk in disk_usage.flatten() {
if let Ok(disk) = disk {
disk.write(&mut result, hostname); disk.write(&mut result, hostname);
} }
}
for (label, temp) in temperatures { for (label, temp) in temperatures {
if temp != 0.0 { if temp != 0.0 {
writeln!( writeln!(

View file

@ -120,7 +120,7 @@ async fn setup_mdns(hostname: String, port: u16) {
"_prometheus-http._tcp".into(), "_prometheus-http._tcp".into(),
hostname, hostname,
port, port,
&[&"/metrics"], &["/metrics"],
); );
loop { loop {