{"id":31914690,"url":"https://github.com/zevolution/az-login-automation","last_synced_at":"2025-10-13T19:25:28.531Z","repository":{"id":316386248,"uuid":"1063148045","full_name":"zevolution/az-login-automation","owner":"zevolution","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-24T08:37:43.000Z","size":4,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-24T10:32:44.515Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zevolution.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-24T08:25:53.000Z","updated_at":"2025-09-24T08:37:47.000Z","dependencies_parsed_at":"2025-09-25T23:00:21.658Z","dependency_job_id":null,"html_url":"https://github.com/zevolution/az-login-automation","commit_stats":null,"previous_names":["zevolution/az-login-automation"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/zevolution/az-login-automation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevolution%2Faz-login-automation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevolution%2Faz-login-automation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevolution%2Faz-login-automation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevolution%2Faz-login-automation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zevolution","download_url":"https://codeload.github.com/zevolution/az-login-automation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevolution%2Faz-login-automation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279016899,"owners_count":26085886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-13T19:25:26.969Z","updated_at":"2025-10-13T19:25:28.525Z","avatar_url":"https://github.com/zevolution.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://d1rckomkn4u8p2.cloudfront.net/projects/snoke-bot/public/images/az-logo-just-letter-a.png\" alt=\"Azure-Logo-Just-Letter-A\" width=\"175\" height=\"175\"\u003e\n\u003ch1 align=\"center\"\u003eAzure Device Code Login Automation\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Shell Script](https://img.shields.io/badge/Shell-Bash-4EAA25.svg)](https://www.gnu.org/software/bash/)\n[![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Linux-blue.svg)]()\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/zevolution/az-login-automation/pulls)\n\n*Streamline your Azure CLI authentication with automatic device code handling and tenant selection*\n\n[Features](#features) • [Installation](#installation) • [Usage](#usage) • [Configuration](#️configuration)\n\n\u003c/div\u003e\n\n---\n\n## 📋 Table of Contents\n\n- [About](#about)\n- [Features](#features)\n- [Prerequisites](#prerequisites)  \n- [Installation](#installation)\n- [Usage](#usage)\n- [Configuration](#️configuration)\n- [Improve usability with Raycast](#improve-usability-with-raycast)\n- [How It Works](#how-it-works)\n- [Troubleshooting](#troubleshooting)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n\u003cdiv id=\"about\"\u003e\n\n## 🎯 About\n\n\u003c/div\u003e\n\nThe **Azure Device Code Login Automation** script transforms the Azure CLI device code authentication experience from a manual, multi-step process into a seamless, automated workflow.\n\nInstead of manually copying device codes, opening browsers, and selecting tenants every time, this script:\n- ✅ Automatically extracts and copies device codes to your clipboard\n- ✅ Opens Firefox with your specified container directly to the login page\n- ✅ Auto-selects your preferred tenant/subscription\n- ✅ Provides clean, informative output\n\n**Perfect for developers, DevOps engineers, and Azure administrators who authenticate frequently.**\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv id=\"features\"\u003e\n\n## ✨ Features\n\n\u003c/div\u003e\n\n### 🔄 **Automated Workflow**\n- **Device Code Extraction**: Automatically detects and copies Azure device codes\n- **Browser Integration**: Opens Firefox with specified container directly to login page\n- **Tenant Auto-Selection**: Pre-configures your preferred tenant/subscription choice\n\n### 🎛️ **Flexible Usage Modes**\n- **Automatic Mode**: `az-device-login 5` - Silent execution with auto-selection\n- **Interactive Mode**: `az-device-login` - Full visibility with manual selection\n\n### 🔧 **Easy Configuration**\n- **Configurable Container**: Easily change Firefox container name\n- **Parameterized Selection**: Pass tenant choice as command argument\n- **Environment Detection**: Auto-detects available system utilities\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv id=\"prerequisites\"\u003e\n\n## 📋 Prerequisites\n\n\u003c/div\u003e\n\n### Required\n- **Azure CLI** (`az`) - [Install Guide](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli)\n- **Expect** - Process automation tool\n- **Firefox** with Container support (for automatic browser opening)\n\n### Install Expect\n```bash\n# macOS\nbrew install expect\n\n# Ubuntu/Debian  \nsudo apt-get install expect\n\n# CentOS/RHEL\nsudo yum install expect\n```\n\n### Clipboard Support (Auto-detected)\n- **macOS**: `pbcopy` (built-in)\n- **Linux**: `xclip` or `xsel`\n- **Windows/WSL**: `clip.exe`\n\n### Mozilla Firefox\n- **Firefox Browser**: https://www.firefox.com/en-US/\n- **Multi-Account Container Extension**: [[Github](https://github.com/mozilla/multi-account-containers)] [[Mozilla Add-Ons](https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/)] - This extension derives from the concept in Firefox called \"[Contextual Identities](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/contextualIdentities)\" which assumes that users browsing the surface web can have more than one identity.\n- **Open external links in a container**: [[Github](https://github.com/honsiorovskyi/open-url-in-container)] [[Mozilla Add-Ons](https://addons.mozilla.org/en-US/firefox/addon/open-url-in-container)] - This guy works with \"[protocol_handlers](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/protocol_handlers)\" that is the main responsible by knows how to handle particular types of links like \"magnet:\" used by apps like BitTorrent or even \"mailto:\" used by email clients. In this particular case they allow-us to use URL to call \"ext+container:name=ContainerName\", translating in a command to open the desired container(or also use terminal firefox-container CLI)\n\n\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv id=\"installation\"\u003e\n\n## 🚀 Installation\n\n\u003c/div\u003e\n\n### Method 1: Direct Download\n```bash\n# Download the script\ncurl -O https://raw.githubusercontent.com/yourusername/azure-device-login/main/az-device-login.sh\n\n# Make executable\nchmod +x az-device-login.sh\n\n# Move to PATH (optional)\nsudo mv az-device-login.sh /usr/local/bin/az-device-login\n```\n\n### Method 2: Git Clone\n```bash\n# Clone repository\ngit clone https://github.com/yourusername/azure-device-login.git\ncd azure-device-login\n\n# Make executable\nchmod +x az-device-login.sh\n\n# Create symlink (optional)\nsudo ln -s \"$(pwd)/az-device-login.sh\" /usr/local/bin/az-device-login\n```\n\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv id=\"usage\"\u003e\n\n## 💻 Usage\n\n\u003c/div\u003e\n\n### Basic Usage\n\n#### Automatic Mode (Recommended)\n```bash\n# Auto-select tenant/subscription option 5\naz-device-login 5\n```\n\n**Output:**\n```\nStarting Azure device code authentication...\n\n[SCRIPT] Device code detected: ABC123DEF\n[SCRIPT] ✓ Device code copied to clipboard!\n[SCRIPT] Opening Firefox container...\n[SCRIPT] Firefox opened at: https://microsoft.com/devicelogin\n[SCRIPT] Will auto-select option [5] after authentication...\n\n[SCRIPT] Auto-selecting option: [5]\n\n[SCRIPT] ✓ Login completed successfully!\n```\n\n#### Interactive Mode  \n```bash\n# Full manual control\naz-device-login\n```\n\n**Output:**\n```\nStarting Azure device code authentication...\n\n[SCRIPT] Device code detected: ABC123DEF\n[SCRIPT] ✓ Device code copied to clipboard!\n[SCRIPT] Opening Firefox container...\n[SCRIPT] Firefox opened at: https://microsoft.com/devicelogin\n\n[Shows full tenant selection table for manual choice]\n\n[SCRIPT] ✓ Login completed successfully!\n```\n\n### Demonstration\n\n*GIF demonstration under construction: coming soon! ...* 🚧🛠️\n\u003cimg src=\"https://d1rckomkn4u8p2.cloudfront.net/projects/snoke-bot/public/images/simple-loading.gif\" alt=\"Simple-Loading-GIF\" width=\"15\" height=\"15\"\u003e\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv id=\"️configuration\"\u003e\n\n## ⚙️ Configuration\n\n\u003c/div\u003e\n\n### Main Variables\nEdit the following variables based on your environment\n\n```bash\n# This variables is in begin of scripts.sh\n\n# This guy is responsible to store a int with index value of list return by az-login\nTENANT_CHOICE=\n\n# This guy is responsible to store your Mozila Multi-Account Container name\nFIREFOX_CONTAINER_NAME=\n\n# This guy is responsible to store the path where your Mozilla Firefox is installed (just folder)\nFIREFOX_BIN_PATH=\n```\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv id=\"improve-usability-with-raycast\"\u003e\n\n## 🚀 Improve usability with Raycast\n\n\u003c/div\u003e\n\n### What is Raycast?\n\n[Raycast](https://www.raycast.com) is a blazingly fast, extensible launcher and productivity tool for macOS that replaces Spotlight. It provides a clean, powerful interface to search applications, files, and execute custom commands with lightning speed.\n\nKey Raycast features:\n- **⚡ Lightning Fast**: Instant search and command execution\n- **🔧 Extensible**: Rich ecosystem of extensions and custom scripts\n- **⌨️ Keyboard-First**: Navigate everything without touching your mouse\n- **🎨 Beautiful UI**: Clean, modern interface that feels native to macOS\n- **🤖 Smart**: AI-powered features and contextual actions\n\n### Raycast Script Commands\n\nRaycast Script Commands allow you to turn any script into a searchable, executable command within Raycast. Instead of opening Terminal and typing commands, you can:\n\n- **Search and Execute**: Type command name in Raycast launcher\n- **Pass Parameters**: Interactive forms for script arguments\n- **Quick Access**: Assign hotkeys for instant execution\n- **Rich Feedback**: Proper success/error handling with notifications\n\n### Workflow Comparison\n\n#### Traditional Terminal Approach\n```bash\n# Multiple steps, context switching, terminal opening\ncd ~/scripts\n./az-device-login.sh 5\n# Switch to browser, paste code, return to terminal\n```\n\n#### Raycast Integration Approach  \n\n\u003ckbd\u003e⌥\u003c/kbd\u003e + \u003ckbd\u003eSpace\u003c/kbd\u003e → Find Script → Enter Tenant → ✨ Done\n\nAlternative\n\n\u003ckbd\u003eCustom Keyboard Shortcut\u003c/kbd\u003e → ✨ Done\n\n### Benefits \u0026 Tradeoffs\n\n#### ✅ **Benefits**\n- **🔥 Speed**: Instant access without opening Terminal\n- **🎯 Focus**: Stay in your current workflow\n- **📊 Visual Feedback**: Rich notifications and status updates\n- **⌨️ Keyboard-Driven**: Never touch your mouse\n- **🔄 Consistent**: Same interface for all your automation scripts\n- **📱 Modern UX**: Native macOS experience\n\n#### ⚠️ **Tradeoffs**\n- **🍎 macOS Only**: Raycast is exclusively for macOS users\n- **💾 Memory Usage**: Additional app running in background\n- **🔧 Setup Overhead**: Initial configuration required\n- **🔒 Dependency**: Adds another tool to your workflow stack\n- **💰 Premium Features**: Some advanced features require Raycast Pro\n\n#### **Recommendation**\nPerfect for **macOS developers** who value speed and elegant UX. If you're already using Spotlight frequently, Raycast + this script integration will significantly improve your Azure authentication workflow.\n\n*GIF demonstration under construction: coming soon! ...* 🚧🛠️\n\u003cimg src=\"https://d1rckomkn4u8p2.cloudfront.net/projects/snoke-bot/public/images/simple-loading.gif\" alt=\"Simple-Loading-GIF\" width=\"15\" height=\"15\"\u003e\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv id=\"how-it-works\"\u003e\n\n## 🔧 How It Works\n\n\u003c/div\u003e\n\n### Architecture Overview\n\n\n\u003cdetails closed\u003e\n\n   \u003csummary\u003e\n      Click here to expand full architecture diagram\n   \u003c/summary\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n```mermaid\ngraph TD\n    %% Main Entry Point\n    User[👤 User] --\u003e Script[🚀 Main Script\u003cbr/\u003eaz-device-login.sh]\n    \n    %% Initial Setup and Validation\n    Script --\u003e Validate{✅ Validate Prerequisites}\n    Validate --\u003e|❌ Missing| Error1[❌ Exit: Install missing tools]\n    Validate --\u003e|✅ Valid| Setup[🔧 Setup Signal Handlers\u003cbr/\u003e\u0026 Temp Files]\n    \n    %% Parameter Processing\n    Setup --\u003e Param{📝 Parameter Provided?}\n    Param --\u003e|Yes| Auto[🤖 Automatic Mode\u003cbr/\u003eTENANT_CHOICE = N]\n    Param --\u003e|No| Interactive[🎛️ Interactive Mode\u003cbr/\u003eTENANT_CHOICE = \"\"]\n    \n    %% Expect Script Generation\n    Auto --\u003e ExpectGen[📋 Generate Expect Script]\n    Interactive --\u003e ExpectGen\n    \n    %% Core Expect Process\n    ExpectGen --\u003e Expect[🎯 Expect Script\u003cbr/\u003eProcess Controller]\n    Expect --\u003e Spawn[🏗️ spawn az login --use-device-code]\n    \n    %% Device Code Detection Phase\n    Spawn --\u003e Monitor{👁️ Monitor Output}\n    Monitor --\u003e|Device Code Found| Extract[📤 Extract Device Code\u003cbr/\u003eCopy to Clipboard]\n    Monitor --\u003e|Timeout| Timeout[⏱️ Timeout Handler\u003cbr/\u003eSwitch to Manual]\n    \n    %% Browser Integration\n    Extract --\u003e Browser[🦊 Open Firefox Container\u003cbr/\u003ehttps://microsoft.com/devicelogin]\n    \n    %% User Authentication\n    Browser --\u003e UserAuth[🔐 User Pastes Code\u003cbr/\u003e\u0026 Authenticates]\n    \n    %% Tenant Selection Phase\n    UserAuth --\u003e TenantPrompt{🏢 Tenant Selection Prompt}\n    \n    %% Auto vs Manual Selection\n    TenantPrompt --\u003e|Auto Mode| AutoSelect[🤖 Auto-select Tenant\u003cbr/\u003esend TENANT_CHOICE]\n    TenantPrompt --\u003e|Interactive Mode| ManualSelect[👤 User Manual Selection\u003cbr/\u003einteract mode]\n    \n    %% Completion Handling\n    AutoSelect --\u003e Complete[✅ Login Complete\u003cbr/\u003eJSON Response]\n    ManualSelect --\u003e Complete\n    Timeout --\u003e ManualSelect\n    \n    %% Cleanup and Exit\n    Complete --\u003e Cleanup[🧹 Cleanup Temp Files]\n    Cleanup --\u003e Success[🎉 Success Message\u003cbr/\u003eExit 0]\n    \n    %% Error Handling\n    Error1 --\u003e Exit[🚪 Script Exit]\n    \n    %% Signal Handling (CTRL+C)\n    Script -.-\u003e|SIGINT| SigMain[🛑 Main Script Cleanup]\n    Expect -.-\u003e|SIGINT| SigExpect[🛑 Expect Script Cleanup]\n    ManualSelect -.-\u003e|CTRL+C| SigInteract[🛑 Interactive Cleanup]\n    \n    SigMain --\u003e ForceExit[💥 Force Exit 130]\n    SigExpected --\u003e ForceExit\n    SigInteract --\u003e ForceExit\n    \n    %% Styling\n    classDef userAction fill:#e1f5fe,stroke:#01579b,stroke-width:2px\n    classDef processStep fill:#f3e5f5,stroke:#4a148c,stroke-width:2px\n    classDef decision fill:#fff3e0,stroke:#e65100,stroke-width:2px\n    classDef success fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px\n    classDef error fill:#ffebee,stroke:#c62828,stroke-width:2px\n    classDef signal fill:#fce4ec,stroke:#880e4f,stroke-width:2px,stroke-dasharray: 5 5\n    \n    class User,UserAuth,ManualSelect userAction\n    class Script,Setup,ExpectGen,Expect,Spawn,Extract,Browser,AutoSelect,Complete,Cleanup processStep\n    class Validate,Param,Monitor,TenantPrompt decision\n    class Success success\n    class Error1,Timeout,ForceExit error\n    class SigMain,SigExpect,SigInteract signal\n```\n\n\u003c/div\u003e\n\n\u003c/details\u003e\n\n### Execution Flow\n\n1. **Initialization**\n   - Validates prerequisites (Azure CLI, expect)\n   - Sets up signal handlers for cleanup\n   - Creates temporary files\n\n2. **Device Code Phase**\n   - Spawns `az login --use-device-code`\n   - Monitors output for device code patterns\n   - Extracts code and copies to clipboard\n   - Opens Firefox with container\n\n3. **Authentication Phase** \n   - User pastes code in browser\n   - Completes authentication flow\n   - Script waits for tenant selection prompt\n\n4. **Selection Phase**\n   - **Automatic**: Sends predetermined choice\n   - **Interactive**: Hands control to user\n   - Processes selection and completes login\n\n5. **Completion**\n   - Cleans up temporary files\n   - Reports success/failure status\n   - Returns control to shell\n\n### Signal Handling\nThe script implements 3-level SIGINT handling:\n\n- **Main Script Level**: Cleans temporary files\n- **Expect Script Level**: Proper process termination  \n- **Interactive Level**: User can cancel during tenant selection\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv id=\"troubleshooting\"\u003e\n\n## 🐛 Troubleshooting\n\n\u003c/div\u003e\n\n### Common Issues\n\n#### `expect: command not found`\n```bash\n# Install expect\nbrew install expect                   # macOS\nsudo apt-get install expect           # Ubuntu/Debian\nsudo yum install expect               # CentOS/RHEL\n```\n\n#### `az: command not found`\n```bash\n# Install Azure CLI\ncurl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash  # Linux\nbrew install azure-cli                                  # macOS\n```\n\n#### `Firefox doesn't open`\n- Verify Firefox is installed correcly, e.g., `/Applications/Firefox.app/Contents/MacOS/firefox`\n- Check if the specified container exists in Firefox\n- Ensure Firefox Multi-Account Container and OpenExternal Links extension is installed\n\n#### `Device code not detected`\n- Check if the pattern matches your Azure CLI output\n- Verify expect script has proper permissions\n- Try running in interactive mode first\n\n#### `Clipboard not working`\n```bash\n# Install clipboard utilities\nsudo apt-get install xclip      # Linux\nsudo apt-get install xsel       # Linux alternative\n```\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv id=\"contributing\"\u003e\n\n## 🤝 Contributing\n\n\u003c/div\u003e\n\nUnder construction: coming soon! ... 🚧🛠️ \n\u003cimg src=\"https://d1rckomkn4u8p2.cloudfront.net/projects/snoke-bot/public/images/simple-loading.gif\" alt=\"Simple-Loading-GIF\" width=\"15\" height=\"15\"\u003e\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\n---\n\n\u003cdiv id=\"license\"\u003e\n\n## 📄 License\n\n\u003c/div\u003e\n\nThis project is licensed under the MIT License - see the [LICENSE](https://choosealicense.com/licenses/mit/) file for details.\n\n```\nMIT License\n\nCopyright (c) 2025 zevolution\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv id=\"acknowledgements\"\u003e\n\n## 🙏 Acknowledgments\n\n\u003c/div\u003e\n\n- **Azure CLI Team** - For providing the device code authentication flow\n- **Expect Contributors** - For the powerful process automation tool  \n- **Community** - For future feedbacks and suggestions that'll shape this tool\n\n\u003cp align=\"right\"\u003e\n    \u003ca href=\"#top\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/back_to_top-🚀-blue\" alt=\"back to top\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n_⭐ Star this repository if it helped you!_\n\n[Report Bug](https://github.com/zevolution/az-login-automation/issues) • [Request Feature](https://github.com/zevolution/az-login-automation/discussions/categories/ideas) • [Discussions](https://github.com/zevolution/az-login-automation/discussions/categories/q-a)\n\n---\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzevolution%2Faz-login-automation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzevolution%2Faz-login-automation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzevolution%2Faz-login-automation/lists"}