From a8fcc3bd4c4f9a6bb4f08769900ee41eec7e2842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jalil=20David=20Salam=C3=A9=20Messina?= Date: Sun, 2 Jun 2024 16:18:21 +0200 Subject: [PATCH 1/3] [feat] ci: add forgejo ci --- .forgejo/workflows/check.yml | 14 ++++++++++++++ flake.nix | 7 +++++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 .forgejo/workflows/check.yml diff --git a/.forgejo/workflows/check.yml b/.forgejo/workflows/check.yml new file mode 100644 index 0000000..1e807b3 --- /dev/null +++ b/.forgejo/workflows/check.yml @@ -0,0 +1,14 @@ +on: [push] +jobs: + check: + runs-on: nixos + steps: + - uses: https://code.forgejo.org/actions/checkout@v4 + - run: nix --version + - run: nix flake check --keep-going + build: + runs-on: nixos + steps: + - uses: https://code.forgejo.org/actions/checkout@v4 + - run: nix --version + - run: nix build --print-build-logs .# diff --git a/flake.nix b/flake.nix index 6ae3357..6f2ea7e 100644 --- a/flake.nix +++ b/flake.nix @@ -14,8 +14,11 @@ in { formatter = forEachSupportedSystem (system: nixpkgs.legacyPackages.${system}.alejandra); - packages = forEachSupportedSystem (system: { - default = nixpkgs.legacyPackages.${system}.callPackage ./default.nix {}; + packages = forEachSupportedSystem (system: let + webnsupdate = nixpkgs.legacyPackages.${system}.callPackage ./default.nix {}; + in { + inherit webnsupdate; + default = webnsupdate; }); overlays.default = final: prev: { -- 2.47.0 From ee65b5dcacb100ee3660192b5590f7e251a81efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jalil=20David=20Salam=C3=A9=20Messina?= Date: Thu, 6 Jun 2024 23:29:30 +0200 Subject: [PATCH 2/3] [chore] lockfiles: update dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update `Cargo.lock` and `flake.lock`. Flake updates: ``` • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/ad57eef4ef0659193044870c731987a6df5cf56b' (2024-05-29) → 'github:NixOS/nixpkgs/e9ee548d90ff586a6471b4ae80ae9cfcbceb3420' (2024-06-13) ``` --- .forgejo/workflows/check.yml | 2 +- Cargo.lock | 72 ++++++++++++++++++------------------ flake.lock | 6 +-- flake.nix | 21 +++++++++++ run-cmd.nix | 16 ++++++++ 5 files changed, 77 insertions(+), 40 deletions(-) create mode 100644 run-cmd.nix diff --git a/.forgejo/workflows/check.yml b/.forgejo/workflows/check.yml index 1e807b3..ee386bf 100644 --- a/.forgejo/workflows/check.yml +++ b/.forgejo/workflows/check.yml @@ -5,7 +5,7 @@ jobs: steps: - uses: https://code.forgejo.org/actions/checkout@v4 - run: nix --version - - run: nix flake check --keep-going + - run: nix flake check --keep-going --verbose --print-build-logs build: runs-on: nixos steps: diff --git a/Cargo.lock b/Cargo.lock index 34ec365..7184c2e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -58,9 +58,9 @@ dependencies = [ [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" dependencies = [ "windows-sys 0.52.0", ] @@ -166,9 +166,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.72" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", @@ -214,9 +214,9 @@ checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[package]] name = "cc" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" [[package]] name = "cfg-if" @@ -226,9 +226,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.4" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" dependencies = [ "clap_builder", "clap_derive", @@ -236,9 +236,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" dependencies = [ "anstream", "anstyle", @@ -248,9 +248,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" dependencies = [ "heck", "proc-macro2", @@ -260,9 +260,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" [[package]] name = "colorchoice" @@ -402,12 +402,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "futures-core", + "futures-util", "http", "http-body", "pin-project-lite", @@ -415,9 +415,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "d0e7a4dd27b9476dc40cb050d3632d3bba3a70ddbff012285f7f8559a1e7e545" [[package]] name = "httpdate" @@ -536,9 +536,9 @@ checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miette" @@ -615,9 +615,9 @@ dependencies = [ [[package]] name = "object" -version = "0.35.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" +checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" dependencies = [ "memchr", ] @@ -698,14 +698,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.4" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] @@ -719,13 +719,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.4", ] [[package]] @@ -736,9 +736,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "ring" @@ -1124,9 +1124,9 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "untrusted" @@ -1136,9 +1136,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "valuable" diff --git a/flake.lock b/flake.lock index 8b12a52..4e9ae99 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1716948383, - "narHash": "sha256-SzDKxseEcHR5KzPXLwsemyTR/kaM9whxeiJohbL04rs=", + "lastModified": 1718318537, + "narHash": "sha256-4Zu0RYRcAY/VWuu6awwq4opuiD//ahpc2aFHg2CWqFY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ad57eef4ef0659193044870c731987a6df5cf56b", + "rev": "e9ee548d90ff586a6471b4ae80ae9cfcbceb3420", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 6f2ea7e..530439b 100644 --- a/flake.nix +++ b/flake.nix @@ -12,6 +12,27 @@ }: let forEachSupportedSystem = nixpkgs.lib.genAttrs (import systems); in { + checks = forEachSupportedSystem (system: let + pkgs = nixpkgs.legacyPackages.${system}; + inherit (nixpkgs) lib; + in { + fmtRust = pkgs.callPackage ./run-cmd.nix { + src = self; + name = "fmt-rust"; + extraNativeBuildInputs = [pkgs.rustfmt]; + cmd = "${lib.getExe pkgs.cargo} fmt --all --check --verbose"; + }; + fmtNix = pkgs.callPackage ./run-cmd.nix { + src = self; + name = "fmt-nix"; + cmd = "${lib.getExe pkgs.alejandra} --check ."; + }; + lintNix = pkgs.callPackage ./run-cmd.nix { + src = self; + name = "lint-nix"; + cmd = "${lib.getExe pkgs.statix} check ."; + }; + }); formatter = forEachSupportedSystem (system: nixpkgs.legacyPackages.${system}.alejandra); packages = forEachSupportedSystem (system: let diff --git a/run-cmd.nix b/run-cmd.nix new file mode 100644 index 0000000..e483e7b --- /dev/null +++ b/run-cmd.nix @@ -0,0 +1,16 @@ +{ + stdenvNoCC, + src, + name, + cmd, + extraBuildInputs ? [], + extraNativeBuildInputs ? [], +}: +stdenvNoCC.mkDerivation { + name = "${name}-src"; + inherit src; + buildInputs = extraBuildInputs; + nativeBuildInputs = extraNativeBuildInputs; + buildPhase = cmd; + installPhase = "mkdir $out"; +} -- 2.47.0 From 965b289484d41255c707afd707e21ec193dc4793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jalil=20David=20Salam=C3=A9=20Messina?= Date: Sun, 16 Jun 2024 13:50:55 +0200 Subject: [PATCH 3/3] [feat] package: reduce rebuilds Only copy Rust sources to reduce rebuilds if only nix stuff (or CI) changed. --- .cargo/config | 1 + default.nix | 27 ++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) create mode 120000 .cargo/config diff --git a/.cargo/config b/.cargo/config new file mode 120000 index 0000000..ab8b69c --- /dev/null +++ b/.cargo/config @@ -0,0 +1 @@ +config.toml \ No newline at end of file diff --git a/default.nix b/default.nix index 4cd4398..a374ee4 100644 --- a/default.nix +++ b/default.nix @@ -6,13 +6,30 @@ cargoToml = readToml ./Cargo.toml; pname = cargoToml.package.name; inherit (cargoToml.package) version description; + src = lib.cleanSourceWith { + src = ./.; + name = "${pname}-source"; + # Adapted from + # no need to pull in crane for just this + filter = orig_path: type: let + path = toString orig_path; + base = baseNameOf path; + parentDir = baseNameOf (dirOf path); + matchesSuffix = lib.any (suffix: lib.hasSuffix suffix base) [ + # Rust sources + ".rs" + # TOML files are often used to configure cargo based tools (e.g. .cargo/config.toml) + ".toml" + ]; + isCargoLock = base == "Cargo.lock"; + # .cargo/config.toml is captured above + isOldStyleCargoConfig = parentDir == ".cargo" && base == "config"; + in + type == "directory" || matchesSuffix || isCargoLock || isOldStyleCargoConfig; + }; in rustPlatform.buildRustPackage { - inherit pname version; - src = builtins.path { - path = ./.; - name = "${pname}-source"; - }; + inherit pname version src; cargoLock.lockFile = ./Cargo.lock; useNextest = true; -- 2.47.0