azure-deploy-cli 1.0.0__tar.gz → 1.0.2__tar.gz

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.
Files changed (64) hide show
  1. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/.github/workflows/1-3-release.yaml +5 -6
  2. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/.github/workflows/2-build.yaml +6 -2
  3. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/CHANGELOG.md +10 -0
  4. azure_deploy_cli-1.0.2/CONTRIBUTING.md +163 -0
  5. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/Makefile +10 -11
  6. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/PKG-INFO +26 -58
  7. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/README.md +6 -37
  8. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/pyproject.toml +26 -8
  9. azure_deploy_cli-1.0.2/setup.sh +35 -0
  10. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/_version.py +3 -3
  11. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/aca/bash/aca-cert/create.sh +2 -1
  12. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli.egg-info/PKG-INFO +26 -58
  13. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli.egg-info/SOURCES.txt +2 -2
  14. azure_deploy_cli-1.0.2/src/azure_deploy_cli.egg-info/requires.txt +20 -0
  15. azure_deploy_cli-1.0.2/uv.lock +1463 -0
  16. azure_deploy_cli-1.0.0/requirements-dev.txt +0 -10
  17. azure_deploy_cli-1.0.0/requirements.txt +0 -8
  18. azure_deploy_cli-1.0.0/setup.sh +0 -52
  19. azure_deploy_cli-1.0.0/src/azure_deploy_cli.egg-info/requires.txt +0 -20
  20. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/.github/dependabot.yml +0 -0
  21. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/.github/workflows/1-1-pr-build-check.yaml +0 -0
  22. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/.github/workflows/1-2-staging.yaml +0 -0
  23. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/.gitignore +0 -0
  24. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/.pre-commit-config.yaml +0 -0
  25. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/LICENSE +0 -0
  26. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/setup.cfg +0 -0
  27. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/__init__.py +0 -0
  28. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/aca/aca_cli.py +0 -0
  29. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/aca/bash/aca-cert/destroy.sh +0 -0
  30. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/aca/deploy_aca.py +0 -0
  31. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/aca/model.py +0 -0
  32. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/aca/yaml_loader.py +0 -0
  33. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/cli.py +0 -0
  34. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/identity/__init__.py +0 -0
  35. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/identity/group.py +0 -0
  36. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/identity/identity_cli.py +0 -0
  37. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/identity/managed_identity.py +0 -0
  38. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/identity/models.py +0 -0
  39. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/identity/py.typed +0 -0
  40. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/identity/role.py +0 -0
  41. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/identity/service_principal.py +0 -0
  42. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/py.typed +0 -0
  43. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/utils/__init__.py +0 -0
  44. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/utils/azure_cli.py +0 -0
  45. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/utils/docker.py +0 -0
  46. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/utils/env.py +0 -0
  47. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/utils/key_vault.py +0 -0
  48. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/utils/logging.py +0 -0
  49. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli/utils/py.typed +0 -0
  50. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli.egg-info/dependency_links.txt +0 -0
  51. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli.egg-info/entry_points.txt +0 -0
  52. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/src/azure_deploy_cli.egg-info/top_level.txt +0 -0
  53. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/__init__.py +0 -0
  54. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/fixtures/.env.example +0 -0
  55. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/identity/__init__.py +0 -0
  56. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/identity/test_models.py +0 -0
  57. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/roles-config.json +0 -0
  58. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/test.sh +0 -0
  59. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/test_aca_cli.py +0 -0
  60. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/test_deploy_aca.py +0 -0
  61. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/test_env.py +0 -0
  62. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/test_package.py +0 -0
  63. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/test_probe_config.py +0 -0
  64. {azure_deploy_cli-1.0.0 → azure_deploy_cli-1.0.2}/tests/test_retag_image.py +0 -0
@@ -61,16 +61,15 @@ jobs:
61
61
  uses: actions/setup-python@v6
62
62
  with:
63
63
  python-version: '3.11'
