azup-cli 2.7.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,365 @@
1
+ Metadata-Version: 2.4
2
+ Name: azup-cli
3
+ Version: 2.7.1
4
+ Summary: Install, update and check your Azure engineering toolbox (Azure CLI, Az PowerShell, Graph, Bicep ...) on Windows, macOS and Linux.
5
+ License: MIT
6
+ Project-URL: Homepage, https://github.com/saeid-adz/azup
7
+ Project-URL: Changelog, https://github.com/saeid-adz/azup/blob/main/CHANGELOG.md
8
+ Project-URL: Issues, https://github.com/saeid-adz/azup/issues
9
+ Keywords: azure,cli,powershell,graph,devops
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Operating System :: Microsoft :: Windows
14
+ Classifier: Operating System :: MacOS
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Topic :: System :: Installation/Setup
18
+ Requires-Python: >=3.8
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Dynamic: license-file
22
+
23
+ <p align="center">
24
+ <img src="assets/banner.svg" alt="azup – install · update · done. no tears." width="900">
25
+ </p>
26
+
27
+ <p align="center">
28
+ <a href="https://github.com/saeid-adz/azup/releases"><img alt="release" src="https://img.shields.io/github/v/release/saeid-adz/azup?color=0078d4&label=release"></a>
29
+ <img alt="platforms" src="https://img.shields.io/badge/platforms-Windows%20%C2%B7%20macOS%20%C2%B7%20Linux-50e6ff">
30
+ <img alt="python" src="https://img.shields.io/badge/python-3.8%2B-3776ab">
31
+ <img alt="dependencies" src="https://img.shields.io/badge/dependencies-zero-3fb950">
32
+ <a href="LICENSE"><img alt="license" src="https://img.shields.io/badge/license-MIT-lightgrey"></a>
33
+ </p>
34
+
35
+ <h3 align="center">One command to install, update and sanity-check everything an Azure engineer needs.<br>Comes with a small blue robot.</h3>
36
+
37
+ <p align="center">
38
+ <img src="assets/demo.svg" alt="azup demo: status, update, confetti" width="800">
39
+ </p>
40
+
41
+ ---
42
+
43
+ ## Why does this exist?
44
+
45
+ Because this is not a personality:
46
+
47
+ ```sh
48
+ brew upgrade azure-cli azd && pwsh -c "Update-Module Az, Microsoft.Graph" && az extension update --name resource-graph && az bicep upgrade && …
49
+ ```
50
+
51
+ …and then doing it all again on your Windows laptop, your Ubuntu jump box, and the Mac you swore you'd never touch.
52
+
53
+ **azup** keeps your Azure toolbox in one place:
54
+
55
+ - 🧰 **Everything in one list** – Azure CLI, `azd`, Bicep, Az PowerShell, Microsoft Graph SDK, Entra PowerShell, `az` extensions, Foundry / AI tooling, kubectl, kubelogin, AzCopy, Terraform and friends
56
+ - ✅ **One checklist** – tick what you want, azup installs the missing and updates the outdated
57
+ - 🖥️ **Windows, macOS, Linux** – same commands everywhere (winget / Homebrew / PowerShell Gallery under the hood)
58
+ - 🩺 **`azup doctor`** – are you actually signed in to `az`, `azd`, Az PowerShell and Graph? (Finally, an answer.)
59
+ - 🪶 **Zero dependencies** – a single Python file. No `pip install` rabbit holes.
60
+ - 🤖 **Azzy** – a tiny blue robot who blinks, tells jokes while you wait, and throws confetti when you're done
61
+
62
+ ## Install
63
+
64
+ **macOS / Linux**
65
+
66
+ ```sh
67
+ curl -fsSL https://raw.githubusercontent.com/saeid-adz/azup/main/install.sh | sh
68
+ ```
69
+
70
+ **Windows** (PowerShell – installs Python via winget if you don't have it)
71
+
72
+ ```powershell
73
+ irm https://raw.githubusercontent.com/saeid-adz/azup/main/install.ps1 | iex
74
+ ```
75
+
76
+ **Any OS with pipx** (from PyPI)
77
+
78
+ ```sh
79
+ pipx install azup-cli
80
+ ```
81
+
82
+ The package is called `azup-cli`; the command is still `azup`. Windows users can also download a standalone `azup.exe` from the [releases page](https://github.com/saeid-adz/azup/releases).
83
+
84
+ Open a new terminal and type `azup`. That's the whole setup. (Yes, really. Go get a coffee, or don't – we're not your manager.)
85
+
86
+ > **Want to pin a version?** Installs from a release tag are immutable: `curl -fsSL https://raw.githubusercontent.com/saeid-adz/azup/main/install.sh | AZUP_BRANCH=v2.7.1 sh` (PowerShell: set `$env:AZUP_BRANCH = 'v2.7.1'` first).
87
+
88
+ > Prefer to read before you pipe to a shell? Good instincts. [`install.sh`](install.sh) and [`install.ps1`](install.ps1) are short and boring on purpose.
89
+
90
+ ## 30-second tour
91
+
92
+ ```sh
93
+ azup # interactive menu (Azzy will suggest what to do)
94
+ azup select # the checklist: tick, enter, done
95
+ azup status # what's installed, what's outdated
96
+ azup install --profile core # az, azd, Bicep, PowerShell, Az, Graph, resource-graph
97
+ azup update # update everything that's outdated
98
+ azup doctor # sign-in + health checks
99
+ azup login all # az, azd, Az PowerShell and Graph sign-in in one go
100
+ azup changes # release notes for everything that's outdated
101
+ azup update --changes # read the notes first, then decide
102
+ azup nudge enable # "3 tools outdated" when you open a terminal
103
+ azup schedule enable # update automatically (weekly, Mondays 09:00)
104
+ azup whoami # who am I signed in as, in every tool?
105
+ azup ctx # switch subscription everywhere at once (type to filter)
106
+ azup install --profile ai # core + Foundry / AI tooling
107
+ azup install --all -j 6 # everything, up to 6 things at once (default 4; -j 1 = one at a time)
108
+ azup self-update # update azup itself
109
+ azup joke # you've earned it
110
+ ```
111
+
112
+ Add `-n/--dry-run` to see exactly what would run (changes nothing) and `-y/--yes` to skip the "Proceed?" prompt.
113
+
114
+ ### The checklist
115
+
116
+ ```text
117
+ Select components to install / update
118
+ CLI
119
+ ◉ Azure Developer CLI 1.25.4 → 1.37.3 azd up / templates
120
+ ○ Azure CLI 2.86.0 ✔ az command line
121
+ ○ kubelogin not installed Entra auth for AKS
122
+ POWERSHELL
123
+ ◉ Az PowerShell 16.2.0 → 16.5.0 Azure PowerShell module
124
+ ○ Microsoft Graph SDK not installed Graph API v1.0 cmdlets
125
+ ↑/↓ move · space toggle · a all · n none · u outdated · m missing · c core · enter confirm · q cancel
126
+ ```
127
+
128
+ Missing → **install**. Outdated → **update**. Already fine → left alone. You always get a plan and a "Proceed?" before anything happens.
129
+
130
+ ## Fast: installs and updates run in parallel
131
+
132
+ `azup install` and `azup update` don't wait in line. Work is split into **lanes**, one per backend, that run side by side while a live board shows every task:
133
+
134
+ ```text
135
+ » 12 tasks · 5 lanes in parallel 6 running · 5/12 done
136
+ ✔ Azure CLI brew 3s done
137
+ ⠧ Functions Core Tools brew 3s ==> Downloading azcopy
138
+ ⠧ AzCopy brew 3s ==> Downloading azcopy
139
+ ✔ Az PowerShell pwsh 4s done
140
+ ⠧ Microsoft Graph Beta pwsh 1s Installing Microsoft.Graph.Beta ...
141
+ ◌ ext: resource-graph az waiting for Azure CLI
142
+ ○ Bicep az queued
143
+ ▕███████░░░░░░░░░░░▏ 5/12
144
+ ```
145
+
146
+ It's fast *and* safe, because not everything can run at once:
147
+
148
+ - **Homebrew** formulas are installed in a single `brew` call, so Homebrew downloads them in parallel itself (and azup retries one by one if the batch fails).
149
+ - **PowerShell modules** use two lanes: `Az` runs alongside `Microsoft.Graph*` / `Entra` (which share dependencies and so stay in order).
150
+ - Things that **need another tool wait for it**: modules wait for PowerShell, `az` extensions for Azure CLI, `azd` extensions for `azd`. If that tool failed, they say so instead of failing mysteriously.
151
+ - Anything that **may ask you something** (a password for a macOS cask, trusting a Homebrew tap) runs one at a time with a real terminal, never hidden in the background.
152
+
153
+ In a test with realistic delays, a 12-tool install dropped from 35 s to 9 s. Real-world gains depend on your network and the tools you pick, since the biggest downloads still take as long as they take. `-j 1` (or `AZUP_JOBS=1`) gives you the old one-at-a-time behaviour; `-n` (dry run) always lists steps in order. Unattended `azup schedule` runs use the same engine and write one block per tool to the log.
154
+
155
+ ## What's new before you update
156
+
157
+ Updating blind is how Friday afternoons get interesting.
158
+
159
+ ```sh
160
+ azup changes # release notes for every outdated tool
161
+ azup changes azd Az # or just some of them
162
+ azup update --changes # show the notes, then ask before updating
163
+ ```
164
+
165
+ In the checklist (and in "Update everything") the confirmation prompt is `Proceed? [Y/n/c]` – press **c** to read what's new for the updates in your plan, then decide.
166
+
167
+ ```text
168
+ ▶ Azure Developer CLI 1.36.0 → 1.37.3
169
+ v1.37.3 2026-11-05
170
+ Features Added
171
+ • #10696 Add support for stable-to-stable azd update from an elevated terminal …
172
+ Bugs Fixed
173
+ • #10763 Fix workflow steps ignoring their explicit --cwd …
174
+ … +7 more lines https://github.com/Azure/azure-dev/releases/tag/azure-dev-cli_1.37.3
175
+ ```
176
+
177
+ Notes come straight from each project's own releases (GitHub releases, the Azure CLI release notes, and `HISTORY.rst` for `az` extensions), only for the versions between yours and the latest. No account needed; set `GITHUB_TOKEN` if you hit GitHub's anonymous rate limit.
178
+
179
+ ## Update nudges & scheduled updates
180
+
181
+ **A short reminder when you open a terminal** (opt-in):
182
+
183
+ ```sh
184
+ azup nudge enable # adds a clearly marked one-line block to your shell profile (zsh / bash / PowerShell)
185
+ ```
186
+
187
+ ```text
188
+ ▟▙ azup 3 tools outdated (Azure Developer CLI, Az PowerShell, Functions Core Tools) → azup update · azup changes
189
+ ```
190
+
191
+ At most one line a day, read from a small cache that refreshes in the background (the same lookups as `azup status`), so your shell starts instantly. It never installs anything. `azup nudge snooze 7d` quiets it, `azup nudge status` shows its state, `azup nudge disable` removes the block.
192
+
193
+ **Optional automatic updates:**
194
+
195
+ ```sh
196
+ azup schedule enable # weekly, Mondays 09:00
197
+ azup schedule enable --daily --at 07:30 # or every morning
198
+ azup schedule status
199
+ azup schedule disable
200
+ ```
201
+
202
+ | OS | Mechanism |
203
+ |---|---|
204
+ | macOS | a launchd agent (`~/Library/LaunchAgents`) |
205
+ | Linux | a systemd user timer, or cron if systemd isn't available |
206
+ | Windows | a Task Scheduler task (`azup-update`) |
207
+
208
+ Unattended runs never prompt: anything that needs a password (for example the macOS PowerShell cask) is skipped and reported, and a log goes to `~/.azup/logs`. Your next terminal tells you what was updated. Use `azup schedule enable -n` to preview exactly what would be created. *(Scheduling on Linux and Windows is new – please open an issue if it misbehaves.)*
209
+
210
+ ## Who am I? And where am I?
211
+
212
+ Four tools, four separate sign-ins, four chances to deploy to the wrong subscription.
213
+
214
+ ```sh
215
+ azup whoami
216
+ ```
217
+
218
+ ```text
219
+ Azure CLI ✔ you@contoso.com · Prod-Platform (33b7b305) · tenant cf0683a7
220
+ Azure Developer CLI ✔ you@contoso.com
221
+ Az PowerShell ✔ you@contoso.com · Sandbox (d4b16185) · tenant cf0683a7
222
+ Microsoft Graph ▲ not signed in → azup login graph
223
+
224
+ ▲ Az PowerShell is on 'Sandbox', az is on 'Prod-Platform'
225
+ fix it with: azup ctx
226
+ ```
227
+
228
+ `azup whoami` warns when your tools disagree. `azup ctx` fixes it: pick a subscription once and `az`, `azd` and Az PowerShell all follow. Got hundreds of subscriptions? The picker filters as you type.
229
+
230
+ ```sh
231
+ azup ctx # type-to-filter picker
232
+ azup ctx prod-platform # or jump straight there (id or part of the name)
233
+ azup ctx --list # just list them (add --all for disabled ones)
234
+ azup login graph --tenant contoso.onmicrosoft.com # Graph is tenant-scoped
235
+ ```
236
+
237
+ ## Microsoft Foundry & AI tooling
238
+
239
+ ```sh
240
+ azup install --profile ai
241
+ ```
242
+
243
+ | Component | What it is |
244
+ |---|---|
245
+ | **Foundry Local** (`foundry`) | run models on your own machine (preview; Windows and macOS) |
246
+ | **azd: Microsoft Foundry** | the Foundry bundle for `azd` (needs azd 1.37+) |
247
+ | **azd: AI agents** | scaffold and deploy hosted agents with `azd ai agent` |
248
+ | **ext: ml** | Azure Machine Learning v2 / Foundry hubs for `az` |
249
+
250
+ `azd` extensions are managed like everything else (`azup status`, `azup update`). azup checks your `azd` version first and tells you to update it if it's too old for an extension.
251
+
252
+ ## Meet Azzy 🤖
253
+
254
+ ```text
255
+ ▟███▙
256
+ ▟█████▙ ╭──────────────────────────────────────────╮
257
+ ▟█◕███◕█▙ ◂ │ It looks like 3 tools are outdated. │
258
+ ▟████‿████▙ │ Would you like me to update them? │
259
+ ▟██▘ ▝██▙ ╰──────────────────────────────────────────╯
260
+ ```
261
+
262
+ Azzy lives in your terminal and:
263
+
264
+ - **suggests the next step** based on your machine (and pre-selects it, because we respect your time)
265
+ - **blinks and looks around** while azup inspects your toolbox
266
+ - **tells jokes** if the cloud takes longer than 2.5 seconds *("Localhost: the only region with 100% uptime.")*
267
+ - **throws confetti** when an install finishes, and looks genuinely sad when it doesn't
268
+
269
+ Azzy is an "A" with eyes – a friendly nod to the Azure shape, drawn from scratch. Any resemblance to a certain office-assistant paperclip is purely a spiritual cousin situation.
270
+
271
+ Animations are tasteful and automatically off when you pipe output or run in CI. To turn them off by hand: `azup --no-anim …` or `AZUP_NO_ANIM=1`. `NO_COLOR` is respected too.
272
+
273
+ ## What azup manages
274
+
275
+ | Component | macOS | Linux | Windows |
276
+ |---|---|---|---|
277
+ | Azure CLI, azd, Functions Core Tools, kubelogin, kubectl, AzCopy, sqlcmd, Terraform | Homebrew | Homebrew | winget |
278
+ | PowerShell 7 | Homebrew cask | official release tarball → `~/.local` (no sudo, SHA-256 verified) | winget |
279
+ | Az, Microsoft.Graph, Graph.Beta, Microsoft.Entra | PowerShell Gallery | PowerShell Gallery | PowerShell Gallery |
280
+ | Bicep, `az` extensions (resource-graph, azure-devops, aks-preview, ml) | `az` | `az` | `az` |
281
+ | `azd` extensions (Foundry, AI agents) | `azd` | `azd` | `azd` |
282
+ | Foundry Local | Homebrew | – | winget |
283
+
284
+ Things you installed some other way show up as **external** and are never touched. azup is a guest in your machine.
285
+
286
+ ```mermaid
287
+ flowchart LR
288
+ U([you]) --> A[azup]
289
+ A --> S{what's the OS?}
290
+ S -->|macOS / Linux| H[Homebrew]
291
+ S -->|Windows| W[winget]
292
+ A --> G[PowerShell Gallery]
293
+ A --> Z[az extension / az bicep]
294
+ H & W & G & Z --> T[(your Azure toolbox)]
295
+ ```
296
+
297
+ ## Things azup will never do
298
+
299
+ - Delete a resource group. (It doesn't even know what a resource group is. It just installs the tools.)
300
+ - Collect telemetry. There is none. The only network traffic is your package managers and, if you run `self-update`, GitHub.
301
+ - Install anything, use `sudo`, or trust a Homebrew tap without showing you the plan and asking first.
302
+ - Judge your tag hygiene. *(Azzy does, silently.)*
303
+
304
+ ## Troubleshooting
305
+
306
+ <details>
307
+ <summary><b>Homebrew says "Refusing to load … from untrusted tap"</b></summary>
308
+
309
+ New Homebrew versions refuse to load taps you haven't trusted. azup explains it and offers to run the narrowest `brew trust …` command, then retries once. It never trusts without asking – not even with `--yes`.
310
+ </details>
311
+
312
+ <details>
313
+ <summary><b>Linux: "Insufficient permissions to install Homebrew"</b></summary>
314
+
315
+ Homebrew needs sudo once to create its directory. azup asks for your sudo password up front. If it still fails, install the build tools first:
316
+
317
+ ```sh
318
+ sudo apt update && sudo apt install -y build-essential procps curl file git
319
+ ```
320
+ </details>
321
+
322
+ <details>
323
+ <summary><b>Linux: PowerShell installed but won't start</b></summary>
324
+
325
+ azup installs PowerShell from Microsoft's release tarball and smoke-tests it. The build needs ICU: `sudo apt install -y libicu-dev` (Debian/Ubuntu) or `sudo dnf install -y libicu` (Fedora/RHEL). A `pwsh` that is on your PATH but doesn't start (for example a broken snap) counts as *not installed*, so azup can install a working one; make sure `~/.local/bin` is on your PATH.
326
+ </details>
327
+
328
+ <details>
329
+ <summary><b>Windows: a tool installed but azup says it's missing</b></summary>
330
+
331
+ Open a new terminal so the PATH refreshes. azup refreshes PATH between steps, but your already-open shell can't be updated from the outside.
332
+ </details>
333
+
334
+ <details>
335
+ <summary><b><code>azup self-update</code> says I'm on the latest version right after a release</b></summary>
336
+
337
+ GitHub caches raw files for a few minutes. Give it five, or use `pipx upgrade azup` if you installed with pipx.
338
+ </details>
339
+
340
+ ## Security
341
+
342
+ azup runs package managers on your machine, so it's built to be inspectable and opt-in: it shows a plan before changing anything, never uses `sudo` or trusts a Homebrew tap without asking, has no telemetry, and anything that touches your shell profile or schedules a job is optional and reversible. The repository itself is locked down (protected `main` and tags, immutable releases, CI actions pinned to commit hashes, secret scanning with push protection, Dependabot, CodeQL). Details and how to report a vulnerability privately: [SECURITY.md](SECURITY.md).
343
+
344
+ ## Contributing
345
+
346
+ PRs welcome (see [CONTRIBUTING.md](CONTRIBUTING.md)), especially for tools azup doesn't know yet. Adding one is a single entry in `CATALOG`:
347
+
348
+ ```python
349
+ Tool("azcopy", "AzCopy", "CLI", "pkg", "fast blob/file transfer",
350
+ brew="azcopy", winget="Microsoft.Azure.AZCopy.10", cmd="azcopy"),
351
+ ```
352
+
353
+ The animated SVGs in this README are generated (no screen recorder was harmed):
354
+
355
+ ```sh
356
+ python assets/make_assets.py
357
+ ```
358
+
359
+ CI smoke-tests Windows, macOS and Linux on every push. Release notes live in [CHANGELOG.md](CHANGELOG.md).
360
+
361
+ ## License
362
+
363
+ MIT – see [LICENSE](LICENSE). Go forth and `az` responsibly.
364
+
365
+ <sub>azup is an independent open-source project and is not affiliated with or endorsed by Microsoft. Azure and PowerShell are trademarks of Microsoft Corporation; Azzy is an original drawing, not the official Azure logo.</sub>
@@ -0,0 +1,7 @@
1
+ azup.py,sha256=CydjVDfbVwO-lxAEtUdPrMAxvmz9klrkXINlqNzPMr8,119189
2
+ azup_cli-2.7.1.dist-info/licenses/LICENSE,sha256=iofHuhi63tA0H22trcKCYFvue9ZbfuAJaqm5aZGdkvI,1074
3
+ azup_cli-2.7.1.dist-info/METADATA,sha256=SX0a-sesgnWDtlxqy-7pz40Xyx4uQh46D2TwfzAcWx0,18047
4
+ azup_cli-2.7.1.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
5
+ azup_cli-2.7.1.dist-info/entry_points.txt,sha256=2Qr-sYk4PJ-ASgAO4dGshB8bs9ptO0d67v5b9VAyqj8,35
6
+ azup_cli-2.7.1.dist-info/top_level.txt,sha256=zmo0p2qXGK0rQiYMzgF01XTRW42mBE48MQbV6Jqrpjc,5
7
+ azup_cli-2.7.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.2.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ azup = azup:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 azup contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ azup