flutter-setup 2.1.0__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 (36) hide show
  1. flutter_setup-2.1.0/LICENSE +21 -0
  2. flutter_setup-2.1.0/PKG-INFO +365 -0
  3. flutter_setup-2.1.0/README.md +320 -0
  4. flutter_setup-2.1.0/flutter_setup/__init__.py +0 -0
  5. flutter_setup-2.1.0/flutter_setup/bootstrap.py +904 -0
  6. flutter_setup-2.1.0/flutter_setup/cicd_generator.py +814 -0
  7. flutter_setup-2.1.0/flutter_setup/cli.py +662 -0
  8. flutter_setup-2.1.0/flutter_setup/config.py +135 -0
  9. flutter_setup-2.1.0/flutter_setup/config_manager.py +159 -0
  10. flutter_setup-2.1.0/flutter_setup/core.py +204 -0
  11. flutter_setup-2.1.0/flutter_setup/exceptions.py +37 -0
  12. flutter_setup-2.1.0/flutter_setup/flutter_manager.py +579 -0
  13. flutter_setup-2.1.0/flutter_setup/platform.py +15 -0
  14. flutter_setup-2.1.0/flutter_setup/prerequisites.py +39 -0
  15. flutter_setup-2.1.0/flutter_setup/prerequisites_linux.py +140 -0
  16. flutter_setup-2.1.0/flutter_setup/prerequisites_macos.py +226 -0
  17. flutter_setup-2.1.0/flutter_setup/project_creator.py +82 -0
  18. flutter_setup-2.1.0/flutter_setup.egg-info/PKG-INFO +365 -0
  19. flutter_setup-2.1.0/flutter_setup.egg-info/SOURCES.txt +34 -0
  20. flutter_setup-2.1.0/flutter_setup.egg-info/dependency_links.txt +1 -0
  21. flutter_setup-2.1.0/flutter_setup.egg-info/entry_points.txt +2 -0
  22. flutter_setup-2.1.0/flutter_setup.egg-info/requires.txt +14 -0
  23. flutter_setup-2.1.0/flutter_setup.egg-info/top_level.txt +1 -0
  24. flutter_setup-2.1.0/pyproject.toml +91 -0
  25. flutter_setup-2.1.0/setup.cfg +4 -0
  26. flutter_setup-2.1.0/tests/test_bootstrap.py +833 -0
  27. flutter_setup-2.1.0/tests/test_cicd_generator.py +349 -0
  28. flutter_setup-2.1.0/tests/test_cli.py +441 -0
  29. flutter_setup-2.1.0/tests/test_config.py +408 -0
  30. flutter_setup-2.1.0/tests/test_config_manager.py +189 -0
  31. flutter_setup-2.1.0/tests/test_core.py +165 -0
  32. flutter_setup-2.1.0/tests/test_exceptions.py +96 -0
  33. flutter_setup-2.1.0/tests/test_flutter_manager.py +501 -0
  34. flutter_setup-2.1.0/tests/test_platform.py +23 -0
  35. flutter_setup-2.1.0/tests/test_prerequisites.py +306 -0
  36. flutter_setup-2.1.0/tests/test_project_creator.py +112 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mark Callen
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,365 @@
1
+ Metadata-Version: 2.4
2
+ Name: flutter-setup
3
+ Version: 2.1.0
4
+ Summary: Flutter development environment setup CLI tool for macOS and Linux
5
+ Author-email: Mark C Allen <mark@markcallen.com>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2026 Mark Callen
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Requires-Python: >=3.12
29
+ Description-Content-Type: text/markdown
30
+ License-File: LICENSE
31
+ Requires-Dist: click>=8.3.2
32
+ Requires-Dist: pyyaml>=6.0.3
33
+ Requires-Dist: rich>=15.0.0
34
+ Requires-Dist: requests>=2.33.1
35
+ Provides-Extra: dev
36
+ Requires-Dist: black>=26.3.1; extra == "dev"
37
+ Requires-Dist: mypy>=1.20.1; extra == "dev"
38
+ Requires-Dist: pre-commit>=4.0.0; extra == "dev"
39
+ Requires-Dist: ruff>=0.15.10; extra == "dev"
40
+ Requires-Dist: pytest>=9.0.3; extra == "dev"
41
+ Requires-Dist: pytest-cov>=7.1.0; extra == "dev"
42
+ Requires-Dist: pytest-mock>=3.15.1; extra == "dev"
43
+ Requires-Dist: types-pyyaml>=6.0.12.20250915; extra == "dev"
44
+ Dynamic: license-file
45
+
46
+ # Flutter Setup CLI
47
+
48
+ A modern Python CLI tool for setting up complete Flutter development environments on macOS and Linux. This tool automates Flutter SDK setup, prerequisite checks, and project bootstrapping with practical defaults.
49
+
50
+ ## Features
51
+
52
+ - 🚀 **Automated Setup**: Complete Flutter development environment setup in minutes
53
+ - 🦋 **Flutter SDK Management**: Install, update, and manage Flutter SDK with multiple channels
54
+ - 🛠️ **Prerequisites Installation**: Platform-aware prerequisite checks and installation flows for macOS and Linux
55
+ - 📱 **Multi-Platform Support**: Create projects for iOS, Android, macOS, Linux, Windows, and Web
56
+ - 🔧 **Development Environment**: Pre-configured VS Code/Cursor settings, testing framework, and CI/CD
57
+ - 🎯 **Best Practices**: Industry-standard project structure with linting, testing, and analysis tools
58
+ - 🧪 **Testing Ready**: Built-in test structure for unit, widget, and integration tests
59
+ - 📦 **Easy Deployment**: Simple Python package that can be easily installed on any developer machine
60
+
61
+ ## Quick Start
62
+
63
+ ### Installation
64
+
65
+ ```bash
66
+ # Clone the repository
67
+ git clone <your-repo-url>
68
+ cd flutter-setup
69
+
70
+ # Install the package
71
+ uv pip install -e .
72
+
73
+ # Or install directly from GitHub (when published)
74
+ uv pip install git+https://github.com/markcallen/flutter-setup.git
75
+ ```
76
+
77
+ ### Linux Prerequisites (Ubuntu/Debian)
78
+
79
+ For Linux hosts, ensure APT is available and `sudo` is configured:
80
+
81
+ ```bash
82
+ sudo apt-get update
83
+ sudo apt-get install -y git curl unzip xz-utils zip libglu1-mesa clang cmake ninja-build pkg-config libgtk-3-dev libayatana-appindicator3-dev liblzma-dev openjdk-17-jdk
84
+ ```
85
+
86
+ ### Configuration Setup
87
+
88
+ Before your first use, initialize your configuration:
89
+
90
+ ```bash
91
+ # Interactive configuration setup
92
+ flutter-setup init
93
+ ```
94
+
95
+ This will:
96
+ - Detect Flutter location from environment variables or PATH
97
+ - Prompt for Flutter channel (stable/beta)
98
+ - Prompt for organization ID
99
+ - Create config file at `~/.config/flutter-setup/config.yaml`
100
+
101
+ You can run `flutter-setup init` again anytime to update your configuration.
102
+
103
+ ### Basic Usage
104
+
105
+ ```bash
106
+ # Create a new Flutter app with iOS, Android, and Web support
107
+ flutter-setup setup MyAwesomeApp ios android web
108
+
109
+ # Create a plugin with specific language preferences
110
+ flutter-setup setup MyPlugin --template plugin --ios-language objc --android-language java ios android
111
+
112
+ # Use beta channel and custom organization
113
+ flutter-setup setup MyApp --channel beta --org com.mycompany ios android macos
114
+
115
+ # Preview what would happen (dry run)
116
+ flutter-setup setup MyApp --dry-run ios android
117
+ ```
118
+
119
+ ## Commands
120
+
121
+ ### `init` - Configuration Setup
122
+ Initialize or update your configuration file:
123
+
124
+ ```bash
125
+ flutter-setup init # Create or update config interactively
126
+ flutter-setup init --force # Overwrite existing config
127
+ ```
128
+
129
+ The config file is stored at `~/.config/flutter-setup/config.yaml` (or `$XDG_CONFIG_HOME/flutter-setup/config.yaml`).
130
+
131
+ ### `setup` - Project Setup
132
+ Set up a new Flutter project:
133
+
134
+ ```bash
135
+ flutter-setup setup MyApp ios android web
136
+ ```
137
+
138
+ ## Command Line Options
139
+
140
+ | Option | Description | Default | Config File |
141
+ |--------|-------------|---------|-------------|
142
+ | `--org` | Organization identifier | `com.example` | ✅ |
143
+ | `--channel` | Flutter channel (stable/beta) | `stable` | ✅ |
144
+ | `--dir` | Output directory | Current directory | ❌ |
145
+ | `--template` | Project template (app/plugin) | `app` | ✅ |
146
+ | `--architecture` | Application architecture scaffold (basic/clean) | `basic` | ✅ |
147
+ | `--database` | Local persistence scaffold (none/sqlite) | `none` | ✅ |
148
+ | `--testing` | Testing starter scaffold (standard/mocktail) | `standard` | ✅ |
149
+ | `--auth-provider` | Auth integration scaffold (none/firebase) | `none` | ✅ |
150
+ | `--cloud-database` | Cloud database scaffold (none/firestore) | `none` | ✅ |
151
+ | `--notifications-provider` | Push notifications scaffold (none/firebase) | `none` | ✅ |
152
+ | `--ios-language` | iOS language for plugins (swift/objc) | `swift` | ✅ |
153
+ | `--android-language` | Android language for plugins (kotlin/java) | `kotlin` | ✅ |
154
+ | `--flutter-update` | Flutter update mode (reset/reclone/skip) | `reset` | ✅ |
155
+ | `--dry-run` | Preview actions without executing | `false` | ❌ |
156
+ | `--verbose` | Enable verbose output | `false` | ❌ |
157
+
158
+ **Note:** Options marked with ✅ can be set in the config file via `flutter-setup init`. Command-line arguments override config file values.
159
+
160
+ ## What Gets Set Up
161
+
162
+ ### 1. System Prerequisites
163
+ - ✅ macOS: Xcode Command Line Tools + Homebrew + CocoaPods
164
+ - ✅ Linux (Ubuntu/Debian): APT-managed packages (`git`, `curl`, `unzip`, `xz-utils`, `zip`, `libglu1-mesa`, `clang`, `cmake`, `ninja-build`, `pkg-config`, `libgtk-3-dev`, `libayatana-appindicator3-dev`, `liblzma-dev`, `openjdk-17-jdk`)
165
+ - ✅ Android development tools when Android platform is selected
166
+ - ✅ iOS development tools only on macOS when iOS platform is selected
167
+
168
+ ### 2. Flutter SDK
169
+ - ✅ Flutter SDK installation/update
170
+ - ✅ Channel management (stable/beta)
171
+ - ✅ PATH configuration
172
+ - ✅ Flutter doctor validation
173
+
174
+ ### 3. Project Structure
175
+ - ✅ Flutter project creation with specified platforms
176
+ - ✅ Package name sanitization
177
+ - ✅ Template-specific configuration
178
+ - ✅ Optional Clean Architecture scaffold
179
+ - ✅ Optional SQLite/Drift local persistence scaffold
180
+ - ✅ Optional Firebase Auth, Firestore, and Firebase Messaging scaffolds
181
+ - ✅ Optional Mocktail testing starter
182
+
183
+ ### 4. Development Environment
184
+ - ✅ VS Code/Cursor configuration
185
+ - ✅ Makefile with common commands
186
+ - ✅ Testing framework structure
187
+ - ✅ Code analysis and linting setup
188
+ - ✅ GitHub Actions CI pipeline
189
+ - ✅ Environment variable support
190
+ - ✅ Comprehensive README
191
+
192
+ ## Project Structure
193
+
194
+ ```
195
+ MyAwesomeApp/
196
+ ├── .vscode/ # VS Code/Cursor configuration
197
+ ├── .github/workflows/ # CI/CD pipeline
198
+ ├── lib/ # Flutter source code
199
+ ├── test/ # Test files
200
+ │ ├── unit/ # Unit tests
201
+ │ └── widget/ # Widget tests
202
+ ├── integration_test/ # Integration tests
203
+ ├── Makefile # Common development commands
204
+ ├── analysis_options.yaml # Linting and analysis rules
205
+ ├── .env # Environment variables
206
+ └── README.md # Project documentation
207
+ ```
208
+
209
+ ## Development Commands
210
+
211
+ After setup, use these commands in your project:
212
+
213
+ ```bash
214
+ # Run the app
215
+ make run # Chrome (default)
216
+ make run_ios # iOS simulator
217
+ make run_android # Android emulator
218
+
219
+ # Testing
220
+ make test # Unit + widget tests
221
+ make integration # Integration tests
222
+
223
+ # Code quality
224
+ make analyze # Flutter analyze
225
+ ```
226
+
227
+ ## Configuration
228
+
229
+ The tool uses a YAML-based configuration file that stores your preferences:
230
+
231
+ **Location:** `~/.config/flutter-setup/config.yaml` (or `$XDG_CONFIG_HOME/flutter-setup/config.yaml`)
232
+
233
+ **Example config:**
234
+ ```yaml
235
+ flutter:
236
+ location: ~/development/flutter
237
+ channel: stable
238
+ update_mode: reset
239
+
240
+ project:
241
+ org: com.mycompany
242
+ template: app
243
+ architecture: basic
244
+ database: none
245
+ testing: standard
246
+ auth_provider: none
247
+ cloud_database: none
248
+ notifications_provider: none
249
+ ios_language: swift
250
+ android_language: kotlin
251
+ ```
252
+
253
+ **Configuration Features:**
254
+ - ✅ XDG Base Directory Specification compliant
255
+ - ✅ Automatic Flutter location detection from environment
256
+ - ✅ Interactive setup via `flutter-setup init`
257
+ - ✅ Command-line arguments override config values
258
+ - ✅ Persistent settings across sessions
259
+
260
+ ## Architecture
261
+
262
+ The package is built with modern Python best practices:
263
+
264
+ - **Modular Design**: Separate modules for different concerns
265
+ - **Type Safety**: Full type hints with mypy support
266
+ - **Error Handling**: Comprehensive exception handling
267
+ - **Rich CLI**: Beautiful terminal output with progress indicators
268
+ - **Configuration**: Flexible configuration system with XDG support
269
+ - **Testing**: Built-in test structure and CI/CD
270
+
271
+ ## Development
272
+
273
+ ### Prerequisites
274
+
275
+ - Python 3.12+
276
+ - uv package manager
277
+
278
+ ### Supported Hosts
279
+
280
+ - macOS (Darwin)
281
+ - Linux (Ubuntu/Debian via APT)
282
+
283
+ ### Known Limitations
284
+
285
+ - Fedora/DNF support is planned but not yet implemented.
286
+ - iOS setup is not available on Linux hosts.
287
+
288
+ ### Setup Development Environment
289
+
290
+ ```bash
291
+ # Clone and install
292
+ git clone <repo-url>
293
+ cd flutter-setup
294
+ uv pip install -e ".[dev]"
295
+
296
+ # Run tests
297
+ uv run pytest
298
+
299
+ # Format code
300
+ uv run black .
301
+
302
+ # Lint code
303
+ uv run ruff check .
304
+
305
+ # Type checking
306
+ uv run mypy .
307
+ ```
308
+
309
+ ### Project Structure
310
+
311
+ ```
312
+ flutter-setup/
313
+ ├── flutter_setup/ # Main package
314
+ │ ├── __init__.py
315
+ │ ├── cli.py # CLI entry point
316
+ │ ├── config.py # Configuration management
317
+ │ ├── core.py # Main orchestration
318
+ │ ├── exceptions.py # Custom exceptions
319
+ │ ├── prerequisites.py # System prerequisites
320
+ │ ├── flutter_manager.py # Flutter SDK management
321
+ │ ├── project_creator.py # Project creation
322
+ │ └── bootstrap.py # Development environment setup
323
+ ├── pyproject.toml # Package configuration
324
+ ├── README.md # This file
325
+ └── test_cli.py # Simple test script
326
+ ```
327
+
328
+ ## Comparison with Bash Script
329
+
330
+ This Python CLI package provides several advantages over the original bash script:
331
+
332
+ | Feature | Bash Script | Python CLI |
333
+ |---------|-------------|------------|
334
+ | **Installation** | Manual download | `pip install` |
335
+ | **Dependencies** | Manual management | Automatic with uv |
336
+ | **Error Handling** | Basic | Comprehensive |
337
+ | **Testing** | None | Full test suite |
338
+ | **Type Safety** | None | Full mypy support |
339
+ | **Packaging** | Manual | Standard Python package |
340
+ | **Distribution** | Manual | PyPI ready |
341
+ | **Maintenance** | Harder | Easier with Python tools |
342
+
343
+ ## Contributing
344
+
345
+ 1. Fork the repository
346
+ 2. Create a feature branch
347
+ 3. Make your changes
348
+ 4. Add tests for new functionality
349
+ 5. Ensure all tests pass
350
+ 6. Submit a pull request
351
+
352
+ ## License
353
+
354
+ MIT License - see [LICENSE](LICENSE) file for details.
355
+
356
+ ## Support
357
+
358
+ For issues and questions:
359
+ - Create an issue on GitHub
360
+ - Check the documentation
361
+ - Review the PRD.md for detailed requirements
362
+
363
+ ---
364
+
365
+ **Built with ❤️ for the Flutter community**
@@ -0,0 +1,320 @@
1
+ # Flutter Setup CLI
2
+
3
+ A modern Python CLI tool for setting up complete Flutter development environments on macOS and Linux. This tool automates Flutter SDK setup, prerequisite checks, and project bootstrapping with practical defaults.
4
+
5
+ ## Features
6
+
7
+ - 🚀 **Automated Setup**: Complete Flutter development environment setup in minutes
8
+ - 🦋 **Flutter SDK Management**: Install, update, and manage Flutter SDK with multiple channels
9
+ - 🛠️ **Prerequisites Installation**: Platform-aware prerequisite checks and installation flows for macOS and Linux
10
+ - 📱 **Multi-Platform Support**: Create projects for iOS, Android, macOS, Linux, Windows, and Web
11
+ - 🔧 **Development Environment**: Pre-configured VS Code/Cursor settings, testing framework, and CI/CD
12
+ - 🎯 **Best Practices**: Industry-standard project structure with linting, testing, and analysis tools
13
+ - 🧪 **Testing Ready**: Built-in test structure for unit, widget, and integration tests
14
+ - 📦 **Easy Deployment**: Simple Python package that can be easily installed on any developer machine
15
+
16
+ ## Quick Start
17
+
18
+ ### Installation
19
+
20
+ ```bash
21
+ # Clone the repository
22
+ git clone <your-repo-url>
23
+ cd flutter-setup
24
+
25
+ # Install the package
26
+ uv pip install -e .
27
+
28
+ # Or install directly from GitHub (when published)
29
+ uv pip install git+https://github.com/markcallen/flutter-setup.git
30
+ ```
31
+
32
+ ### Linux Prerequisites (Ubuntu/Debian)
33
+
34
+ For Linux hosts, ensure APT is available and `sudo` is configured:
35
+
36
+ ```bash
37
+ sudo apt-get update
38
+ sudo apt-get install -y git curl unzip xz-utils zip libglu1-mesa clang cmake ninja-build pkg-config libgtk-3-dev libayatana-appindicator3-dev liblzma-dev openjdk-17-jdk
39
+ ```
40
+
41
+ ### Configuration Setup
42
+
43
+ Before your first use, initialize your configuration:
44
+
45
+ ```bash
46
+ # Interactive configuration setup
47
+ flutter-setup init
48
+ ```
49
+
50
+ This will:
51
+ - Detect Flutter location from environment variables or PATH
52
+ - Prompt for Flutter channel (stable/beta)
53
+ - Prompt for organization ID
54
+ - Create config file at `~/.config/flutter-setup/config.yaml`
55
+
56
+ You can run `flutter-setup init` again anytime to update your configuration.
57
+
58
+ ### Basic Usage
59
+
60
+ ```bash
61
+ # Create a new Flutter app with iOS, Android, and Web support
62
+ flutter-setup setup MyAwesomeApp ios android web
63
+
64
+ # Create a plugin with specific language preferences
65
+ flutter-setup setup MyPlugin --template plugin --ios-language objc --android-language java ios android
66
+
67
+ # Use beta channel and custom organization
68
+ flutter-setup setup MyApp --channel beta --org com.mycompany ios android macos
69
+
70
+ # Preview what would happen (dry run)
71
+ flutter-setup setup MyApp --dry-run ios android
72
+ ```
73
+
74
+ ## Commands
75
+
76
+ ### `init` - Configuration Setup
77
+ Initialize or update your configuration file:
78
+
79
+ ```bash
80
+ flutter-setup init # Create or update config interactively
81
+ flutter-setup init --force # Overwrite existing config
82
+ ```
83
+
84
+ The config file is stored at `~/.config/flutter-setup/config.yaml` (or `$XDG_CONFIG_HOME/flutter-setup/config.yaml`).
85
+
86
+ ### `setup` - Project Setup
87
+ Set up a new Flutter project:
88
+
89
+ ```bash
90
+ flutter-setup setup MyApp ios android web
91
+ ```
92
+
93
+ ## Command Line Options
94
+
95
+ | Option | Description | Default | Config File |
96
+ |--------|-------------|---------|-------------|
97
+ | `--org` | Organization identifier | `com.example` | ✅ |
98
+ | `--channel` | Flutter channel (stable/beta) | `stable` | ✅ |
99
+ | `--dir` | Output directory | Current directory | ❌ |
100
+ | `--template` | Project template (app/plugin) | `app` | ✅ |
101
+ | `--architecture` | Application architecture scaffold (basic/clean) | `basic` | ✅ |
102
+ | `--database` | Local persistence scaffold (none/sqlite) | `none` | ✅ |
103
+ | `--testing` | Testing starter scaffold (standard/mocktail) | `standard` | ✅ |
104
+ | `--auth-provider` | Auth integration scaffold (none/firebase) | `none` | ✅ |
105
+ | `--cloud-database` | Cloud database scaffold (none/firestore) | `none` | ✅ |
106
+ | `--notifications-provider` | Push notifications scaffold (none/firebase) | `none` | ✅ |
107
+ | `--ios-language` | iOS language for plugins (swift/objc) | `swift` | ✅ |
108
+ | `--android-language` | Android language for plugins (kotlin/java) | `kotlin` | ✅ |
109
+ | `--flutter-update` | Flutter update mode (reset/reclone/skip) | `reset` | ✅ |
110
+ | `--dry-run` | Preview actions without executing | `false` | ❌ |
111
+ | `--verbose` | Enable verbose output | `false` | ❌ |
112
+
113
+ **Note:** Options marked with ✅ can be set in the config file via `flutter-setup init`. Command-line arguments override config file values.
114
+
115
+ ## What Gets Set Up
116
+
117
+ ### 1. System Prerequisites
118
+ - ✅ macOS: Xcode Command Line Tools + Homebrew + CocoaPods
119
+ - ✅ Linux (Ubuntu/Debian): APT-managed packages (`git`, `curl`, `unzip`, `xz-utils`, `zip`, `libglu1-mesa`, `clang`, `cmake`, `ninja-build`, `pkg-config`, `libgtk-3-dev`, `libayatana-appindicator3-dev`, `liblzma-dev`, `openjdk-17-jdk`)
120
+ - ✅ Android development tools when Android platform is selected
121
+ - ✅ iOS development tools only on macOS when iOS platform is selected
122
+
123
+ ### 2. Flutter SDK
124
+ - ✅ Flutter SDK installation/update
125
+ - ✅ Channel management (stable/beta)
126
+ - ✅ PATH configuration
127
+ - ✅ Flutter doctor validation
128
+
129
+ ### 3. Project Structure
130
+ - ✅ Flutter project creation with specified platforms
131
+ - ✅ Package name sanitization
132
+ - ✅ Template-specific configuration
133
+ - ✅ Optional Clean Architecture scaffold
134
+ - ✅ Optional SQLite/Drift local persistence scaffold
135
+ - ✅ Optional Firebase Auth, Firestore, and Firebase Messaging scaffolds
136
+ - ✅ Optional Mocktail testing starter
137
+
138
+ ### 4. Development Environment
139
+ - ✅ VS Code/Cursor configuration
140
+ - ✅ Makefile with common commands
141
+ - ✅ Testing framework structure
142
+ - ✅ Code analysis and linting setup
143
+ - ✅ GitHub Actions CI pipeline
144
+ - ✅ Environment variable support
145
+ - ✅ Comprehensive README
146
+
147
+ ## Project Structure
148
+
149
+ ```
150
+ MyAwesomeApp/
151
+ ├── .vscode/ # VS Code/Cursor configuration
152
+ ├── .github/workflows/ # CI/CD pipeline
153
+ ├── lib/ # Flutter source code
154
+ ├── test/ # Test files
155
+ │ ├── unit/ # Unit tests
156
+ │ └── widget/ # Widget tests
157
+ ├── integration_test/ # Integration tests
158
+ ├── Makefile # Common development commands
159
+ ├── analysis_options.yaml # Linting and analysis rules
160
+ ├── .env # Environment variables
161
+ └── README.md # Project documentation
162
+ ```
163
+
164
+ ## Development Commands
165
+
166
+ After setup, use these commands in your project:
167
+
168
+ ```bash
169
+ # Run the app
170
+ make run # Chrome (default)
171
+ make run_ios # iOS simulator
172
+ make run_android # Android emulator
173
+
174
+ # Testing
175
+ make test # Unit + widget tests
176
+ make integration # Integration tests
177
+
178
+ # Code quality
179
+ make analyze # Flutter analyze
180
+ ```
181
+
182
+ ## Configuration
183
+
184
+ The tool uses a YAML-based configuration file that stores your preferences:
185
+
186
+ **Location:** `~/.config/flutter-setup/config.yaml` (or `$XDG_CONFIG_HOME/flutter-setup/config.yaml`)
187
+
188
+ **Example config:**
189
+ ```yaml
190
+ flutter:
191
+ location: ~/development/flutter
192
+ channel: stable
193
+ update_mode: reset
194
+
195
+ project:
196
+ org: com.mycompany
197
+ template: app
198
+ architecture: basic
199
+ database: none
200
+ testing: standard
201
+ auth_provider: none
202
+ cloud_database: none
203
+ notifications_provider: none
204
+ ios_language: swift
205
+ android_language: kotlin
206
+ ```
207
+
208
+ **Configuration Features:**
209
+ - ✅ XDG Base Directory Specification compliant
210
+ - ✅ Automatic Flutter location detection from environment
211
+ - ✅ Interactive setup via `flutter-setup init`
212
+ - ✅ Command-line arguments override config values
213
+ - ✅ Persistent settings across sessions
214
+
215
+ ## Architecture
216
+
217
+ The package is built with modern Python best practices:
218
+
219
+ - **Modular Design**: Separate modules for different concerns
220
+ - **Type Safety**: Full type hints with mypy support
221
+ - **Error Handling**: Comprehensive exception handling
222
+ - **Rich CLI**: Beautiful terminal output with progress indicators
223
+ - **Configuration**: Flexible configuration system with XDG support
224
+ - **Testing**: Built-in test structure and CI/CD
225
+
226
+ ## Development
227
+
228
+ ### Prerequisites
229
+
230
+ - Python 3.12+
231
+ - uv package manager
232
+
233
+ ### Supported Hosts
234
+
235
+ - macOS (Darwin)
236
+ - Linux (Ubuntu/Debian via APT)
237
+
238
+ ### Known Limitations
239
+
240
+ - Fedora/DNF support is planned but not yet implemented.
241
+ - iOS setup is not available on Linux hosts.
242
+
243
+ ### Setup Development Environment
244
+
245
+ ```bash
246
+ # Clone and install
247
+ git clone <repo-url>
248
+ cd flutter-setup
249
+ uv pip install -e ".[dev]"
250
+
251
+ # Run tests
252
+ uv run pytest
253
+
254
+ # Format code
255
+ uv run black .
256
+
257
+ # Lint code
258
+ uv run ruff check .
259
+
260
+ # Type checking
261
+ uv run mypy .
262
+ ```
263
+
264
+ ### Project Structure
265
+
266
+ ```
267
+ flutter-setup/
268
+ ├── flutter_setup/ # Main package
269
+ │ ├── __init__.py
270
+ │ ├── cli.py # CLI entry point
271
+ │ ├── config.py # Configuration management
272
+ │ ├── core.py # Main orchestration
273
+ │ ├── exceptions.py # Custom exceptions
274
+ │ ├── prerequisites.py # System prerequisites
275
+ │ ├── flutter_manager.py # Flutter SDK management
276
+ │ ├── project_creator.py # Project creation
277
+ │ └── bootstrap.py # Development environment setup
278
+ ├── pyproject.toml # Package configuration
279
+ ├── README.md # This file
280
+ └── test_cli.py # Simple test script
281
+ ```
282
+
283
+ ## Comparison with Bash Script
284
+
285
+ This Python CLI package provides several advantages over the original bash script:
286
+
287
+ | Feature | Bash Script | Python CLI |
288
+ |---------|-------------|------------|
289
+ | **Installation** | Manual download | `pip install` |
290
+ | **Dependencies** | Manual management | Automatic with uv |
291
+ | **Error Handling** | Basic | Comprehensive |
292
+ | **Testing** | None | Full test suite |
293
+ | **Type Safety** | None | Full mypy support |
294
+ | **Packaging** | Manual | Standard Python package |
295
+ | **Distribution** | Manual | PyPI ready |
296
+ | **Maintenance** | Harder | Easier with Python tools |
297
+
298
+ ## Contributing
299
+
300
+ 1. Fork the repository
301
+ 2. Create a feature branch
302
+ 3. Make your changes
303
+ 4. Add tests for new functionality
304
+ 5. Ensure all tests pass
305
+ 6. Submit a pull request
306
+
307
+ ## License
308
+
309
+ MIT License - see [LICENSE](LICENSE) file for details.
310
+
311
+ ## Support
312
+
313
+ For issues and questions:
314
+ - Create an issue on GitHub
315
+ - Check the documentation
316
+ - Review the PRD.md for detailed requirements
317
+
318
+ ---
319
+
320
+ **Built with ❤️ for the Flutter community**
File without changes