all nix build

This commit is contained in:
Robin Appelman 2023-05-18 22:19:23 +02:00
commit 3c48a8461c
4 changed files with 94 additions and 84 deletions

32
.github/workflows/nix.yaml vendored Normal file
View file

@ -0,0 +1,32 @@
name: "Build"
on:
pull_request:
push:
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
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:
- uses: actions/checkout@v3
- uses: cachix/install-nix-action@v20
with:
nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v12
with:
name: palantir
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- run: nix build .#${{ matrix.target }}
- uses: actions/upload-artifact@v3
with:
name: palantir-${{ matrix.target }}
path: result/bin/*

View file

@ -6,36 +6,30 @@ on:
jobs:
release-binaries:
name: Build release binaries
runs-on: ubuntu-20.04
build:
runs-on: ubuntu-latest
strategy:
matrix:
target:
- x86_64-pc-windows-gnu
- x86_64-unknown-linux-musl
- i686-unknown-linux-musl
- armv7-unknown-linux-musleabihf
- aarch64-unknown-linux-musl
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
- uses: actions/checkout@v3
- uses: cachix/install-nix-action@v20
with:
profile: minimal
toolchain: stable
override: true
target: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v1
- name: Build release binary
uses: actions-rs/cargo@v1
nix_path: nixpkgs=channel:nixos-unstable
- uses: cachix/cachix-action@v12
with:
use-cross: true
command: build
args: --release --target ${{ matrix.target }}
- name: Upload amd64 binary to release
name: palantir
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- run: nix build .#${{ matrix.target }}
- name: Upload binary to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/${{ matrix.target }}/release/palantir
file: release/bin/*
asset_name: palantir-${{ matrix.target }}
tag: ${{ github.ref }}

View file

@ -1,49 +0,0 @@
on: [push, pull_request]
name: CI
jobs:
check:
name: Check
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- uses: Swatinem/rust-cache@v1
- uses: actions-rs/cargo@v1
with:
command: check
build:
name: Build
runs-on: ubuntu-20.04
strategy:
matrix:
target:
- x86_64-unknown-linux-musl
- i686-unknown-linux-musl
- armv7-unknown-linux-musleabihf
- aarch64-unknown-linux-musl
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
target: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v1
- uses: actions-rs/cargo@v1
with:
use-cross: true
command: build
args: --release --target ${{ matrix.target }}
- uses: actions/upload-artifact@v2
with:
name: palantir-${{ matrix.target }}
path: target/${{ matrix.target }}/release/palantir

View file

@ -27,9 +27,34 @@
inherit system overlays;
};
toolchain = (pkgs.rust-bin.stable.latest.default.override {
targets = [ "x86_64-pc-windows-gnu" ];
});
targets = [
"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"
];
toolchain = (pkgs.rust-bin.stable.latest.default.override { inherit targets; });
crossArgs = {
"armv7-unknown-linux-musleabihf" = {
nativeBuildInputs = [ pkgs.pkgsCross.armv7l-hf-multiplatform.stdenv.cc ];
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUSTFLAGS = "-C target-feature=+crt-static";
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER = "${pkgs.pkgsCross.armv7l-hf-multiplatform.stdenv.cc.targetPrefix}cc";
};
"aarch64-unknown-linux-musl" = {
nativeBuildInputs = [ pkgs.pkgsCross.aarch64-multiplatform-musl.stdenv.cc ];
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS = "-C target-feature=+crt-static";
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER = "${pkgs.pkgsCross.aarch64-multiplatform-musl.stdenv.cc.targetPrefix}cc";
};
"i686-unknown-linux-musl" = {
nativeBuildInputs = [ pkgs.pkgsCross.musl32.stdenv.cc ];
CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_RUSTFLAGS = "-C target-feature=+crt-static";
CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER = "${pkgs.pkgsCross.musl32.stdenv.cc.targetPrefix}cc";
};
};
mingw_w64_cc = pkgs.pkgsCross.mingwW64.stdenv.cc;
windows = pkgs.pkgsCross.mingwW64.windows;
@ -38,19 +63,8 @@
cargo = toolchain;
rustc = toolchain;
};
in rec {
# `nix build`
packages.palantir = naersk'.buildPackage {
pname = "palantir";
src = ./.;
postInstall = ''
mkdir -p $out/lib/udev/rules.d/
echo 'SUBSYSTEM=="powercap", ACTION=="add", 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
'';
};
packages.palantir-win = naersk'.buildPackage {
buildWindows = target: naersk'.buildPackage {
pname = "palantir";
src = ./.;
@ -59,11 +73,30 @@
mingw_w64_cc
];
nativeBuildInputs = [ mingw_w64_cc ];
# only add pthreads when building the final package, not when building the dependencies
# otherwise it interferes with building build scripts
overrideMain = args: args // { buildInputs = [ windows.pthreads ]; };
CARGO_BUILD_TARGET = "x86_64-pc-windows-gnu";
CARGO_BUILD_TARGET = target;
};
defaultPackage = packages.palantir;
buildLinux = target: naersk'.buildPackage ({
pname = "palantir";
src = ./.;
postInstall = ''
mkdir -p $out/lib/udev/rules.d/
echo 'SUBSYSTEM=="powercap", ACTION=="add", 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
'';
CARGO_BUILD_TARGET = target;
} // (if (pkgs.config != target) then (crossArgs.${target} or {}) else {}));
buildAny = target: if (nixpkgs.lib.strings.hasInfix "windows" target) then (buildWindows target) else (buildLinux target);
in rec {
# `nix build`
packages = nixpkgs.lib.attrsets.genAttrs targets buildAny;
defaultPackage = packages.${pkgs.config};
# `nix run`
apps.palantir = utils.lib.mkApp {