diff options
author | Doron Behar <doron.behar@gmail.com> | 2023-08-31 14:08:08 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-31 14:08:08 +0000 |
commit | f8c26c97e9f31a94e75f94c79e3574035cdc1e8a (patch) | |
tree | e479bd1e539b9f31ed6364ba2fc2a20e0fbc1850 /pkgs | |
parent | 8b64dc8fae581a5d2806e531fa0a5a5942dae35c (diff) | |
parent | 7afe4e3282a9a5fbce0729ad68843fc0572247b5 (diff) |
Merge pull request #252281 from doronbehar/pkg/balena-cli
balena-cli: 16.7.6 -> 17.0.0; Build from source
Diffstat (limited to 'pkgs')
-rw-r--r-- | pkgs/tools/admin/balena-cli/default.nix | 112 |
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"; }; -}) +} |