64
- cache: 'pip'
65
64
 
66
- - name: Install build dependencies
67
- run: |
68
- python -m pip install --upgrade pip
69
- pip install build
65
+ - name: Install uv
66
+ uses: astral-sh/setup-uv@v3
67
+ with:
68
+ enable-cache: true
70
69
 
71
70
  - name: Build package
72
71
  run: |
73
- python -m build
72
+ uv build
74
73
 
75
74
  - name: Publish package distributions to PyPI
76
75
  uses: pypa/gh-action-pypi-publish@release/v1
@@ -15,10 +15,14 @@ jobs:
15
15
  uses: actions/setup-python@v6
16
16
  with:
17
17
  python-version: '3.11'
18
- cache: 'pip'
18
+
19
+ - name: Install uv
20
+ uses: astral-sh/setup-uv@v3
21
+ with:
22
+ enable-cache: true
19
23
 
20
24
  - name: Install dependencies
21
- run: make install-dev
25
+ run: source setup.sh --install
22
26
 
23
27
  - name: Lint
24
28
  run: make lint
@@ -1,3 +1,13 @@
1
+ ## [1.0.2] - 2026-01-29
2
+
3
+ ### 🐛 Bug Fixes
4
+
5
+ - Update certificate validation method to TXT (#34)
6
+ ## [1.0.1] - 2026-01-18
7
+
8
+ ### ⚙️ Miscellaneous Tasks
9
+
10
+ - Use uv (#29)
1
11
  ## [1.0.0] - 2026-01-09
2
12
 
3
13
  ### 🚀 Features
@@ -0,0 +1,163 @@
1
+ # Contributing to Azure Deploy CLI
2
+
3
+ ## Prerequisites
4
+
5
+ - Python 3.11 or higher
6
+ - `uv` (Python package manager) - [Install uv](https://docs.astral.sh/uv/getting-started/installation/)
7
+
8
+ ## Development Setup
9
+
10
+ **Create and activate a virtual environment:**
11
+
12
+ ```bash
13
+ source setup.sh -i
14
+ ```
15
+
16
+ This will:
17
+ - Create a `.venv` virtual environment using `uv` with Python 3.11
18
+ - Install all dependencies (base + dev)
19
+ - Print activation instructions
20
+
21
+ **Manual setup without setup.sh:**
22
+
23
+ ```bash
24
+ uv venv -p 3.11 .venv
25
+ source .venv/bin/activate
26
+ uv sync --all-extras
27
+ ```
28
+
29
+ ## Managing Dependencies
30
+
31
+ This project uses `uv` for dependency management with pinned versions in `pyproject.toml` for reproducibility.
32
+
33
+ ### Tips for pip users transitioning to uv
34
+
35
+ | Task | pip | uv |
36
+ |------|-----|-----|
37
+ | **Install dependencies** | `pip install -r requirements.txt` | `uv sync` |
38
+ | **Add a package** | `pip install package-name` | `uv pip install package-name` |
39
+ | **Create venv** | `python -m venv venv` | `uv venv` |
40
+ | **Freeze dependencies** | `pip freeze > requirements.txt` | `uv pip freeze` or `uv.lock` |
41
+ | **Update lock file** | Manual via pip freeze | `uv sync` (automatic) |
42
+ | **Specify Python version** | N/A | `uv venv -p 3.11` |
43
+ | **Install dev deps** | `pip install -r requirements-dev.txt` | `uv sync --all-extras` |
44
+
45
+ ### Adding New Dependencies
46
+
47
+ ```bash
48
+ # Add to production dependencies
49
+ uv pip install package-name
50
+
51
+ # Add to dev dependencies
52
+ uv pip install --group dev package-name
53
+
54
+ # Update lock file and sync
55
+ uv sync
56
+ ```
57
+
58
+ Then update `pyproject.toml` to include the new dependency with its pinned version (run `uv pip freeze` to get the exact version).
59
+
60
+ ## Build and Test Commands
61
+
62
+ ```bash
63
+ make install-dev # Install with dev tools
64
+ make build # Run lint + type-check + test
65
+ make lint # Code linting with ruff
66
+ make format # Auto-format code
67
+ make type-check # Type checking with mypy
68
+ make test # Run tests with pytest
69
+ make test-cov # Run tests with coverage report
70
+ make clean # Remove build artifacts
71
+ ```
72
+
73
+ ## Version Management and Changelog
74
+
75
+ This project uses a dual-tool approach for versioning and releases:
76
+
77
+ - **[setuptools-scm](https://setuptools-scm.readthedocs.io/)** - Automatic versioning based on git tags (dynamic at build time)
78
+ - **[commitizen](https://commitizen-tools.github.io/commitizen/)** - Version bumping and tagging with semantic versioning
79
+ - **[git-cliff](https://git-cliff.org/)** - Automatic changelog generation from conventional commits
80
+
81
+ ### Release Workflow
82
+
83
+ 1. **Create a commit** using [Conventional Commits](https://www.conventionalcommits.org/) format (e.g., `feat: add feature`, `fix: resolve bug`)
84
+ - Optionally use `make commit` for interactive conventional commit creation with `commitizen`
85
+ 2. **git-cliff** automatically generates changelog from commits since last tag
86
+ 3. **commitizen** bumps version and creates git tag
87
+ 4. **New version is committed** alongside updated CHANGELOG
88
+ 5. **Git tag** triggers PyPI publishing and GitHub Release
89
+
90
+ **No manual version or changelog updates are needed** — all are generated automatically.
91
+
92
+ ### Commit Convention
93
+
94
+ Use [Conventional Commits](https://www.conventionalcommits.org/) format:
95
+
96
+ ```
97
+ <type>(<scope>): <subject>
98
+
99
+ <body>
100
+
101
+ <footer>
102
+ ```
103
+
104
+ **Type:** `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `chore`
105
+
106
+ **Examples:**
107
+ - `feat: add support for cosmos-db roles`
108
+ - `fix: correct azure identity authentication`
109
+ - `docs: update ACA deployment example`
110
+ - `chore: upgrade dependencies`
111
+
112
+ ### Making a Release
113
+
114
+ ```bash
115
+ # Ensure all changes are committed
116
+ git status
117
+
118
+ # Create a conventional commit
119
+ make commit
120
+
121
+ # Commitizen will:
122
+ # - Bump version (major/minor/patch)
123
+ # - Create git tag
124
+ # - Update CHANGELOG
125
+ # - Commit changes
126
+
127
+ # Push changes and tag
128
+ git push origin main --tags
129
+ ```
130
+
131
+ The CI/CD pipeline will automatically:
132
+ - Build the package
133
+ - Run tests
134
+ - Publish to PyPI
135
+ - Create a GitHub Release
136
+
137
+ ## Pre-commit Hooks
138
+
139
+ Pre-commit hooks are automatically installed during development setup and enforce code quality standards:
140
+
141
+ ```bash
142
+ # Manually run pre-commit on all files
143
+ pre-commit run --all-files
144
+
145
+ # Run specific hook
146
+ pre-commit run ruff --all-files
147
+ ```
148
+
149
+ ## Scripting and Output Handling
150
+
151
+ This CLI is designed for both interactive use and automated scripting. To support this, it separates output streams:
152
+
153
+ - **`stderr`**: All human-readable logs, progress indicators, and error messages
154
+ - **`stdout`**: All machine-readable output (e.g., revision names, IDs)
155
+
156
+ When developing features that produce output:
157
+ - Use `sys.stderr` for logging and user-facing messages
158
+ - Use `sys.stdout` for machine-readable output only
159
+ - This allows scripts to cleanly capture output while still seeing logs
160
+
161
+ ## License
162
+
163
+ Mozilla Public License 2.0 - See LICENSE file for details
@@ -18,34 +18,33 @@ help:
18
18
  @echo " build Run linting, type checking, and tests"
19
19
 
20
20
  setup-hooks:
21
- pre-commit install
22
- pre-commit install --hook-type commit-msg
21
+ uv run pre-commit install
22
+ uv run pre-commit install --hook-type commit-msg
23
23
 
24
24
  install:
25
- pip install .
26
- $(MAKE) setup-hooks
25
+ uv sync
27
26
 
28
27
  install-dev:
29
- pip install -e ".[dev]"
28
+ uv sync --all-extras
30
29
  $(MAKE) setup-hooks
31
30
 
32
31
  commit:
33
- cz commit
32
+ uv run cz commit
34
33
 
35
34
  lint:
36
- ruff check src/ tests/ 2>/dev/null || echo "No issues found"
35
+ uv run ruff check src/ tests/ 2>/dev/null || echo "No issues found"
37
36
 
38
37
  format:
39
- ruff format src/ tests/
38
+ uv run ruff format src/ tests/
40
39
 
41
40
  type-check:
42
- mypy src/azure_deploy_cli
41
+ uv run mypy src/azure_deploy_cli
43
42
 
44
43
  test:
45
- pytest tests/ -v
44
+ uv run pytest tests/ -v
46
45
 
47
46
  test-cov:
48
- pytest tests/ -v --cov=src/azure_deploy_cli --cov-report=html --cov-report=term-missing
47
+ uv run pytest tests/ -v --cov=src/azure_deploy_cli --cov-report=html --cov-report=term-missing
49
48
 
50
49
  clean:
51
50
  find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: azure-deploy-cli
3
- Version: 1.0.0
3
+ Version: 1.0.2
4
4
  Summary: Python CLI for Azure deployment automation - identity, roles, and container apps management
5
5
  Author-email: decewei <celinew1221@gmail.com>
6
6
  License: Mozilla Public License Version 2.0
@@ -386,76 +386,58 @@ Classifier: Intended Audience :: Developers
386
386
  Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
387
387
  Classifier: Natural Language :: English
388
388
  Classifier: Programming Language :: Python :: 3
389
- Classifier: Programming Language :: Python :: 3.10
390
389
  Classifier: Programming Language :: Python :: 3.11
391
390
  Classifier: Programming Language :: Python :: 3.12
392
- Requires-Python: >=3.10
391
+ Requires-Python: >=3.11
393
392
  Description-Content-Type: text/markdown
394
393
  License-File: LICENSE
395
- Requires-Dist: azure-identity>=1.14.0
396
- Requires-Dist: azure-mgmt-appcontainers
397
- Requires-Dist: azure-mgmt-authorization
398
- Requires-Dist: azure-mgmt-keyvault
399
- Requires-Dist: azure-mgmt-msi
400
- Requires-Dist: python-dotenv>=1.0.0
401
- Requires-Dist: pydantic>=2.0.0
402
- Requires-Dist: pyyaml>=6.0
394
+ Requires-Dist: azure-identity==1.25.1
395
+ Requires-Dist: azure-mgmt-appcontainers==4.0.0
396
+ Requires-Dist: azure-mgmt-authorization==4.0.0
397
+ Requires-Dist: azure-mgmt-keyvault==13.0.0
398
+ Requires-Dist: azure-mgmt-msi==7.1.0
399
+ Requires-Dist: python-dotenv==1.2.1
400
+ Requires-Dist: pydantic==2.12.5
401
+ Requires-Dist: PyYAML==6.0.3
403
402
  Provides-Extra: dev
404
- Requires-Dist: ruff>=0.1.0; extra == "dev"
405
- Requires-Dist: mypy>=1.7.0; extra == "dev"
406
- Requires-Dist: pytest>=7.0; extra == "dev"
407
- Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
408
- Requires-Dist: coverage>=7.3.0; extra == "dev"
409
- Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
410
- Requires-Dist: commitizen>=3.0.0; extra == "dev"
411
- Requires-Dist: pre-commit>=3.0.0; extra == "dev"
412
- Requires-Dist: types-setuptools; extra == "dev"
413
- Requires-Dist: types-PyYAML; extra == "dev"
403
+ Requires-Dist: ruff==0.14.10; extra == "dev"
404
+ Requires-Dist: mypy==1.19.1; extra == "dev"
405
+ Requires-Dist: pytest==9.0.2; extra == "dev"
406
+ Requires-Dist: pytest-asyncio==1.3.0; extra == "dev"
407
+ Requires-Dist: coverage==7.13.1; extra == "dev"
408
+ Requires-Dist: pytest-cov==7.0.0; extra == "dev"
409
+ Requires-Dist: commitizen==4.11.0; extra == "dev"
410
+ Requires-Dist: pre-commit==4.1.0; extra == "dev"
411
+ Requires-Dist: types-setuptools==80.9.0.20251223; extra == "dev"
412
+ Requires-Dist: types-PyYAML==6.0.12.20250915; extra == "dev"
414
413
  Dynamic: license-file
415
414
 
416
415
  # Azure Deploy CLI
417
416
 
418
417
  Python CLI for Azure deployment automation - manage identities, roles, and Container Apps deployments.
419
418
 
420
- ## Version Management and Changelog
421
-
422
- This project uses a dual-tool approach:
423
-
424
- - **[setuptools-scm](https://setuptools-scm.readthedocs.io/)** - Automatic versioning based on git tags (dynamic at build time)
425
- - **[commitizen](https://commitizen-tools.github.io/commitizen/)** - Version bumping and tagging with semantic versioning
426
- - **[git-cliff](https://git-cliff.org/)** - Automatic changelog generation from conventional commits
427
-
428
- **Release workflow:**
429
- 1. git-cliff generates changelog from commits since last tag
430
- 2. commitizen bumps version and creates git tag
431
- 3. New version is committed alongside updated changelog
432
- 4. Tag triggers PyPI publishing and GitHub Release
433
-
434
- No manual version or changelog updates are needed.
435
-
436
419
  ## Quick Start
437
420
 
438
421
  **Install for development:**
439
422
 
440
423
  ```bash
441
424
  cd /path/to/azure-deploy-cli
442
- pip install -e ".[dev]"
425
+ source setup.sh -i
443
426
  azd --help
444
427
  ```
445
428
 
446
429
  **Use in another project:**
447
430
 
448
431
  ```bash
449
- pip install -e /path/to/scripts
432
+ pip install azure-deploy-cli
450
433
  ```
451
434
 
452
435
  ## Installation
453
436
 
454
- | Method | Command |
455
- |--------|----------|
456
- | Local development | `pip install -e ".[dev]"` |
457
- | Local changes | `pip install -e /path/to/azure-deploy-cli` |
458
- | From PyPI | `pip install azure-deploy-cli` |
437
+ | Method | Command |
438
+ | ------------------- | ----------------------------- |
439
+ | Local development | `source setup.sh -i` |
440
+ | From PyPI | `pip install azure-deploy-cli`|
459
441
 
460
442
  ## CLI Commands
461
443
 
@@ -656,20 +638,6 @@ azd create-and-assign \
656
638
  --print
657
639
  ```
658
640
 
659
- ## Development
660
-
661
- ```bash
662
- make install-dev # Install with dev tools
663
- make build # Run lint + type-check + test
664
- make lint # Code linting with ruff
665
- make format # Auto-format code
666
- make type-check # Type checking with mypy
667
- make test # Run tests with pytest
668
- make clean # Remove build artifacts
669
- ```
670
-
671
- Commit using [Conventional Commits](https://www.conventionalcommits.org/) format (e.g., `feat: add feature`, `fix: resolve bug`)
672
-
673
641
  ## Scripting and Output Handling
674
642
 
675
643
  This CLI is designed for both interactive use and automated scripting. To support this, it follows the standard practice of separating output streams:
@@ -2,45 +2,28 @@
2
2
 
3
3
  Python CLI for Azure deployment automation - manage identities, roles, and Container Apps deployments.
4
4
 
5
- ## Version Management and Changelog
6
-
7
- This project uses a dual-tool approach:
8
-
9
- - **[setuptools-scm](https://setuptools-scm.readthedocs.io/)** - Automatic versioning based on git tags (dynamic at build time)
10
- - **[commitizen](https://commitizen-tools.github.io/commitizen/)** - Version bumping and tagging with semantic versioning
11
- - **[git-cliff](https://git-cliff.org/)** - Automatic changelog generation from conventional commits
12
-
13
- **Release workflow:**
14
- 1. git-cliff generates changelog from commits since last tag
15
- 2. commitizen bumps version and creates git tag
16
- 3. New version is committed alongside updated changelog
17
- 4. Tag triggers PyPI publishing and GitHub Release
18
-
19
- No manual version or changelog updates are needed.
20
-
21
5
  ## Quick Start
22
6
 
23
7
  **Install for development:**
24
8
 
25
9
  ```bash
26
10
  cd /path/to/azure-deploy-cli
27
- pip install -e ".[dev]"
11
+ source setup.sh -i
28
12
  azd --help
29
13
  ```
30
14
 
31
15
  **Use in another project:**
32
16
 
33
17
  ```bash
34
- pip install -e /path/to/scripts
18
+ pip install azure-deploy-cli
35
19
  ```
36
20
 
37
21
  ## Installation
38
22
 
39
- | Method | Command |
40
- |--------|----------|
41
- | Local development | `pip install -e ".[dev]"` |
42
- | Local changes | `pip install -e /path/to/azure-deploy-cli` |
43
- | From PyPI | `pip install azure-deploy-cli` |
23
+ | Method | Command |
24
+ | ------------------- | ----------------------------- |
25
+ | Local development | `source setup.sh -i` |
26
+ | From PyPI | `pip install azure-deploy-cli`|
44
27
 
45
28
  ## CLI Commands
46
29
 
@@ -241,20 +224,6 @@ azd create-and-assign \
241
224
  --print
242
225
  ```
243
226
 
244
- ## Development
245
-
246
- ```bash
247
- make install-dev # Install with dev tools
248
- make build # Run lint + type-check + test
249
- make lint # Code linting with ruff
250
- make format # Auto-format code
251
- make type-check # Type checking with mypy
252
- make test # Run tests with pytest
253
- make clean # Remove build artifacts
254
- ```
255
-
256
- Commit using [Conventional Commits](https://www.conventionalcommits.org/) format (e.g., `feat: add feature`, `fix: resolve bug`)
257
-
258
227
  ## Scripting and Output Handling
259
228
 
260
229
  This CLI is designed for both interactive use and automated scripting. To support this, it follows the standard practice of separating output streams:
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
  name = "azure-deploy-cli"
7
7
  description = "Python CLI for Azure deployment automation - identity, roles, and container apps management"
8
8
  readme = "README.md"
9
- requires-python = ">=3.10"
9
+ requires-python = ">=3.11"
10
10
  license = {file = "LICENSE"}
11
11
  authors = [
12
12
  {name = "decewei", email = "celinew1221@gmail.com"}
@@ -18,18 +18,36 @@ classifiers = [
18
18
  "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)",
19
19
  "Natural Language :: English",
20
20
  "Programming Language :: Python :: 3",
21
- "Programming Language :: Python :: 3.10",
22
21
  "Programming Language :: Python :: 3.11",
23
22
  "Programming Language :: Python :: 3.12",
24
23
  ]
25
24
 
26
- dynamic = ["version", "dependencies", "optional-dependencies"]
27
-
28
- [tool.setuptools.dynamic]
29
- dependencies = { file = ["requirements.txt"] }
25
+ dynamic = ["version"]
26
+
27
+ dependencies = [
28
+ "azure-identity==1.25.1",
29
+ "azure-mgmt-appcontainers==4.0.0",
30
+ "azure-mgmt-authorization==4.0.0",
31
+ "azure-mgmt-keyvault==13.0.0",
32
+ "azure-mgmt-msi==7.1.0",
33
+ "python-dotenv==1.2.1",
34
+ "pydantic==2.12.5",
35
+ "PyYAML==6.0.3",
36
+ ]
30
37
 
31
- [tool.setuptools.dynamic.optional-dependencies]
32
- dev = { file = ["requirements-dev.txt"] }
38
+ [project.optional-dependencies]
39
+ dev = [
40
+ "ruff==0.14.10",
41
+ "mypy==1.19.1",
42
+ "pytest==9.0.2",
43
+ "pytest-asyncio==1.3.0",
44
+ "coverage==7.13.1",
45
+ "pytest-cov==7.0.0",
46
+ "commitizen==4.11.0",
47
+ "pre-commit==4.1.0",
48
+ "types-setuptools==80.9.0.20251223",
49
+ "types-PyYAML==6.0.12.20250915",
50
+ ]
33
51
 
34
52
  [project.urls]
35
53
  Homepage = "https://github.com/decewei/azure-deploy-cli"
@@ -0,0 +1,35 @@
1
+ #!/bin/bash
2
+
3
+ ENV_DIR=".venv"
4
+ PROD=false
5
+
6
+ while [[ "$#" -gt 0 ]]; do
7
+ case $1 in
8
+ -i|--install) INSTALL_DEPS=true ;;
9
+ -p|--prod) PROD=true ;;
10
+ *) echo "Unknown parameter: $1"; exit 1 ;;
11
+ esac
12
+ shift
13
+ done
14
+
15
+ # Create virtual environment with uv (Python 3.11 specified)
16
+ if [ ! -d "$ENV_DIR" ]; then
17
+ echo "Creating virtual environment '$ENV_DIR' with uv..."
18
+ uv venv -p 3.11 "$ENV_DIR"
19
+ echo "Created virtual env $ENV_DIR"
20
+ fi
21
+
22
+ # Activate the virtual environment
23
+ source "$ENV_DIR/bin/activate"
24
+
25
+ if [ "$INSTALL_DEPS" = true ]; then
26
+ if [ "$PROD" = true ]; then
27
+ echo "Installing production dependencies with uv..."
28
+ make install
29
+ else
30
+ echo "Installing dependencies with uv..."
31
+ make install-dev
32
+ fi
33
+ fi
34
+
35
+ echo "Type \`deactivate\` to exit the virtual environment."
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.0.0'
32
- __version_tuple__ = version_tuple = (1, 0, 0)
31
+ __version__ = version = '1.0.2'
32
+ __version_tuple__ = version_tuple = (1, 0, 2)
33
33
 
34
- __commit_id__ = commit_id = 'g2aebd8fbb'
34
+ __commit_id__ = commit_id = 'ga56b006bf'
@@ -88,6 +88,7 @@ bind() {
88
88
  # use dig to verify the asuid txt record exists on the DNS host
89
89
  # azure requires this to exist prior to adding the domain
90
90
  # azure's dns can also be slow, so best to check propagation
91
+ # you need TXT record with verification code added to your dns manager
91
92
  tries=0
92
93
  until [ "$tries" -ge 12 ]; do
93
94
  [[ ! -z $(dig @8.8.8.8 txt asuid.$CUSTOM_DOMAIN +short) ]] && break
@@ -136,7 +137,7 @@ bind() {
136
137
  -g $ENV_RESOURCE_GROUP \
137
138
  -n $CONTAINER_APP_ENV_NAME \
138
139
  --hostname $CUSTOM_DOMAIN \
139
- --validation-method CNAME \
140
+ --validation-method TXT \
140
141
  --query "id" \
141
142
  --output tsv
142
143
  )