bbea6b19bd
aacf05daec
cleaned up python path and removed setuptools from the runtime
dependencies, which seems to be required now by the `self-check`
command which runs in `installCheckPhase`. There was a version bump on
master since the last CI run on this PR, that's why it wasn't catched.
Previously this was part of the closure as we didn't construct the
PYTHONPATH explicitly but wrapped the CLI with the PYTHONPATH from the
build environment.
Signed-off-by: Paul Meyer <49727155+katexochen@users.noreply.github.com>
364 lines
9.4 KiB
Nix
364 lines
9.4 KiB
Nix
{ lib
|
|
, callPackage
|
|
, callPackages
|
|
, stdenvNoCC
|
|
, fetchurl
|
|
, fetchFromGitHub
|
|
, installShellFiles
|
|
, python3
|
|
|
|
# Whether to include patches that enable placing certain behavior-defining
|
|
# configuration files in the Nix store.
|
|
, withImmutableConfig ? true
|
|
|
|
# List of extensions/plugins to include.
|
|
, withExtensions ? [ ]
|
|
|
|
, azure-cli
|
|
}:
|
|
|
|
let
|
|
version = "2.58.0";
|
|
|
|
src = fetchFromGitHub {
|
|
name = "azure-cli-${version}-src";
|
|
owner = "Azure";
|
|
repo = "azure-cli";
|
|
rev = "azure-cli-${version}";
|
|
hash = "sha256-2KLjPzxtHeuH0/+Sge1wTmGimOiaTWr8EI+xkFBrPD0=";
|
|
};
|
|
|
|
# put packages that needs to be overridden in the py package scope
|
|
py = callPackage ./python-packages.nix { inherit src version; };
|
|
|
|
# Builder for Azure CLI extensions. Extensions are Python wheels that
|
|
# outside of nix would be fetched by the CLI itself from various sources.
|
|
mkAzExtension =
|
|
{ pname
|
|
, version
|
|
, url
|
|
, sha256
|
|
, description
|
|
}: python3.pkgs.buildPythonPackage {
|
|
inherit pname version;
|
|
format = "wheel";
|
|
src = fetchurl { inherit url sha256; };
|
|
meta = with lib; {
|
|
inherit description;
|
|
inherit (azure-cli.meta) platforms maintainers;
|
|
homepage = "https://github.com/Azure/azure-cli-extensions";
|
|
changelog = "https://github.com/Azure/azure-cli-extensions/blob/main/src/${pname}/HISTORY.rst";
|
|
license = lib.licenses.mit;
|
|
sourceProvenance = [ sourceTypes.fromSource ];
|
|
};
|
|
};
|
|
|
|
extensions = callPackages ./extensions-generated.nix { inherit mkAzExtension; };
|
|
|
|
extensionDir = stdenvNoCC.mkDerivation {
|
|
name = "azure-cli-extensions";
|
|
dontUnpack = true;
|
|
installPhase =
|
|
let
|
|
namePaths = map (p: "${p.pname},${p}/${python3.sitePackages}") withExtensions;
|
|
in
|
|
''
|
|
for line in ${lib.concatStringsSep " " namePaths}; do
|
|
name=$(echo $line | cut -d',' -f1)
|
|
path=$(echo $line | cut -d',' -f2)
|
|
mkdir -p $out/$name
|
|
for f in $(ls $path); do
|
|
ln -s $path/$f $out/$name/$f
|
|
done
|
|
done
|
|
'';
|
|
};
|
|
in
|
|
|
|
py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage rec {
|
|
pname = "azure-cli";
|
|
inherit version src;
|
|
|
|
sourceRoot = "${src.name}/src/azure-cli";
|
|
|
|
nativeBuildInputs = [
|
|
installShellFiles
|
|
];
|
|
|
|
propagatedBuildInputs = with py.pkgs; [
|
|
antlr4-python3-runtime
|
|
applicationinsights
|
|
argcomplete
|
|
asn1crypto
|
|
azure-appconfiguration
|
|
azure-batch
|
|
azure-cli-core
|
|
azure-cli-telemetry
|
|
azure-common
|
|
azure-core
|
|
azure-cosmos
|
|
azure-data-tables
|
|
azure-datalake-store
|
|
azure-graphrbac
|
|
azure-keyvault-administration
|
|
azure-keyvault-certificates
|
|
azure-keyvault-keys
|
|
azure-keyvault-secrets
|
|
azure-loganalytics
|
|
azure-mgmt-advisor
|
|
azure-mgmt-apimanagement
|
|
azure-mgmt-appconfiguration
|
|
azure-mgmt-appcontainers
|
|
azure-mgmt-applicationinsights
|
|
azure-mgmt-authorization
|
|
azure-mgmt-batch
|
|
azure-mgmt-batchai
|
|
azure-mgmt-billing
|
|
azure-mgmt-botservice
|
|
azure-mgmt-cdn
|
|
azure-mgmt-cognitiveservices
|
|
azure-mgmt-compute
|
|
azure-mgmt-consumption
|
|
azure-mgmt-containerinstance
|
|
azure-mgmt-containerregistry
|
|
azure-mgmt-containerservice
|
|
azure-mgmt-core
|
|
azure-mgmt-cosmosdb
|
|
azure-mgmt-databoxedge
|
|
azure-mgmt-datalake-nspkg
|
|
azure-mgmt-datalake-store
|
|
azure-mgmt-datamigration
|
|
azure-mgmt-devtestlabs
|
|
azure-mgmt-dns
|
|
azure-mgmt-eventgrid
|
|
azure-mgmt-eventhub
|
|
azure-mgmt-extendedlocation
|
|
azure-mgmt-hdinsight
|
|
azure-mgmt-imagebuilder
|
|
azure-mgmt-iotcentral
|
|
azure-mgmt-iothub
|
|
azure-mgmt-iothubprovisioningservices
|
|
azure-mgmt-keyvault
|
|
azure-mgmt-kusto
|
|
azure-mgmt-loganalytics
|
|
azure-mgmt-managementgroups
|
|
azure-mgmt-managedservices
|
|
azure-mgmt-maps
|
|
azure-mgmt-marketplaceordering
|
|
azure-mgmt-media
|
|
azure-mgmt-monitor
|
|
azure-mgmt-msi
|
|
azure-mgmt-netapp
|
|
azure-mgmt-policyinsights
|
|
azure-mgmt-privatedns
|
|
azure-mgmt-rdbms
|
|
azure-mgmt-recoveryservices
|
|
azure-mgmt-recoveryservicesbackup
|
|
azure-mgmt-redhatopenshift
|
|
azure-mgmt-redis
|
|
azure-mgmt-relay
|
|
azure-mgmt-resource
|
|
azure-mgmt-search
|
|
azure-mgmt-security
|
|
azure-mgmt-servicebus
|
|
azure-mgmt-servicefabric
|
|
azure-mgmt-servicefabricmanagedclusters
|
|
azure-mgmt-servicelinker
|
|
azure-mgmt-sql
|
|
azure-mgmt-signalr
|
|
azure-mgmt-sqlvirtualmachine
|
|
azure-mgmt-storage
|
|
azure-mgmt-synapse
|
|
azure-mgmt-trafficmanager
|
|
azure-mgmt-web
|
|
azure-multiapi-storage
|
|
azure-nspkg
|
|
azure-storage-common
|
|
azure-storage-blob
|
|
azure-synapse-accesscontrol
|
|
azure-synapse-artifacts
|
|
azure-synapse-managedprivateendpoints
|
|
azure-synapse-spark
|
|
bcrypt
|
|
certifi
|
|
cffi
|
|
chardet
|
|
colorama
|
|
cryptography
|
|
distro
|
|
fabric
|
|
humanfriendly
|
|
idna
|
|
invoke
|
|
isodate
|
|
javaproperties
|
|
jinja2
|
|
jmespath
|
|
jsondiff
|
|
knack
|
|
markupsafe
|
|
msal-extensions
|
|
msal
|
|
msrest
|
|
msrestazure
|
|
oauthlib
|
|
packaging
|
|
paramiko
|
|
pbr
|
|
pkginfo
|
|
portalocker
|
|
psutil
|
|
pycomposefile
|
|
pycparser
|
|
pygithub
|
|
pyjwt
|
|
pynacl
|
|
pyopenssl
|
|
python-dateutil
|
|
requests-oauthlib
|
|
requests
|
|
scp
|
|
semver
|
|
setuptools
|
|
six
|
|
sshtunnel
|
|
tabulate
|
|
urllib3
|
|
wcwidth
|
|
websocket-client
|
|
xmltodict
|
|
];
|
|
|
|
postInstall = ''
|
|
substituteInPlace az.completion.sh \
|
|
--replace register-python-argcomplete ${py.pkgs.argcomplete}/bin/register-python-argcomplete
|
|
installShellCompletion --bash --name az.bash az.completion.sh
|
|
installShellCompletion --zsh --name _az az.completion.sh
|
|
'' + lib.optionalString withImmutableConfig ''
|
|
export HOME=$TMPDIR
|
|
$out/bin/az --version
|
|
mkdir -p $out/etc/azure
|
|
mv $TMPDIR/.azure/commandIndex.json $out/etc/azure/commandIndex.json
|
|
mv $TMPDIR/.azure/versionCheck.json $out/etc/azure/versionCheck.json
|
|
'' + ''
|
|
# remove garbage
|
|
rm $out/bin/az.bat
|
|
rm $out/bin/az.completion.sh
|
|
'';
|
|
|
|
# wrap the executable so that the python packages are available
|
|
# it's just a shebang script which calls `python -m azure.cli "$@"`
|
|
postFixup = ''
|
|
wrapProgram $out/bin/az \
|
|
'' + lib.optionalString withImmutableConfig ''
|
|
--set AZURE_IMMUTABLE_DIR $out/etc/azure \
|
|
'' + lib.optionalString (withExtensions != [ ]) ''
|
|
--set AZURE_EXTENSION_DIR ${extensionDir} \
|
|
'' + ''
|
|
--set PYTHONPATH "${python3.pkgs.makePythonPath propagatedBuildInputs}:$out/${python3.sitePackages}"
|
|
'';
|
|
|
|
doInstallCheck = true;
|
|
installCheckPhase = ''
|
|
export HOME=$TMPDIR
|
|
|
|
$out/bin/az --version
|
|
$out/bin/az self-test
|
|
'';
|
|
|
|
# ensure these namespaces are able to be accessed
|
|
pythonImportsCheck = [
|
|
"azure.batch"
|
|
"azure.cli.core"
|
|
"azure.cli.telemetry"
|
|
"azure.cosmos"
|
|
"azure.datalake.store"
|
|
"azure.graphrbac"
|
|
"azure.keyvault"
|
|
"azure.loganalytics"
|
|
"azure.mgmt.advisor"
|
|
"azure.mgmt.apimanagement"
|
|
"azure.mgmt.applicationinsights"
|
|
"azure.mgmt.appconfiguration"
|
|
"azure.mgmt.appcontainers"
|
|
"azure.mgmt.authorization"
|
|
"azure.mgmt.batch"
|
|
"azure.mgmt.batchai"
|
|
"azure.mgmt.billing"
|
|
"azure.mgmt.botservice"
|
|
"azure.mgmt.cdn"
|
|
"azure.mgmt.cognitiveservices"
|
|
"azure.mgmt.compute"
|
|
"azure.mgmt.consumption"
|
|
"azure.mgmt.containerinstance"
|
|
"azure.mgmt.containerregistry"
|
|
"azure.mgmt.containerservice"
|
|
"azure.mgmt.cosmosdb"
|
|
"azure.mgmt.datalake.store"
|
|
"azure.mgmt.datamigration"
|
|
"azure.mgmt.devtestlabs"
|
|
"azure.mgmt.dns"
|
|
"azure.mgmt.eventgrid"
|
|
"azure.mgmt.eventhub"
|
|
"azure.mgmt.hdinsight"
|
|
"azure.mgmt.imagebuilder"
|
|
"azure.mgmt.iotcentral"
|
|
"azure.mgmt.iothub"
|
|
"azure.mgmt.iothubprovisioningservices"
|
|
"azure.mgmt.keyvault"
|
|
"azure.mgmt.kusto"
|
|
"azure.mgmt.loganalytics"
|
|
"azure.mgmt.managedservices"
|
|
"azure.mgmt.managementgroups"
|
|
"azure.mgmt.maps"
|
|
"azure.mgmt.marketplaceordering"
|
|
"azure.mgmt.media"
|
|
"azure.mgmt.monitor"
|
|
"azure.mgmt.msi"
|
|
"azure.mgmt.netapp"
|
|
"azure.mgmt.policyinsights"
|
|
"azure.mgmt.privatedns"
|
|
"azure.mgmt.rdbms"
|
|
"azure.mgmt.recoveryservices"
|
|
"azure.mgmt.recoveryservicesbackup"
|
|
"azure.mgmt.redis"
|
|
"azure.mgmt.relay"
|
|
"azure.mgmt.resource"
|
|
"azure.mgmt.search"
|
|
"azure.mgmt.security"
|
|
"azure.mgmt.servicebus"
|
|
"azure.mgmt.servicefabric"
|
|
"azure.mgmt.signalr"
|
|
"azure.mgmt.sql"
|
|
"azure.mgmt.sqlvirtualmachine"
|
|
"azure.mgmt.storage"
|
|
"azure.mgmt.trafficmanager"
|
|
"azure.mgmt.web"
|
|
"azure.storage.blob"
|
|
"azure.storage.common"
|
|
];
|
|
|
|
passthru = {
|
|
inherit extensions;
|
|
withExtensions = extensions: azure-cli.override { withExtensions = extensions; };
|
|
};
|
|
|
|
meta = with lib; {
|
|
homepage = "https://github.com/Azure/azure-cli";
|
|
description = "Next generation multi-platform command line experience for Azure";
|
|
downloadPage = "https://github.com/Azure/azure-cli/releases/tag/azure-cli-${version}";
|
|
longDescription = ''
|
|
The Azure Command-Line Interface (CLI) is a cross-platform
|
|
command-line tool to connect to Azure and execute administrative
|
|
commands on Azure resources. It allows the execution of commands
|
|
through a terminal using interactive command-line prompts or a script.
|
|
'';
|
|
changelog = "https://github.com/MicrosoftDocs/azure-docs-cli/blob/main/docs-ref-conceptual/release-notes-azure-cli.md";
|
|
sourceProvenance = [ sourceTypes.fromSource ];
|
|
license = licenses.mit;
|
|
mainProgram = "az";
|
|
maintainers = with maintainers; [ jonringer ];
|
|
platforms = platforms.all;
|
|
};
|
|
})
|