1{ stdenv, lib, python3, fetchPypi, fetchFromGitHub, installShellFiles }:
2
3let
4 version = "2.44.1";
5 srcName = "azure-cli-${version}-src";
6
7 src = fetchFromGitHub {
8 name = srcName;
9 owner = "Azure";
10 repo = "azure-cli";
11 rev = "azure-cli-${version}";
12 hash = "sha256-QcY08YxwGywFCXy3PslEzc5qZd62y4XAcuIC9Udp6Cc=";
13 };
14
15 # put packages that needs to be overridden in the py package scope
16 py = import ./python-packages.nix {
17 inherit stdenv lib src version python3 fetchPypi;
18 };
19in
20py.pkgs.toPythonApplication (py.pkgs.buildAzureCliPackage {
21 pname = "azure-cli";
22 inherit version src;
23
24 sourceRoot = "${srcName}/src/azure-cli";
25
26 prePatch = ''
27 substituteInPlace setup.py \
28 --replace "chardet~=3.0.4" "chardet" \
29 --replace "javaproperties~=0.5.1" "javaproperties" \
30 --replace "scp~=0.13.2" "scp" \
31 --replace "packaging>=20.9,<22.0" "packaging" \
32 --replace "fabric~=2.4" "fabric"
33
34 # remove namespace hacks
35 # remove urllib3 because it was added as 'urllib3[secure]', which doesn't get handled well
36 sed -i setup.py \
37 -e '/azure-cli-command_modules-nspkg/d' \
38 -e '/azure-cli-nspkg/d' \
39 -e '/urllib3/d'
40 '';
41
42 nativeBuildInputs = [ installShellFiles ];
43
44 propagatedBuildInputs = with py.pkgs; [
45 azure-appconfiguration
46 azure-batch
47 azure-cli-core
48 azure-cli-telemetry
49 azure-cosmos
50 azure-data-tables
51 azure-datalake-store
52 azure-functions-devops-build
53 azure-graphrbac
54 azure-identity
55 azure-keyvault
56 azure-keyvault-administration
57 azure-keyvault-keys
58 azure-loganalytics
59 azure-mgmt-advisor
60 azure-mgmt-apimanagement
61 azure-mgmt-applicationinsights
62 azure-mgmt-appconfiguration
63 azure-mgmt-authorization
64 azure-mgmt-batch
65 azure-mgmt-batchai
66 azure-mgmt-billing
67 azure-mgmt-botservice
68 azure-mgmt-cdn
69 azure-mgmt-cognitiveservices
70 azure-mgmt-compute
71 azure-mgmt-consumption
72 azure-mgmt-containerinstance
73 azure-mgmt-containerregistry
74 azure-mgmt-containerservice
75 azure-mgmt-cosmosdb
76 azure-mgmt-databoxedge
77 azure-mgmt-datalake-analytics
78 azure-mgmt-datalake-store
79 azure-mgmt-datamigration
80 azure-mgmt-deploymentmanager
81 azure-mgmt-devtestlabs
82 azure-mgmt-dns
83 azure-mgmt-eventgrid
84 azure-mgmt-eventhub
85 azure-mgmt-extendedlocation
86 azure-mgmt-hdinsight
87 azure-mgmt-imagebuilder
88 azure-mgmt-iotcentral
89 azure-mgmt-iothub
90 azure-mgmt-iothubprovisioningservices
91 azure-mgmt-keyvault
92 azure-mgmt-kusto
93 azure-mgmt-loganalytics
94 azure-mgmt-managedservices
95 azure-mgmt-managementgroups
96 azure-mgmt-maps
97 azure-mgmt-marketplaceordering
98 azure-mgmt-media
99 azure-mgmt-monitor
100 azure-mgmt-msi
101 azure-mgmt-network
102 azure-mgmt-netapp
103 azure-mgmt-policyinsights
104 azure-mgmt-privatedns
105 azure-mgmt-rdbms
106 azure-mgmt-recoveryservices
107 azure-mgmt-recoveryservicesbackup
108 azure-mgmt-redhatopenshift
109 azure-mgmt-redis
110 azure-mgmt-relay
111 azure-mgmt-reservations
112 azure-mgmt-resource
113 azure-mgmt-search
114 azure-mgmt-security
115 azure-mgmt-servicebus
116 azure-mgmt-servicefabric
117 azure-mgmt-servicefabricmanagedclusters
118 azure-mgmt-servicelinker
119 azure-mgmt-signalr
120 azure-mgmt-sql
121 azure-mgmt-sqlvirtualmachine
122 azure-mgmt-storage
123 azure-mgmt-synapse
124 azure-mgmt-trafficmanager
125 azure-mgmt-web
126 azure-multiapi-storage
127 azure-storage-blob
128 azure-synapse-accesscontrol
129 azure-synapse-artifacts
130 azure-synapse-managedprivateendpoints
131 azure-synapse-spark
132 chardet
133 colorama
134 cryptography
135 distro
136 fabric
137 jsmin
138 knack
139 mock
140 paramiko
141 pydocumentdb
142 pygithub
143 pygments
144 pynacl
145 pyopenssl
146 pytz
147 pyyaml
148 psutil
149 requests
150 scp
151 semver
152 six
153 sshtunnel
154 urllib3
155 vsts-cd-manager
156 websocket-client
157 xmltodict
158 javaproperties
159 jsondiff
160 # urllib3[secure]
161 # shell completion
162 argcomplete
163 ];
164
165 postInstall = ''
166 substituteInPlace az.completion.sh \
167 --replace register-python-argcomplete ${py.pkgs.argcomplete}/bin/register-python-argcomplete
168 installShellCompletion --bash --name az.bash az.completion.sh
169 installShellCompletion --zsh --name _az az.completion.sh
170
171 # remove garbage
172 rm $out/bin/az.bat
173 rm $out/bin/az.completion.sh
174 '';
175
176 # wrap the executable so that the python packages are available
177 # it's just a shebang script which calls `python -m azure.cli "$@"`
178 postFixup = ''
179 wrapProgram $out/bin/az \
180 --set PYTHONPATH $PYTHONPATH
181 '';
182
183 # almost the entire test suite requires an azure account setup and networking
184 # ensure that the azure namespaces are setup correctly and that azure.cli can be accessed
185 checkPhase = ''
186 HOME=$TMPDIR $out/bin/az --help > /dev/null
187 '';
188
189 # ensure these namespaces are able to be accessed
190 pythonImportsCheck = [
191 "azure.batch"
192 "azure.cli.core"
193 "azure.cli.telemetry"
194 "azure.cosmos"
195 "azure.datalake.store"
196 "azure_functions_devops_build"
197 "azure.graphrbac"
198 "azure.keyvault"
199 "azure.loganalytics"
200 "azure.mgmt.advisor"
201 "azure.mgmt.apimanagement"
202 "azure.mgmt.applicationinsights"
203 "azure.mgmt.appconfiguration"
204 "azure.mgmt.authorization"
205 "azure.mgmt.batch"
206 "azure.mgmt.batchai"
207 "azure.mgmt.billing"
208 "azure.mgmt.botservice"
209 "azure.mgmt.cdn"
210 "azure.mgmt.cognitiveservices"
211 "azure.mgmt.compute"
212 "azure.mgmt.consumption"
213 "azure.mgmt.containerinstance"
214 "azure.mgmt.containerregistry"
215 "azure.mgmt.containerservice"
216 "azure.mgmt.cosmosdb"
217 "azure.mgmt.datalake.analytics"
218 "azure.mgmt.datalake.store"
219 "azure.mgmt.datamigration"
220 "azure.mgmt.deploymentmanager"
221 "azure.mgmt.devtestlabs"
222 "azure.mgmt.dns"
223 "azure.mgmt.eventgrid"
224 "azure.mgmt.eventhub"
225 "azure.mgmt.hdinsight"
226 "azure.mgmt.imagebuilder"
227 "azure.mgmt.iotcentral"
228 "azure.mgmt.iothub"
229 "azure.mgmt.iothubprovisioningservices"
230 "azure.mgmt.keyvault"
231 "azure.mgmt.kusto"
232 "azure.mgmt.loganalytics"
233 "azure.mgmt.managedservices"
234 "azure.mgmt.managementgroups"
235 "azure.mgmt.maps"
236 "azure.mgmt.marketplaceordering"
237 "azure.mgmt.media"
238 "azure.mgmt.monitor"
239 "azure.mgmt.msi"
240 "azure.mgmt.network"
241 "azure.mgmt.netapp"
242 "azure.mgmt.policyinsights"
243 "azure.mgmt.privatedns"
244 "azure.mgmt.rdbms"
245 "azure.mgmt.recoveryservices"
246 "azure.mgmt.recoveryservicesbackup"
247 "azure.mgmt.redis"
248 "azure.mgmt.relay"
249 "azure.mgmt.reservations"
250 "azure.mgmt.resource"
251 "azure.mgmt.search"
252 "azure.mgmt.security"
253 "azure.mgmt.servicebus"
254 "azure.mgmt.servicefabric"
255 "azure.mgmt.signalr"
256 "azure.mgmt.sql"
257 "azure.mgmt.sqlvirtualmachine"
258 "azure.mgmt.storage"
259 "azure.mgmt.trafficmanager"
260 "azure.mgmt.web"
261 "azure.storage.blob"
262 "azure.storage.common"
263 ];
264
265 meta = with lib; {
266 homepage = "https://github.com/Azure/azure-cli";
267 description = "Next generation multi-platform command line experience for Azure";
268 license = licenses.mit;
269 maintainers = with maintainers; [ jonringer ];
270 };
271})
272