about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDoron Behar <doron.behar@gmail.com>2023-08-31 14:08:08 +0000
committerGitHub <noreply@github.com>2023-08-31 14:08:08 +0000
commitf8c26c97e9f31a94e75f94c79e3574035cdc1e8a (patch)
treee479bd1e539b9f31ed6364ba2fc2a20e0fbc1850
parent8b64dc8fae581a5d2806e531fa0a5a5942dae35c (diff)
parent7afe4e3282a9a5fbce0729ad68843fc0572247b5 (diff)
Merge pull request #252281 from doronbehar/pkg/balena-cli
balena-cli: 16.7.6 -> 17.0.0; Build from source
-rw-r--r--pkgs/tools/admin/balena-cli/default.nix112
1 files changed, 36 insertions, 76 deletions
diff --git a/pkgs/tools/admin/balena-cli/default.nix b/pkgs/tools/admin/balena-cli/default.nix
index 827d4e162b51d..bb674a83f3221 100644
--- a/pkgs/tools/admin/balena-cli/default.nix
+++ b/pkgs/tools/admin/balena-cli/default.nix
@@ -1,47 +1,49 @@
 { lib
 , stdenv
-, fetchzip
+, buildNpmPackage
+, fetchFromGitHub
 , testers
+, balena-cli
+, nodePackages
+, python3
+, udev
+, darwin
 }:
-let
-  inherit (stdenv.hostPlatform) system;
-  throwSystem = throw "Unsupported system: ${system}";
 
-  plat = {
-    x86_64-linux = "linux-x64";
-    x86_64-darwin = "macOS-x64";
-    # Balena only packages for x86 so we rely on Rosetta for Apple Silicon
-    aarch64-darwin = "macOS-x64";
-  }.${system} or throwSystem;
-
-  sha256 = {
-    x86_64-linux = "sha256-USljQ/cnbSabzsZWXlZ0eeZSqkTr3wVP0ktXqZ7Fw4U=";
-    x86_64-darwin = "sha256-NWzJPB+HzlsB6yTcEMwTg8pioonGWPOU96jyIpiZiTY=";
-    aarch64-darwin = "sha256-NWzJPB+HzlsB6yTcEMwTg8pioonGWPOU96jyIpiZiTY=";
-  }.${system} or throwSystem;
-
-  version = "16.7.6";
-  src = fetchzip {
-    url = "https://github.com/balena-io/balena-cli/releases/download/v${version}/balena-cli-v${version}-${plat}-standalone.zip";
-    inherit sha256;
-  };
-in
-stdenv.mkDerivation (finalAttrs: {
+buildNpmPackage rec {
   pname = "balena-cli";
-  inherit version src;
+  version = "17.0.0";
 
-  installPhase = ''
-    runHook preInstall
+  src = fetchFromGitHub {
+    owner = "balena-io";
+    repo = "balena-cli";
+    rev = "v${version}";
+    hash = "sha256-sNpxjSumiP+4fX6b3j+HEl/lr4pvudrhfTzr2TYastE=";
+  };
 
-    mkdir -p $out/bin
-    cp -r ./* $out/
-    ln -s $out/balena $out/bin/balena
+  npmDepsHash = "sha256-q2Yc6e5dEiP2Q4tFIeqj4mswM1/pX1pdGeoagyiupvs=";
 
-    runHook postInstall
+  postPatch = ''
+    ln -s npm-shrinkwrap.json package-lock.json
   '';
+  makeCacheWritable = true;
+
+  nativeBuildInputs = [
+    nodePackages.node-gyp
+    python3
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.cctools
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    udev
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Foundation
+    darwin.apple_sdk.frameworks.Cocoa
+  ];
 
   passthru.tests.version = testers.testVersion {
-    package = finalAttrs.finalPackage;
+    package = balena-cli;
     command = ''
       # Override default cache directory so Balena CLI's unavoidable update check does not fail due to write permissions
       BALENARC_DATA_DIRECTORY=./ balena --version
@@ -49,46 +51,6 @@ stdenv.mkDerivation (finalAttrs: {
     inherit version;
   };
 
-  # https://github.com/NixOS/nixpkgs/pull/48193/files#diff-b65952dbe5271c002fbc941b01c3586bf5050ad0e6aa6b2fcc74357680e103ea
-  preFixup =
-    if stdenv.isLinux then
-      let
-        libPath = lib.makeLibraryPath [ stdenv.cc.cc ];
-      in
-      ''
-        orig_size=$(stat --printf=%s $out/balena)
-        patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/balena
-        patchelf --set-rpath ${libPath} $out/balena
-        chmod +x $out/balena
-        new_size=$(stat --printf=%s $out/balena)
-        ###### zeit-pkg fixing starts here.
-        # we're replacing plaintext js code that looks like
-        # PAYLOAD_POSITION = '1234                  ' | 0
-        # [...]
-        # PRELUDE_POSITION = '1234                  ' | 0
-        # ^-----20-chars-----^^------22-chars------^
-        # ^-- grep points here
-        #
-        # var_* are as described above
-        # shift_by seems to be safe so long as all patchelf adjustments occur
-        # before any locations pointed to by hardcoded offsets
-        var_skip=20
-        var_select=22
-        shift_by=$(expr $new_size - $orig_size)
-        function fix_offset {
-          # $1 = name of variable to adjust
-          location=$(grep -obUam1 "$1" $out/bin/balena | cut -d: -f1)
-          location=$(expr $location + $var_skip)
-          value=$(dd if=$out/balena iflag=count_bytes,skip_bytes skip=$location \
-                     bs=1 count=$var_select status=none)
-          value=$(expr $shift_by + $value)
-          echo -n $value | dd of=$out/balena bs=1 seek=$location conv=notrunc
-        }
-        fix_offset PAYLOAD_POSITION
-        fix_offset PRELUDE_POSITION
-      '' else '''';
-  dontStrip = true;
-
   meta = with lib; {
     description = "A command line interface for balenaCloud or openBalena";
     longDescription = ''
@@ -100,9 +62,7 @@ stdenv.mkDerivation (finalAttrs: {
     homepage = "https://github.com/balena-io/balena-cli";
     changelog = "https://github.com/balena-io/balena-cli/blob/v${version}/CHANGELOG.md";
     license = licenses.asl20;
-    maintainers = [ maintainers.kalebpace ];
-    platforms = platforms.linux ++ platforms.darwin;
-    sourceProvenance = [ sourceTypes.binaryNativeCode ];
+    maintainers = [ maintainers.kalebpace maintainers.doronbehar ];
     mainProgram = "balena";
   };
-})
+}