From c177b7af9f4d1109682259e7db31203b32a25914 Mon Sep 17 00:00:00 2001 From: Michal Rus Date: Mon, 30 Jun 2025 14:25:04 +0200 Subject: [PATCH 1/9] =?UTF-8?q?fix:=20`aarch64-linux`=20compilation=20of?= =?UTF-8?q?=20Pallas=E2=80=99=20`phase2`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 2 +- build.rs | 2 +- flake.nix | 8 +- nix/internal/linux-cross-arm64.nix | 92 ------------- .../testgen-hs--enable-aarch64-linux.diff | 124 ++++++++++++++++++ nix/internal/unix.nix | 19 ++- 6 files changed, 146 insertions(+), 101 deletions(-) delete mode 100644 nix/internal/linux-cross-arm64.nix create mode 100644 nix/internal/testgen-hs--enable-aarch64-linux.diff diff --git a/Cargo.toml b/Cargo.toml index fd8d2e98..cc0dd054 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -57,7 +57,7 @@ blockfrost-openapi = "0.1.75" bech32 = "0.9.1" cardano-serialization-lib = "12.1.1" -[target.'cfg(not(any(target_os = "windows", all(target_os = "linux", target_arch = "aarch64"))))'.dependencies] +[target.'cfg(not(target_os = "windows"))'.dependencies] pallas-validate = { git = "https://github.com/blockfrost/pallas.git", tag = "blockfrost-platform-0.0.3-alpha3", features = [ "phase2", ] } diff --git a/build.rs b/build.rs index 6d2c92ed..69ad8e53 100644 --- a/build.rs +++ b/build.rs @@ -239,7 +239,7 @@ mod features { pub fn evaluate(target_os: &str, target_arch: &str) { println!("cargo::rustc-check-cfg=cfg(evaluate)"); - if (target_os == "linux" && target_arch == "aarch64") || target_os == "windows" { + if target_os == "windows" { println!( "cargo:warning=Skipping 'evaluate' cfg for {}-{}", target_os, target_arch diff --git a/flake.nix b/flake.nix index a1224f05..6484277f 100644 --- a/flake.nix +++ b/flake.nix @@ -36,7 +36,7 @@ systems = [ "x86_64-linux" - # "aarch64-linux" + "aarch64-linux" "aarch64-darwin" "x86_64-darwin" ]; @@ -51,7 +51,6 @@ } // (lib.optionalAttrs (system == "x86_64-linux") { blockfrost-platform-x86_64-windows = inputs.self.internal.x86_64-windows.package; - blockfrost-platform-aarch64-linux = inputs.self.internal.aarch64-linux.package; }); devshells.default = import ./nix/devshells.nix {inherit inputs;}; @@ -113,9 +112,6 @@ ) // lib.genAttrs ["x86_64-windows"] ( targetSystem: import ./nix/internal/windows.nix {inherit inputs targetSystem;} - ) - // lib.genAttrs ["aarch64-linux"] ( - targetSystem: import ./nix/internal/linux-cross-arm64.nix {inherit inputs targetSystem;} ); nixosModule = { @@ -128,7 +124,7 @@ }; hydraJobs = let - crossSystems = ["x86_64-windows" "aarch64-linux"]; + crossSystems = ["x86_64-windows"]; allJobs = { blockfrost-platform = lib.genAttrs (config.systems ++ crossSystems) ( targetSystem: inputs.self.internal.${targetSystem}.package diff --git a/nix/internal/linux-cross-arm64.nix b/nix/internal/linux-cross-arm64.nix deleted file mode 100644 index 0c29fa48..00000000 --- a/nix/internal/linux-cross-arm64.nix +++ /dev/null @@ -1,92 +0,0 @@ -{ - inputs, - targetSystem, -}: -assert builtins.elem targetSystem ["aarch64-linux"]; let - buildSystem = "x86_64-linux"; - pkgs = inputs.nixpkgs.legacyPackages.${buildSystem}; -in rec { - toolchain = with inputs.fenix.packages.${buildSystem}; - combine [ - minimal.rustc - minimal.cargo - targets.aarch64-unknown-linux-gnu.latest.rust-std - ]; - - craneLib = (inputs.crane.mkLib pkgs).overrideToolchain toolchain; - - src = craneLib.cleanCargoSource ../../.; - - pkgsCross = pkgs.pkgsCross.aarch64-multiplatform; - - commonArgs = rec { - inherit src; - strictDeps = true; - - CARGO_BUILD_TARGET = "aarch64-unknown-linux-gnu"; - TARGET_CC = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc"; - - CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER = TARGET_CC; - - TESTGEN_HS_PATH = "unused"; # Don’t try to download it in `build.rs`. - - OPENSSL_DIR = "${pkgsCross.openssl.dev}"; - OPENSSL_LIB_DIR = "${pkgsCross.openssl.out}/lib"; - OPENSSL_INCLUDE_DIR = "${pkgsCross.openssl.dev}/include/"; - - depsBuildBuild = [ - pkgsCross.stdenv.cc - #pkgsCross.windows.pthreads - ]; - }; - - # For better caching: - cargoArtifacts = craneLib.buildDepsOnly commonArgs; - - packageName = (craneLib.crateNameFromCargoToml {cargoToml = src + "/Cargo.toml";}).pname; - - GIT_REVISION = inputs.self.rev or "dirty"; - - package = craneLib.buildPackage (commonArgs - // { - inherit cargoArtifacts GIT_REVISION; - doCheck = false; - postPatch = '' - sed -r '/^build = .*/d' -i Cargo.toml - rm build.rs - ''; - }); - - archive = let - outFileName = "${package.pname}-${package.version}-${inputs.self.shortRev or "dirty"}-${targetSystem}.tar.bz2"; - in - pkgs.runCommandNoCC "${package.pname}-archive" {} '' - cp -r ${bundle} ${package.pname} - - mkdir -p $out - tar -cjvf $out/${outFileName} ${package.pname}/ - - # Make it downloadable from Hydra: - mkdir -p $out/nix-support - echo "file binary-dist \"$out/${outFileName}\"" >$out/nix-support/hydra-build-products - ''; - - nix-bundle-exe = import inputs.nix-bundle-exe; - - # Portable directory that can be run on any modern Linux: - bundle = - (nix-bundle-exe { - inherit pkgs; - bin_dir = "bin"; - exe_dir = "exe"; - lib_dir = "lib"; - } "${package}/bin/${packageName}") - .overrideAttrs (drv: { - name = packageName; - buildCommand = - drv.buildCommand - + '' - ( cd $out ; ln -s bin/${packageName} . ; ) - ''; - }); -} diff --git a/nix/internal/testgen-hs--enable-aarch64-linux.diff b/nix/internal/testgen-hs--enable-aarch64-linux.diff new file mode 100644 index 00000000..dfbdf727 --- /dev/null +++ b/nix/internal/testgen-hs--enable-aarch64-linux.diff @@ -0,0 +1,124 @@ +diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml +index 197c881..59ce8cc 100644 +--- a/.github/workflows/release.yml ++++ b/.github/workflows/release.yml +@@ -30,6 +30,10 @@ jobs: + result-archive-x86_64-linux \ + .#hydraJobs.testgen-hs.x86_64-linux + ++ nix build -L --builders '' --max-jobs 0 --out-link \ ++ result-archive-aarch64-linux \ ++ .#hydraJobs.testgen-hs.aarch64-linux ++ + nix build -L --builders '' --max-jobs 0 --out-link \ + result-archive-x86_64-windows \ + .#hydraJobs.testgen-hs.x86_64-windows +@@ -48,6 +52,7 @@ jobs: + with: + files: | + result-archive-x86_64-linux/*.tar.bz2 ++ result-archive-aarch64-linux/*.tar.bz2 + result-archive-x86_64-darwin/*.tar.bz2 + result-archive-aarch64-darwin/*.tar.bz2 + result-archive-x86_64-windows/*.zip +diff --git a/.github/workflows/upload.yml b/.github/workflows/upload.yml +index e54ea87..6c3f02b 100644 +--- a/.github/workflows/upload.yml ++++ b/.github/workflows/upload.yml +@@ -22,6 +22,7 @@ jobs: + run: | + set -euo pipefail + nix build --builders "" --max-jobs 0 .#hydraJobs.testgen-hs.x86_64-linux && cp result/testgen-hs-*.* . ++ nix build --builders "" --max-jobs 0 .#hydraJobs.testgen-hs.aarch64-linux && cp result/testgen-hs-*.* . + nix build --builders "" --max-jobs 0 .#hydraJobs.testgen-hs.x86_64-windows && cp result/testgen-hs-*.* . + nix build --builders "" --max-jobs 0 .#hydraJobs.testgen-hs.x86_64-darwin && cp result/testgen-hs-*.* . + nix build --builders "" --max-jobs 0 .#hydraJobs.testgen-hs.aarch64-darwin && cp result/testgen-hs-*.* . +@@ -49,6 +50,12 @@ jobs: + name: testgen-hs-${{ env.version }}-x86_64-linux.tar.bz2 + path: testgen-hs-${{ env.version }}-x86_64-linux.tar.bz2 + if-no-files-found: error ++ - name: Upload Artifact (aarch64-linux) ++ uses: actions/upload-artifact@v4 ++ with: ++ name: testgen-hs-${{ env.version }}-aarch64-linux.tar.bz2 ++ path: testgen-hs-${{ env.version }}-aarch64-linux.tar.bz2 ++ if-no-files-found: error + - name: Upload Artifact (x86_64-windows) + uses: actions/upload-artifact@v4 + with: +diff --git a/flake.nix b/flake.nix +index 72d2f8f..b192741 100644 +--- a/flake.nix ++++ b/flake.nix +@@ -28,7 +28,7 @@ + targetSystem: import ./nix/internal.nix {inherit inputs targetSystem;} + ); + +- systems = ["x86_64-linux" "aarch64-darwin" "x86_64-darwin"]; ++ systems = ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin"]; + perSystem = { + config, + system, +diff --git a/nix/internal.nix b/nix/internal.nix +index 51248ac..32b65f7 100644 +--- a/nix/internal.nix ++++ b/nix/internal.nix +@@ -13,11 +13,29 @@ assert __elem targetSystem ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86 + in rec { + defaultPackage = testgen-hs; + +- cardano-node-flake = (import inputs.flake-compat {src = inputs.cardano-node;}).defaultNix; ++ cardano-node-flake = let ++ unpatched = inputs.cardano-node; ++ in ++ (import inputs.flake-compat { ++ src = ++ if targetSystem != "aarch64-linux" ++ then unpatched ++ else { ++ outPath = toString (pkgs.runCommand "source" {} '' ++ cp -r ${unpatched} $out ++ chmod -R +w $out ++ cd $out ++ echo ${lib.escapeShellArg (builtins.toJSON [targetSystem])} $out/nix/supported-systems.nix ++ ''); ++ inherit (unpatched) rev shortRev lastModified lastModifiedDate; ++ }; ++ }) ++ .defaultNix; + + cardano-node-packages = + { + x86_64-linux = cardano-node-flake.hydraJobs.x86_64-linux.musl; ++ aarch64-linux = cardano-node-flake.hydraJobs.aarch64-linux.musl; + x86_64-darwin = cardano-node-flake.packages.x86_64-darwin; + aarch64-darwin = cardano-node-flake.packages.aarch64-darwin; + } +@@ -25,7 +43,6 @@ in rec { + + inherit (cardano-node-packages) cardano-node cardano-cli; + +- testgen-hs = let + patched-flake = let + unpatched = inputs.cardano-node; + in +@@ -48,9 +65,11 @@ in rec { + }; + }) + .defaultNix; ++ testgen-hs = let + in + { + x86_64-linux = patched-flake.hydraJobs.x86_64-linux.musl.testgen-hs; ++ aarch64-linux = patched-flake.project.aarch64-linux.projectCross.aarch64-multiplatform-musl.packages.testgen-hs.components.exes.testgen-hs; + x86_64-darwin = patched-flake.packages.x86_64-darwin.testgen-hs; + aarch64-darwin = patched-flake.packages.aarch64-darwin.testgen-hs; + x86_64-windows = patched-flake.legacyPackages.x86_64-linux.hydraJobs.windows.testgen-hs; +@@ -113,6 +132,7 @@ in rec { + aarch64-darwin = darwinLike; + x86_64-darwin = darwinLike; + x86_64-linux = linuxLike {}; ++ aarch64-linux = linuxLike {}; + x86_64-windows = linuxLike {useZip = true;}; + } + .${targetSystem}; diff --git a/nix/internal/unix.nix b/nix/internal/unix.nix index 5332ef02..c13bfe32 100644 --- a/nix/internal/unix.nix +++ b/nix/internal/unix.nix @@ -212,7 +212,24 @@ in done ''; - testgen-hs-flake = (import inputs.flake-compat {src = inputs.testgen-hs;}).defaultNix; + testgen-hs-flake = let + unpatched = inputs.testgen-hs; + in + (import inputs.flake-compat { + src = + if targetSystem != "aarch64-linux" + then unpatched + else { + outPath = toString (pkgs.runCommand "source" {} '' + cp -r ${unpatched} $out + chmod -R +w $out + cd $out + patch -p1 -i ${./testgen-hs--enable-aarch64-linux.diff} + ''); + inherit (unpatched) rev shortRev lastModified lastModifiedDate; + }; + }) + .defaultNix; testgen-hs = testgen-hs-flake.packages.${targetSystem}.default; From d719558cfee2920176a4552845992dd4241bfb33 Mon Sep 17 00:00:00 2001 From: Michal Rus Date: Mon, 30 Jun 2025 14:49:21 +0200 Subject: [PATCH 2/9] fix: a silly redirection bug --- nix/internal/testgen-hs--enable-aarch64-linux.diff | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/nix/internal/testgen-hs--enable-aarch64-linux.diff b/nix/internal/testgen-hs--enable-aarch64-linux.diff index dfbdf727..814f2207 100644 --- a/nix/internal/testgen-hs--enable-aarch64-linux.diff +++ b/nix/internal/testgen-hs--enable-aarch64-linux.diff @@ -60,7 +60,7 @@ index 72d2f8f..b192741 100644 config, system, diff --git a/nix/internal.nix b/nix/internal.nix -index 51248ac..32b65f7 100644 +index 51248ac..09382ab 100644 --- a/nix/internal.nix +++ b/nix/internal.nix @@ -13,11 +13,29 @@ assert __elem targetSystem ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86 @@ -102,6 +102,15 @@ index 51248ac..32b65f7 100644 patched-flake = let unpatched = inputs.cardano-node; in +@@ -35,7 +52,7 @@ in rec { + cp -r ${unpatched} $out + chmod -R +w $out + cd $out +- echo ${lib.escapeShellArg (builtins.toJSON [targetSystem])} $out/nix/supported-systems.nix ++ echo ${lib.escapeShellArg (builtins.toJSON [targetSystem])} >$out/nix/supported-systems.nix + cp -r ${../testgen-hs} ./testgen-hs + sed -r '/^packages:/ a\ testgen-hs' -i cabal.project + sed -r 's/other-modules:\s*/ , /g' -i cardano-submit-api/cardano-submit-api.cabal @@ -48,9 +65,11 @@ in rec { }; }) From d99849e3bc3af53d73cbdc527882289a31c33dac Mon Sep 17 00:00:00 2001 From: Michal Rus Date: Mon, 30 Jun 2025 15:17:56 +0200 Subject: [PATCH 3/9] fix: `cargo-clippy` issues --- build.rs | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/build.rs b/build.rs index 69ad8e53..67e95fa8 100644 --- a/build.rs +++ b/build.rs @@ -37,7 +37,7 @@ mod git_revision { use std::process::Command; if env::var(GIT_REVISION).is_ok() { - println!("Environment variable {} is set. Not setting.", GIT_REVISION); + println!("Environment variable {GIT_REVISION} is set. Not setting."); return; } @@ -58,7 +58,7 @@ mod git_revision { .to_string() }; - println!("cargo:rustc-env={}={}", GIT_REVISION, revision); + println!("cargo:rustc-env={GIT_REVISION}={revision}"); } } @@ -77,10 +77,7 @@ mod testgen_hs { pub fn ensure(target_os: &str, arch: &str) { if env::var(TESTGEN_HS_PATH).is_ok() { - println!( - "Environment variable {} is set. Skipping the download.", - TESTGEN_HS_PATH - ); + println!("Environment variable {TESTGEN_HS_PATH} is set. Skipping the download."); return; } @@ -92,13 +89,12 @@ mod testgen_hs { ".tar.bz2" }; - let file_name = format!("testgen-hs-{}-{}-{}", testgen_lib_version, arch, target_os); + let file_name = format!("testgen-hs-{testgen_lib_version}-{arch}-{target_os}"); let download_url = format!( - "https://github.com/input-output-hk/testgen-hs/releases/download/{}/{}{}", - testgen_lib_version, file_name, suffix + "https://github.com/input-output-hk/testgen-hs/releases/download/{testgen_lib_version}/{file_name}{suffix}" ); - println!("Looking for {}", file_name); + println!("Looking for {file_name}"); // Use the project’s target directory instead of a system cache location. let cargo_manifest_dir = @@ -112,16 +108,16 @@ mod testgen_hs { create_dir_all(&download_dir).expect("Unable to create testgen directory"); let archive_name = if target_os == "windows" { - format!("{}.zip", file_name) + format!("{file_name}.zip") } else { - format!("{}.tar.bz2", file_name) + format!("{file_name}.tar.bz2") }; let archive_path = download_dir.join(&archive_name); // Download the artifact if not already in the target directory. if !archive_path.exists() { - println!("Downloading from: {}", download_url); + println!("Downloading from: {download_url}"); let response = reqwest::blocking::get(&download_url) .expect("Failed to download archive") @@ -165,7 +161,7 @@ mod testgen_hs { // Verify version by running --version. println!("Verifying testgen-hs version..."); - println!("Executing: {:?}", executable); + println!("Executing: {executable:?}"); let output = Command::new(&executable) .arg("--version") @@ -182,7 +178,7 @@ mod testgen_hs { let version_output = String::from_utf8_lossy(&output.stdout); println!("testgen-hs version: {}", version_output.trim()); - let testgen_lib_version = format!("testgen-hs {}", testgen_lib_version); + let testgen_lib_version = format!("testgen-hs {testgen_lib_version}"); if version_output.trim() != testgen_lib_version { panic!( @@ -240,14 +236,10 @@ mod features { println!("cargo::rustc-check-cfg=cfg(evaluate)"); if target_os == "windows" { - println!( - "cargo:warning=Skipping 'evaluate' cfg for {}-{}", - target_os, target_arch - ); + println!("cargo:warning=Skipping 'evaluate' cfg for {target_os}-{target_arch}"); } else { println!( - "cargo:warning=Going to build with 'evaluate' cfg for {}-{}", - target_os, target_arch + "cargo:warning=Going to build with 'evaluate' cfg for {target_os}-{target_arch}" ); println!("cargo:rustc-cfg=evaluate"); } From 079683f41546de32a9a48bbdae5a653b86690809 Mon Sep 17 00:00:00 2001 From: Michal Rus Date: Mon, 30 Jun 2025 15:24:46 +0200 Subject: [PATCH 4/9] fix: `devshell` on `aarch64-linux` --- nix/internal/unix.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nix/internal/unix.nix b/nix/internal/unix.nix index c13bfe32..0d4c23b3 100644 --- a/nix/internal/unix.nix +++ b/nix/internal/unix.nix @@ -166,14 +166,14 @@ in in (import inputs.flake-compat { src = - if targetSystem != "aarch64-darwin" + if targetSystem != "aarch64-darwin" && targetSystem != "aarch64-linux" then unpatched else { outPath = toString (pkgs.runCommand "source" {} '' cp -r ${unpatched} $out chmod -R +w $out cd $out - echo ${lib.escapeShellArg (builtins.toJSON [targetSystem])} $out/nix/supported-systems.nix + echo ${lib.escapeShellArg (builtins.toJSON [targetSystem])} >$out/nix/supported-systems.nix ''); inherit (unpatched) rev shortRev lastModified lastModifiedDate; }; @@ -183,7 +183,7 @@ in cardano-node-packages = { x86_64-linux = cardano-node-flake.hydraJobs.x86_64-linux.musl; - inherit (cardano-node-flake.packages) x86_64-darwin aarch64-darwin; + inherit (cardano-node-flake.packages) x86_64-darwin aarch64-darwin aarch64-linux; } .${targetSystem}; From 65d0f786c72acff4542ebc4c33c5a986b46041c8 Mon Sep 17 00:00:00 2001 From: Michal Rus Date: Mon, 30 Jun 2025 15:58:55 +0200 Subject: [PATCH 5/9] =?UTF-8?q?fix:=20don=E2=80=99t=20use=20`musl`=20on=20?= =?UTF-8?q?`aarch64-linux`=20=E2=80=93=20back=20to=20GNU?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../testgen-hs--enable-aarch64-linux.diff | 22 ++---- nix/internal/unix.nix | 72 +++++++++++-------- 2 files changed, 46 insertions(+), 48 deletions(-) diff --git a/nix/internal/testgen-hs--enable-aarch64-linux.diff b/nix/internal/testgen-hs--enable-aarch64-linux.diff index 814f2207..257c0adc 100644 --- a/nix/internal/testgen-hs--enable-aarch64-linux.diff +++ b/nix/internal/testgen-hs--enable-aarch64-linux.diff @@ -60,7 +60,7 @@ index 72d2f8f..b192741 100644 config, system, diff --git a/nix/internal.nix b/nix/internal.nix -index 51248ac..09382ab 100644 +index 51248ac..7eb910e 100644 --- a/nix/internal.nix +++ b/nix/internal.nix @@ -13,11 +13,29 @@ assert __elem targetSystem ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86 @@ -90,19 +90,11 @@ index 51248ac..09382ab 100644 cardano-node-packages = { x86_64-linux = cardano-node-flake.hydraJobs.x86_64-linux.musl; -+ aarch64-linux = cardano-node-flake.hydraJobs.aarch64-linux.musl; ++ aarch64-linux = cardano-node-flake.packages.aarch64-linux; x86_64-darwin = cardano-node-flake.packages.x86_64-darwin; aarch64-darwin = cardano-node-flake.packages.aarch64-darwin; } -@@ -25,7 +43,6 @@ in rec { - - inherit (cardano-node-packages) cardano-node cardano-cli; - -- testgen-hs = let - patched-flake = let - unpatched = inputs.cardano-node; - in -@@ -35,7 +52,7 @@ in rec { +@@ -35,7 +53,7 @@ in rec { cp -r ${unpatched} $out chmod -R +w $out cd $out @@ -111,15 +103,11 @@ index 51248ac..09382ab 100644 cp -r ${../testgen-hs} ./testgen-hs sed -r '/^packages:/ a\ testgen-hs' -i cabal.project sed -r 's/other-modules:\s*/ , /g' -i cardano-submit-api/cardano-submit-api.cabal -@@ -48,9 +65,11 @@ in rec { - }; - }) - .defaultNix; -+ testgen-hs = let +@@ -51,6 +69,7 @@ in rec { in { x86_64-linux = patched-flake.hydraJobs.x86_64-linux.musl.testgen-hs; -+ aarch64-linux = patched-flake.project.aarch64-linux.projectCross.aarch64-multiplatform-musl.packages.testgen-hs.components.exes.testgen-hs; ++ aarch64-linux = patched-flake.packages.aarch64-linux.testgen-hs; x86_64-darwin = patched-flake.packages.x86_64-darwin.testgen-hs; aarch64-darwin = patched-flake.packages.aarch64-darwin.testgen-hs; x86_64-windows = patched-flake.legacyPackages.x86_64-linux.hydraJobs.windows.testgen-hs; diff --git a/nix/internal/unix.nix b/nix/internal/unix.nix index 0d4c23b3..60715e5d 100644 --- a/nix/internal/unix.nix +++ b/nix/internal/unix.nix @@ -254,37 +254,47 @@ in # For generating a signing key from a recovery phrase. It’s a little # controversial to download a binary, but we only need it for the devshell. If # needed, we can use the source instead. - cardano-address = let - release = "v2024-09-29"; - baseUrl = "https://github.com/cardano-foundation/cardano-wallet/releases/download/${release}/cardano-wallet"; - archive = pkgs.fetchzip { - name = "cardano-wallet-${release}"; - url = - { - "x86_64-linux" = "${baseUrl}-${release}-linux64.tar.gz"; - "x86_64-darwin" = "${baseUrl}-${release}-macos-intel.tar.gz"; - "aarch64-darwin" = "${baseUrl}-${release}-macos-silicon.tar.gz"; - } - .${targetSystem}; - hash = - { - "x86_64-linux" = "sha256-EOe6ooqvSGylJMJnWbqDrUIVYzwTCw5Up/vU/gPK6tE="; - "x86_64-darwin" = "sha256-POUj3Loo8o7lBI4CniaA/Z9mTRAmWv9VWAdtcIMe27I="; - "aarch64-darwin" = "sha256-+6bzdUXnJ+nnYdZuhLueT0+bYmXzwDXTe9JqWrWnfe4="; - } - .${targetSystem}; - }; - in - pkgs.runCommandNoCC "cardano-address" { - meta.description = "Command-line for address and key manipulation in Cardano"; - } '' - mkdir -p $out/bin $out/libexec - cp ${archive}/cardano-address $out/libexec/ - ${lib.optionalString pkgs.stdenv.isDarwin '' - cp ${archive}/{libz,libiconv.2,libgmp.10,libffi.8}.dylib $out/libexec - ''} - ln -sf $out/libexec/cardano-address $out/bin/ - ''; + cardano-address = + if targetSystem == "aarch64-linux" + then + pkgs.writeShellApplication { + name = "cardano-address"; + text = '' + echo >&2 "TODO: unimplemented: compile \`cardano-address\` for \`${targetSystem}\`!" + exit 1 + ''; + } + else let + release = "v2024-09-29"; + baseUrl = "https://github.com/cardano-foundation/cardano-wallet/releases/download/${release}/cardano-wallet"; + archive = pkgs.fetchzip { + name = "cardano-wallet-${release}"; + url = + { + "x86_64-linux" = "${baseUrl}-${release}-linux64.tar.gz"; + "x86_64-darwin" = "${baseUrl}-${release}-macos-intel.tar.gz"; + "aarch64-darwin" = "${baseUrl}-${release}-macos-silicon.tar.gz"; + } + .${targetSystem}; + hash = + { + "x86_64-linux" = "sha256-EOe6ooqvSGylJMJnWbqDrUIVYzwTCw5Up/vU/gPK6tE="; + "x86_64-darwin" = "sha256-POUj3Loo8o7lBI4CniaA/Z9mTRAmWv9VWAdtcIMe27I="; + "aarch64-darwin" = "sha256-+6bzdUXnJ+nnYdZuhLueT0+bYmXzwDXTe9JqWrWnfe4="; + } + .${targetSystem}; + }; + in + pkgs.runCommandNoCC "cardano-address" { + meta.description = "Command-line for address and key manipulation in Cardano"; + } '' + mkdir -p $out/bin $out/libexec + cp ${archive}/cardano-address $out/libexec/ + ${lib.optionalString pkgs.stdenv.isDarwin '' + cp ${archive}/{libz,libiconv.2,libgmp.10,libffi.8}.dylib $out/libexec + ''} + ln -sf $out/libexec/cardano-address $out/bin/ + ''; tx-build = pkgs.writeShellApplication { name = "tx-build"; From 46dc3414cce4fcd2505e65a146124f38651cb860 Mon Sep 17 00:00:00 2001 From: Michal Rus Date: Mon, 30 Jun 2025 16:50:57 +0200 Subject: [PATCH 6/9] fix: drop `-fexternal-interpreter` for `plutus-core` --- .../testgen-hs--enable-aarch64-linux.diff | 16 +++++++++++----- nix/internal/unix.nix | 3 +++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/nix/internal/testgen-hs--enable-aarch64-linux.diff b/nix/internal/testgen-hs--enable-aarch64-linux.diff index 257c0adc..9ad78090 100644 --- a/nix/internal/testgen-hs--enable-aarch64-linux.diff +++ b/nix/internal/testgen-hs--enable-aarch64-linux.diff @@ -60,10 +60,10 @@ index 72d2f8f..b192741 100644 config, system, diff --git a/nix/internal.nix b/nix/internal.nix -index 51248ac..7eb910e 100644 +index 51248ac..61a7c70 100644 --- a/nix/internal.nix +++ b/nix/internal.nix -@@ -13,11 +13,29 @@ assert __elem targetSystem ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86 +@@ -13,11 +13,32 @@ assert __elem targetSystem ["x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86 in rec { defaultPackage = testgen-hs; @@ -81,6 +81,9 @@ index 51248ac..7eb910e 100644 + chmod -R +w $out + cd $out + echo ${lib.escapeShellArg (builtins.toJSON [targetSystem])} $out/nix/supported-systems.nix ++ ${lib.optionalString (targetSystem == "aarch64-linux") '' ++ sed -r 's/"-fexternal-interpreter"//g' -i $out/nix/haskell.nix ++ ''} + ''); + inherit (unpatched) rev shortRev lastModified lastModifiedDate; + }; @@ -94,16 +97,19 @@ index 51248ac..7eb910e 100644 x86_64-darwin = cardano-node-flake.packages.x86_64-darwin; aarch64-darwin = cardano-node-flake.packages.aarch64-darwin; } -@@ -35,7 +53,7 @@ in rec { +@@ -35,7 +56,10 @@ in rec { cp -r ${unpatched} $out chmod -R +w $out cd $out - echo ${lib.escapeShellArg (builtins.toJSON [targetSystem])} $out/nix/supported-systems.nix + echo ${lib.escapeShellArg (builtins.toJSON [targetSystem])} >$out/nix/supported-systems.nix ++ ${lib.optionalString (targetSystem == "aarch64-linux") '' ++ sed -r 's/"-fexternal-interpreter"//g' -i $out/nix/haskell.nix ++ ''} cp -r ${../testgen-hs} ./testgen-hs sed -r '/^packages:/ a\ testgen-hs' -i cabal.project sed -r 's/other-modules:\s*/ , /g' -i cardano-submit-api/cardano-submit-api.cabal -@@ -51,6 +69,7 @@ in rec { +@@ -51,6 +75,7 @@ in rec { in { x86_64-linux = patched-flake.hydraJobs.x86_64-linux.musl.testgen-hs; @@ -111,7 +117,7 @@ index 51248ac..7eb910e 100644 x86_64-darwin = patched-flake.packages.x86_64-darwin.testgen-hs; aarch64-darwin = patched-flake.packages.aarch64-darwin.testgen-hs; x86_64-windows = patched-flake.legacyPackages.x86_64-linux.hydraJobs.windows.testgen-hs; -@@ -113,6 +132,7 @@ in rec { +@@ -113,6 +138,7 @@ in rec { aarch64-darwin = darwinLike; x86_64-darwin = darwinLike; x86_64-linux = linuxLike {}; diff --git a/nix/internal/unix.nix b/nix/internal/unix.nix index 60715e5d..41304937 100644 --- a/nix/internal/unix.nix +++ b/nix/internal/unix.nix @@ -174,6 +174,9 @@ in chmod -R +w $out cd $out echo ${lib.escapeShellArg (builtins.toJSON [targetSystem])} >$out/nix/supported-systems.nix + ${lib.optionalString (targetSystem == "aarch64-linux") '' + sed -r 's/"-fexternal-interpreter"//g' -i $out/nix/haskell.nix + ''} ''); inherit (unpatched) rev shortRev lastModified lastModifiedDate; }; From bf6469ea22285326d4b6d70ab2567f29a397c24e Mon Sep 17 00:00:00 2001 From: Michal Rus Date: Mon, 30 Jun 2025 16:54:17 +0200 Subject: [PATCH 7/9] chore: update `nixpkgs` for the new Rust and Clippy --- flake.lock | 50 ++++++++++++++++++++--------------------- flake.nix | 2 +- nix/devshells.nix | 12 +++------- nix/internal/darwin.nix | 23 +++++++++---------- nix/internal/unix.nix | 12 +++++++--- 5 files changed, 49 insertions(+), 50 deletions(-) diff --git a/flake.lock b/flake.lock index 587928ab..cbd3041f 100644 --- a/flake.lock +++ b/flake.lock @@ -3,11 +3,11 @@ "advisory-db": { "flake": false, "locked": { - "lastModified": 1748950236, - "narHash": "sha256-kNiGMrXi5Bq/aWoQmnpK0v+ufQA4FOInhbkY56iUndc=", + "lastModified": 1750151065, + "narHash": "sha256-il+CAqChFIB82xP6bO43dWlUVs+NlG7a4g8liIP5HcI=", "owner": "rustsec", "repo": "advisory-db", - "rev": "a1f651cba8bf224f52c5d55d8182b3bb0ebce49e", + "rev": "7573f55ba337263f61167dbb0ea926cdc7c8eb5d", "type": "github" }, "original": { @@ -52,11 +52,11 @@ }, "crane": { "locked": { - "lastModified": 1743908961, - "narHash": "sha256-e1idZdpnnHWuosI3KsBgAgrhMR05T2oqskXCmNzGPq0=", + "lastModified": 1750266157, + "narHash": "sha256-tL42YoNg9y30u7zAqtoGDNdTyXTi8EALDeCB13FtbQA=", "owner": "ipetkov", "repo": "crane", - "rev": "80ceeec0dc94ef967c371dcdc56adb280328f591", + "rev": "e37c943371b73ed87faf33f7583860f81f1d5a48", "type": "github" }, "original": { @@ -93,11 +93,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1742452566, - "narHash": "sha256-sVuLDQ2UIWfXUBbctzrZrXM2X05YjX08K7XHMztt36E=", + "lastModified": 1751265761, + "narHash": "sha256-VSbk7ppgFSqBxlsWtzIO52iT9TKkLJrmVYOIhQi13Kg=", "owner": "nix-community", "repo": "fenix", - "rev": "7d9ba794daf5e8cc7ee728859bc688d8e26d5f06", + "rev": "19c910fe3de1768e64e76b5ee6daa346e6b07410", "type": "github" }, "original": { @@ -127,11 +127,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1743550720, - "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", + "lastModified": 1749398372, + "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "c621e8422220273271f52058f618c94e405bb0f5", + "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", "type": "github" }, "original": { @@ -158,27 +158,27 @@ }, "nixpkgs": { "locked": { - "lastModified": 1743975612, - "narHash": "sha256-o4FjFOUmjSRMK7dn0TFdAT0RRWUWD+WsspPHa+qEQT8=", + "lastModified": 1751211869, + "narHash": "sha256-1Cu92i1KSPbhPCKxoiVG5qnoRiKTgR5CcGSRyLpOd7Y=", "owner": "nixos", "repo": "nixpkgs", - "rev": "a880f49904d68b5e53338d1e8c7bf80f59903928", + "rev": "b43c397f6c213918d6cfe6e3550abfe79b5d1c51", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } }, "nixpkgs-lib": { "locked": { - "lastModified": 1743296961, - "narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=", + "lastModified": 1748740939, + "narHash": "sha256-rQaysilft1aVMwF14xIdGS3sj1yHlI6oKQNBRTF40cc=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa", + "rev": "656a64127e9d791a334452c6b6606d17539476e2", "type": "github" }, "original": { @@ -224,11 +224,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1742296961, - "narHash": "sha256-gCpvEQOrugHWLimD1wTFOJHagnSEP6VYBDspq96Idu0=", + "lastModified": 1751210071, + "narHash": "sha256-v7XmmLBNRMzRXiVCeH60ZeGEqo+aagmwawI0Z9+EoXY=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "15d87419f1a123d8f888d608129c3ce3ff8f13d4", + "rev": "6df12139bccaaeecf6a34789e0ca799d1fe99c53", "type": "github" }, "original": { @@ -262,11 +262,11 @@ ] }, "locked": { - "lastModified": 1743748085, - "narHash": "sha256-uhjnlaVTWo5iD3LXics1rp9gaKgDRQj6660+gbUU3cE=", + "lastModified": 1750931469, + "narHash": "sha256-0IEdQB1nS+uViQw4k3VGUXntjkDp7aAlqcxdewb/hAc=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "815e4121d6a5d504c0f96e5be2dd7f871e4fd99d", + "rev": "ac8e6f32e11e9c7f153823abc3ab007f2a65d3e1", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 6484277f..d1e30082 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,6 @@ { inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; flake-parts.url = "github:hercules-ci/flake-parts"; treefmt-nix.url = "github:numtide/treefmt-nix"; treefmt-nix.inputs.nixpkgs.follows = "nixpkgs"; diff --git a/nix/devshells.nix b/nix/devshells.nix index e5e31cec..a218c2bb 100644 --- a/nix/devshells.nix +++ b/nix/devshells.nix @@ -10,7 +10,6 @@ in { imports = [ "${inputs.devshell}/extra/language/c.nix" - "${inputs.devshell}/extra/language/rust.nix" ]; commands = [ @@ -31,10 +30,11 @@ in { name = "cardano-address"; package = internal.cardano-address; } - {package = config.language.rust.packageSet.cargo;} {package = pkgs.cargo-nextest;} {package = pkgs.cargo-tarpaulin;} - {package = config.language.rust.packageSet.rust-analyzer;} + {package = internal.rustPackages.cargo;} + {package = internal.rustPackages.clippy;} + {package = internal.rustPackages.rust-analyzer;} { category = "handy"; package = internal.runNode "preview"; @@ -66,12 +66,6 @@ in { includes = internal.commonArgs.buildInputs; }; - language.rust.packageSet = - internal.rustPackages - // { - clippy = internal.rustPackages.clippy-unwrapped; - }; - env = [ { diff --git a/nix/internal/darwin.nix b/nix/internal/darwin.nix index c85fbc62..304efa37 100644 --- a/nix/internal/darwin.nix +++ b/nix/internal/darwin.nix @@ -40,19 +40,18 @@ in }; # Portable directory that can be run on any modern Darwin: - bundle = - (nix-bundle-exe-lib-subdir "${unix.package}/libexec/${unix.packageName}") + bundle = (nix-bundle-exe-lib-subdir "${unix.package}/libexec/${unix.packageName}") .overrideAttrs (drv: { - name = unix.packageName; - buildCommand = - drv.buildCommand - + '' - mkdir -p $out/libexec - mv $out/{${unix.packageName},lib} $out/libexec - mkdir -p $out/bin - ( cd $out/bin ; ln -s ../libexec/${unix.packageName} ./ ; ) - ''; - }); + name = unix.packageName; + buildCommand = + drv.buildCommand + + '' + mkdir -p $out/libexec + mv $out/{${unix.packageName},lib} $out/libexec + mkdir -p $out/bin + ( cd $out/bin ; ln -s ../libexec/${unix.packageName} ./ ; ) + ''; + }); bundle-testgen-hs = nix-bundle-exe-lib-subdir (lib.getExe unix.testgen-hs); diff --git a/nix/internal/unix.nix b/nix/internal/unix.nix index 41304937..1add453c 100644 --- a/nix/internal/unix.nix +++ b/nix/internal/unix.nix @@ -188,7 +188,9 @@ in x86_64-linux = cardano-node-flake.hydraJobs.x86_64-linux.musl; inherit (cardano-node-flake.packages) x86_64-darwin aarch64-darwin aarch64-linux; } - .${targetSystem}; + .${ + targetSystem + }; inherit (cardano-node-packages) cardano-node cardano-cli cardano-submit-api; @@ -278,14 +280,18 @@ in "x86_64-darwin" = "${baseUrl}-${release}-macos-intel.tar.gz"; "aarch64-darwin" = "${baseUrl}-${release}-macos-silicon.tar.gz"; } - .${targetSystem}; + .${ + targetSystem + }; hash = { "x86_64-linux" = "sha256-EOe6ooqvSGylJMJnWbqDrUIVYzwTCw5Up/vU/gPK6tE="; "x86_64-darwin" = "sha256-POUj3Loo8o7lBI4CniaA/Z9mTRAmWv9VWAdtcIMe27I="; "aarch64-darwin" = "sha256-+6bzdUXnJ+nnYdZuhLueT0+bYmXzwDXTe9JqWrWnfe4="; } - .${targetSystem}; + .${ + targetSystem + }; }; in pkgs.runCommandNoCC "cardano-address" { From 52cd86c78965b575abc4cb84667a37d88e5f4cea Mon Sep 17 00:00:00 2001 From: Michal Rus Date: Mon, 30 Jun 2025 16:58:35 +0200 Subject: [PATCH 8/9] =?UTF-8?q?chore:=20apply=20Clippy=E2=80=99s=20correct?= =?UTF-8?q?ions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets.rs | 3 +-- src/cbor/fallback_decoder.rs | 17 ++++++++--------- src/cbor/tests.rs | 11 +++++------ src/cli.rs | 4 ++-- src/common.rs | 2 +- src/config.rs | 3 +-- src/errors.rs | 16 ++++++++-------- src/icebreakers_api.rs | 8 ++++---- src/load_balancer.rs | 26 +++++++++----------------- src/middlewares/errors.rs | 17 ++++++++--------- src/node/pool.rs | 2 +- src/node/sync_progress.rs | 9 +++------ src/payment_cred.rs | 12 ++++-------- src/server/state.rs | 2 +- 14 files changed, 56 insertions(+), 76 deletions(-) diff --git a/src/assets.rs b/src/assets.rs index ba453976..64f63e4a 100644 --- a/src/assets.rs +++ b/src/assets.rs @@ -44,8 +44,7 @@ pub fn validate_asset_name(asset_name: &str) -> bool { pub fn parse_asset(hex: &str) -> Result { if hex.len() < POLICY_ID_SIZE { return Err(BlockfrostError::internal_server_error(format!( - "Asset name is too short: {}", - hex, + "Asset name is too short: {hex}", ))); } diff --git a/src/cbor/fallback_decoder.rs b/src/cbor/fallback_decoder.rs index cf57d569..a9526127 100644 --- a/src/cbor/fallback_decoder.rs +++ b/src/cbor/fallback_decoder.rs @@ -73,7 +73,7 @@ impl FallbackDecoder { response_tx, }) .await - .map_err(|err| format!("FallbackDecoder: failed to send request: {:?}", err))?; + .map_err(|err| format!("FallbackDecoder: failed to send request: {err:?}"))?; response_rx.await.unwrap_or_else(|err| { unreachable!( @@ -168,8 +168,7 @@ impl FallbackDecoder { Ok(()) } else { Err(format!( - "FallbackDecoder: startup_sanity_test failed: {:?}", - result + "FallbackDecoder: startup_sanity_test failed: {result:?}" )) } } @@ -199,7 +198,7 @@ impl FallbackDecoder { .stdin(proc::Stdio::piped()) .stdout(proc::Stdio::piped()) .spawn() - .map_err(|err| format!("couldn’t start the child: {:?}", err))?; + .map_err(|err| format!("couldn’t start the child: {err:?}"))?; current_child_pid.store(child.id(), atomic::Ordering::Relaxed); @@ -209,10 +208,10 @@ impl FallbackDecoder { // Will return Ok(()) if already dead. child .kill() - .map_err(|err| format!("couldn’t kill the child: {:?}", err))?; + .map_err(|err| format!("couldn’t kill the child: {err:?}"))?; child .wait() - .map_err(|err| format!("couldn’t reap the child: {:?}", err))?; + .map_err(|err| format!("couldn’t reap the child: {err:?}"))?; result } @@ -242,12 +241,12 @@ impl FallbackDecoder { *last_unfulfilled_request = Some(request); let mut ask_and_receive = || -> Result, String> { - writeln!(stdin, "{}", cbor_hex) - .map_err(|err| format!("couldn’t write to stdin: {:?}", err))?; + writeln!(stdin, "{cbor_hex}") + .map_err(|err| format!("couldn’t write to stdin: {err:?}"))?; match stdout_lines.next() { Some(Ok(line)) => Ok(Self::parse_json(&line)), - Some(Err(e)) => Err(format!("failed to read from subprocess: {}", e)), + Some(Err(e)) => Err(format!("failed to read from subprocess: {e}")), None => Err("no output from subprocess".to_string()), } }; diff --git a/src/cbor/tests.rs b/src/cbor/tests.rs index f214fe8a..f0f28d10 100644 --- a/src/cbor/tests.rs +++ b/src/cbor/tests.rs @@ -65,7 +65,7 @@ pub fn check_generated_cases( .args(["--number", &num_cases.to_string()]) .args(["--generator-size", &generator_size.to_string()]) .args(seed.map_or(vec![], |seed| vec!["--seed".to_string(), seed.to_string()])) - .arg(format!("{:?}", case_type)) + .arg(format!("{case_type:?}")) .stdout(std::process::Stdio::piped()) .spawn() .expect("failed to spawn child"); @@ -101,7 +101,7 @@ pub fn check_generated_cases( Ok(a) => a, Err(_) => Err("panic! (see above for details)".to_string()), }, - Err(e) => Err(format!("CborTestCase JSON parse error: {}", e)), + Err(e) => Err(format!("CborTestCase JSON parse error: {e}")), }; let _ = result_tx.send(outcome); } @@ -149,18 +149,17 @@ pub fn check_generated_cases( if num_failed <= show_n_failures { "".to_string() } else { - format!(" (first {})", show_n_failures) + format!(" (first {show_n_failures})") } )); for case in first_n_failures { - details.push_str(&format!("\n- {}", case)); + details.push_str(&format!("\n- {case}")); } } panic!( - "For size {}: {} out of {} ({:.2}%) failed. Seed: {}.{}", - generator_size, num_failed, num_total, percent, random_seed, details + "For size {generator_size}: {num_failed} out of {num_total} ({percent:.2}%) failed. Seed: {random_seed}.{details}" ) } }); diff --git a/src/cli.rs b/src/cli.rs index 2af78682..c64de97d 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -135,7 +135,7 @@ impl Args { message, enum_values .iter() - .map(|it| format!("{:?}", it)) + .map(|it| format!("{it:?}")) .collect::>(), ) .with_starting_cursor(starting_cursor) @@ -260,7 +260,7 @@ impl Args { } app_config.to_file(&config_path)?; - println!("\nConfig has been written to {:?}", config_path); + println!("\nConfig has been written to {config_path:?}"); std::process::exit(0); } diff --git a/src/common.rs b/src/common.rs index ac287644..bbcb854a 100644 --- a/src/common.rs +++ b/src/common.rs @@ -22,7 +22,7 @@ pub fn validate_content_type( let error_message = if allowed_content_types.len() == 1 { format!("Content-Type must be: {:?}", allowed_content_types[0]) } else { - format!("Content-Type must be one of: {:?}", allowed_content_types) + format!("Content-Type must be one of: {allowed_content_types:?}") }; return Err(BlockfrostError::custom_400(error_message)); diff --git a/src/config.rs b/src/config.rs index 22b43872..22da1f0e 100644 --- a/src/config.rs +++ b/src/config.rs @@ -185,7 +185,6 @@ async fn detect_network(socket_path: &str) -> Result { } Err(AppError::Server(format!( - "Could not detect network from '{}' is the node running?", - socket_path + "Could not detect network from '{socket_path}' is the node running?" ))) } diff --git a/src/errors.rs b/src/errors.rs index d2a46762..67f58846 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -39,13 +39,13 @@ pub struct BlockfrostError { impl From for BlockfrostError { fn from(err: std::num::TryFromIntError) -> Self { - Self::internal_server_error(format!("ConversionError: {}", err)) + Self::internal_server_error(format!("ConversionError: {err}")) } } impl From for BlockfrostError { fn from(err: serde_json::Error) -> Self { - Self::internal_server_error(format!("SerdeError: {}", err)) + Self::internal_server_error(format!("SerdeError: {err}")) } } @@ -75,25 +75,25 @@ impl From for AppError { impl From for BlockfrostError { fn from(err: pallas_network::miniprotocols::txsubmission::Error) -> Self { - BlockfrostError::internal_server_error(format!("TxSubmissionError: {}", err)) + BlockfrostError::internal_server_error(format!("TxSubmissionError: {err}")) } } impl From for BlockfrostError { fn from(err: pallas_network::miniprotocols::handshake::Error) -> Self { - BlockfrostError::internal_server_error(format!("CardanoNodeHandshakeError: {}", err)) + BlockfrostError::internal_server_error(format!("CardanoNodeHandshakeError: {err}")) } } impl From for BlockfrostError { fn from(err: pallas_network::miniprotocols::localstate::ClientError) -> Self { - BlockfrostError::internal_server_error(format!("localstate::ClientError: {}", err)) + BlockfrostError::internal_server_error(format!("localstate::ClientError: {err}")) } } impl From for BlockfrostError { fn from(err: TryFromSliceError) -> Self { - BlockfrostError::internal_server_error(format!("Hash conversion failed: {}", err)) + BlockfrostError::internal_server_error(format!("Hash conversion failed: {err}")) } } @@ -105,13 +105,13 @@ impl From for AppError { impl From for BlockfrostError { fn from(err: reqwest::header::InvalidHeaderValue) -> Self { - BlockfrostError::internal_server_error(format!("Invalid header value: {}", err)) + BlockfrostError::internal_server_error(format!("Invalid header value: {err}")) } } impl From for BlockfrostError { fn from(err: TxSubmissionError) -> Self { - BlockfrostError::internal_server_error(format!("Transaction submission error: {}", err)) + BlockfrostError::internal_server_error(format!("Transaction submission error: {err}")) } } diff --git a/src/icebreakers_api.rs b/src/icebreakers_api.rs index 4036a548..f21dc3c1 100644 --- a/src/icebreakers_api.rs +++ b/src/icebreakers_api.rs @@ -60,7 +60,7 @@ impl IcebreakersAPI { let client = Client::builder() .local_address(config.server_address) .build() - .map_err(|e| AppError::Registration(format!("Registering failed: {}", e)))?; + .map_err(|e| AppError::Registration(format!("Registering failed: {e}")))?; let base_url = api_url.to_string(); let icebreakers_api = IcebreakersAPI { client, @@ -114,11 +114,11 @@ impl IcebreakersAPI { .json(&body) .send() .await - .map_err(|e| AppError::Registration(format!("Registering failed: {}", e)))?; + .map_err(|e| AppError::Registration(format!("Registering failed: {e}")))?; if response.status().is_success() { let success_response = response.json::().await.map_err(|e| { - AppError::Registration(format!("Failed to parse success response: {}", e)) + AppError::Registration(format!("Failed to parse success response: {e}")) })?; info!("Successfully registered with Icebreakers API."); @@ -159,7 +159,7 @@ impl IcebreakersAPI { Ok(success_response) } else { let error_response = response.json::().await.map_err(|e| { - AppError::Registration(format!("Failed to parse error response: {}", e)) + AppError::Registration(format!("Failed to parse error response: {e}")) })?; Err(AppError::Registration(format!( diff --git a/src/load_balancer.rs b/src/load_balancer.rs index a98c080d..5fa06871 100644 --- a/src/load_balancer.rs +++ b/src/load_balancer.rs @@ -53,15 +53,14 @@ pub async fn run_all( let (first_res, first_idx, remaining) = futures::future::select_all(connections).await; let maybe_error = match first_res { - Err(panic) => format!(" with a panic: {:?}", panic), - Ok(Err(err)) => format!(" with an error: {}", err), + Err(panic) => format!(" with a panic: {panic:?}"), + Ok(Err(err)) => format!(" with an error: {err}"), Ok(Ok(())) => "".to_string(), }; *health_errors.lock().await = vec![ AppError::LoadBalancer(format!( - "Load balancer connection ended unexpectedly{}", - maybe_error + "Load balancer connection ended unexpectedly{maybe_error}" )) .into(), ]; @@ -323,8 +322,7 @@ mod event_loop { // This branch is practically impossible, but for the sake of completeness: // Let’s break 'event_loop, this seems the most elegant. let err = format!( - "error when serializing request to JSON (this will never happen): {:?}", - err + "error when serializing request to JSON (this will never happen): {err:?}" ); error!("load balancer: {}: {}", config.uri, err); Err(err) @@ -352,7 +350,7 @@ mod event_loop { }, Some(Err(err)) => { let _ignored_failure: Result<_, _> = event_tx - .send(LBEvent::SocketError(format!("stream error: {:?}", err))) + .send(LBEvent::SocketError(format!("stream error: {err:?}"))) .await; break 'read_loop; }, @@ -421,10 +419,7 @@ mod event_loop { .map_err(|_elapsed| { ( StatusCode::GATEWAY_TIMEOUT, - format!( - "Timed out while waiting {:?} for a response", - REQUEST_TIMEOUT - ), + format!("Timed out while waiting {REQUEST_TIMEOUT:?} for a response"), ) })? .unwrap(); // unwrap is safe, because the error is a non-instantiable [`std::convert::Infallible`] @@ -467,7 +462,7 @@ fn json_to_request( .map_err(|err| { ( StatusCode::BAD_REQUEST, - format!("Invalid base64 encoding of body_base64: {}", err), + format!("Invalid base64 encoding of body_base64: {err}"), ) })?; Body::from(body_bytes) @@ -485,10 +480,7 @@ fn json_to_request( rv.body(body).map_err(|err| { ( StatusCode::BAD_REQUEST, - format!( - "Error when constructing a request from JSON request: {}", - err - ), + format!("Error when constructing a request from JSON request: {err}"), ) }) } @@ -519,7 +511,7 @@ async fn response_to_json( .map_err(|err| { ( StatusCode::BAD_GATEWAY, - format!("Cannot read body of the response: {}", err), + format!("Cannot read body of the response: {err}"), ) })?; use base64::{Engine as _, engine::general_purpose}; diff --git a/src/middlewares/errors.rs b/src/middlewares/errors.rs index 2cae704c..44f0a00c 100644 --- a/src/middlewares/errors.rs +++ b/src/middlewares/errors.rs @@ -63,18 +63,18 @@ async fn parse_and_log_error(bytes: Bytes, request_path: &str, status_code: Stat request_path, error_info.message ); - log_to_sentry("|", format!("{:?}", error_info), request_path, status_code) + log_to_sentry("|", format!("{error_info:?}"), request_path, status_code) }, Err(e) => { - println!("Failed to parse body as JSON: {:?}", e); + println!("Failed to parse body as JSON: {e:?}"); log_to_sentry( "JSON Parse Error", - format!("{:?}", e), + format!("{e:?}"), request_path, status_code, ); let body_str = String::from_utf8_lossy(&bytes); - println!("Raw Body: {}", body_str); + println!("Raw Body: {body_str}"); }, } } @@ -95,14 +95,13 @@ fn log_and_capture_error( let exception = Exception { ty: "ServerError".to_string(), - value: Some(format!("{:?}", error)), + value: Some(format!("{error:?}")), ..Default::default() }; let event = Event { message: Some(format!( - "{}: Path: {}, Status: {}", - message, request_path, status_code + "{message}: Path: {request_path}, Status: {status_code}" )), level: Level::Error, exception: vec![exception].into(), @@ -114,7 +113,7 @@ fn log_and_capture_error( fn log_to_sentry(context: &str, detail: String, request_path: &str, status_code: StatusCode) { let breadcrumb = Breadcrumb { - message: Some(format!("Request at {}", request_path)), + message: Some(format!("Request at {request_path}")), category: Some("request".into()), level: Level::Info, ..Default::default() @@ -123,7 +122,7 @@ fn log_to_sentry(context: &str, detail: String, request_path: &str, status_code: sentry::add_breadcrumb(breadcrumb); let event = Event { - message: Some(format!("{} - {}: {}", status_code, context, detail)), + message: Some(format!("{status_code} - {context}: {detail}")), level: Level::Error, ..Default::default() }; diff --git a/src/node/pool.rs b/src/node/pool.rs index 657e6ffa..711cfe0e 100644 --- a/src/node/pool.rs +++ b/src/node/pool.rs @@ -37,6 +37,6 @@ impl NodePool { self.pool_manager .get() .await - .map_err(|err| AppError::Node(format!("NodeConnPool: {}", err))) + .map_err(|err| AppError::Node(format!("NodeConnPool: {err}"))) } } diff --git a/src/node/sync_progress.rs b/src/node/sync_progress.rs index b9223a6a..8d8b22be 100644 --- a/src/node/sync_progress.rs +++ b/src/node/sync_progress.rs @@ -30,8 +30,7 @@ impl NodeClient { ) .ok_or_else(|| { BlockfrostError::internal_server_error(format!( - "Only well-known networks are supported (unsupported network magic: {})", - network_magic + "Only well-known networks are supported (unsupported network magic: {network_magic})" )) })?; @@ -55,8 +54,7 @@ impl NodeClient { .try_into() .map_err(|e| { BlockfrostError::internal_server_error(format!( - "Failed to convert picoseconds: {}", - e + "Failed to convert picoseconds: {e}" )) })?; @@ -80,8 +78,7 @@ impl NodeClient { .try_into() .map_err(|e| { BlockfrostError::internal_server_error(format!( - "Failed to convert slot time: {}", - e + "Failed to convert slot time: {e}" )) })?; diff --git a/src/payment_cred.rs b/src/payment_cred.rs index cfe5e29b..1a0fac39 100644 --- a/src/payment_cred.rs +++ b/src/payment_cred.rs @@ -110,8 +110,7 @@ impl PaymentCred { Ok(bytes) => bytes.to_base32(), err => { return Err(BlockfrostError::internal_server_error(format!( - "get_bech32_from_payment_cred hex decode error: {:?}", - err + "get_bech32_from_payment_cred hex decode error: {err:?}" ))); }, }; @@ -121,8 +120,7 @@ impl PaymentCred { PaymentCredPrefix::Script => "script", err => { return Err(BlockfrostError::internal_server_error(format!( - "get_bech32_from_payment_cred hex decode error: {:?}", - err + "get_bech32_from_payment_cred hex decode error: {err:?}" ))); }, }; @@ -131,8 +129,7 @@ impl PaymentCred { Ok(address) => address, err => { return Err(BlockfrostError::internal_server_error(format!( - "get_bech32_from_payment_cred hex decode error: {:?}", - err + "get_bech32_from_payment_cred hex decode error: {err:?}" ))); }, }; @@ -140,8 +137,7 @@ impl PaymentCred { Ok(address) }, err => Err(BlockfrostError::internal_server_error(format!( - "get_bech32_from_payment_cred hex decode error: {:?}", - err + "get_bech32_from_payment_cred hex decode error: {err:?}" ))), } } diff --git a/src/server/state.rs b/src/server/state.rs index c188d883..be3942b1 100644 --- a/src/server/state.rs +++ b/src/server/state.rs @@ -18,7 +18,7 @@ pub struct ApiPrefix(pub Option); impl std::fmt::Display for ApiPrefix { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self.0 { - Some(u) => write!(f, "/{}", u), + Some(u) => write!(f, "/{u}"), None => write!(f, "/"), } } From 136faf888fb1b58561b21fb35f47d9c5ecca8a6f Mon Sep 17 00:00:00 2001 From: Michal Rus Date: Tue, 1 Jul 2025 10:04:41 +0200 Subject: [PATCH 9/9] fix: the DMGs --- nix/internal/darwin.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/internal/darwin.nix b/nix/internal/darwin.nix index 304efa37..59a3c48d 100644 --- a/nix/internal/darwin.nix +++ b/nix/internal/darwin.nix @@ -426,7 +426,7 @@ in }; buildInputs = with pkgs; [apple-sdk_11 (darwinMinVersionHook "11.0") darwin.libffi]; hardeningDisable = ["strictoverflow"]; # -fno-strict-overflow is not supported in clang on darwin - NIX_CFLAGS_COMPILE = ["-Wno-error=deprecated-declarations" "-Wno-error=cast-of-sel-type"]; + NIX_CFLAGS_COMPILE = ["-Wno-error=deprecated-declarations" "-Wno-error=cast-of-sel-type" "-Wno-error=cast-function-type-mismatch"]; preBuild = commonPreBuild + ''