98 lines
2.6 KiB
Nix
98 lines
2.6 KiB
Nix
{
|
||
lib,
|
||
stdenv,
|
||
fetchurl,
|
||
makeBinaryWrapper,
|
||
installShellFiles,
|
||
buildPackages,
|
||
withShellCompletions ? stdenv.hostPlatform.emulatorAvailable buildPackages,
|
||
# update script
|
||
writers,
|
||
python3Packages,
|
||
nix,
|
||
# tests
|
||
testers,
|
||
}:
|
||
let
|
||
pname = "yandex-cloud";
|
||
sources = lib.importJSON ./sources.json;
|
||
inherit (sources) version binaries;
|
||
in
|
||
stdenv.mkDerivation (finalAttrs: {
|
||
inherit pname version;
|
||
|
||
src = fetchurl binaries.${stdenv.hostPlatform.system};
|
||
|
||
dontUnpack = true;
|
||
|
||
strictDeps = true;
|
||
|
||
nativeBuildInputs = [
|
||
installShellFiles
|
||
makeBinaryWrapper
|
||
];
|
||
|
||
emulator = lib.optionalString (
|
||
withShellCompletions && !stdenv.buildPlatform.canExecute stdenv.hostPlatform
|
||
) (stdenv.hostPlatform.emulator buildPackages);
|
||
|
||
installPhase =
|
||
''
|
||
runHook preInstall
|
||
mkdir -p -- "$out/bin"
|
||
cp -- "$src" "$out/bin/yc"
|
||
chmod +x -- "$out/bin/yc"
|
||
''
|
||
+ lib.optionalString withShellCompletions ''
|
||
for shell in bash zsh; do
|
||
''${emulator:+"$emulator"} "$out/bin/yc" completion $shell >yc.$shell
|
||
installShellCompletion yc.$shell
|
||
done
|
||
''
|
||
+ ''
|
||
makeWrapper "$out/bin/yc" "$out/bin/docker-credential-yc" \
|
||
--add-flags --no-user-output \
|
||
--add-flags container \
|
||
--add-flags docker-credential
|
||
runHook postInstall
|
||
'';
|
||
|
||
passthru = {
|
||
updateScript = writers.writePython3 "${pname}-updater" {
|
||
libraries = with python3Packages; [ requests ];
|
||
makeWrapperArgs = [
|
||
"--prefix"
|
||
"PATH"
|
||
":"
|
||
(lib.makeBinPath [ nix ])
|
||
];
|
||
} ./update.py;
|
||
tests.version = testers.testVersion { package = finalAttrs.finalPackage; };
|
||
};
|
||
|
||
meta = {
|
||
description = "Command line interface that helps you interact with Yandex Cloud services";
|
||
homepage = "https://cloud.yandex/docs/cli";
|
||
changelog = "https://cloud.yandex/docs/cli/release-notes#version${version}";
|
||
sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
|
||
license = lib.licenses.unfree;
|
||
maintainers = [ lib.maintainers.tie ];
|
||
platforms = [
|
||
"aarch64-darwin"
|
||
"x86_64-darwin"
|
||
"aarch64-linux"
|
||
"x86_64-linux"
|
||
# Built with GO386=sse2.
|
||
#
|
||
# Unfortunately, we don’t have anything about SSE2 support in lib.systems,
|
||
# so we can’t mark this a broken or bad platform if host platform does not
|
||
# support SSE2. See also https://github.com/NixOS/nixpkgs/issues/132217
|
||
#
|
||
# Perhaps it would be possible to mark it as broken if platform declares
|
||
# GO386=softfloat once https://github.com/NixOS/nixpkgs/pull/256761 is
|
||
# ready and merged.
|
||
"i686-linux"
|
||
];
|
||
mainProgram = "yc";
|
||
};
|
||
})
|