Skip to content

Commit 10afd42

Browse files
committed
Moving to Ink and TS
1 parent 102af64 commit 10afd42

File tree

15 files changed

+20202
-8992
lines changed

15 files changed

+20202
-8992
lines changed

PROJECT.md

Lines changed: 331 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,331 @@
1+
# Strapi Tool Dockerize V2
2+
3+
This document outlines the planned features, improvements, and tasks for V2 of the Strapi Tool Dockerize CLI.
4+
5+
## Core Features and Tasks
6+
7+
### 1. TypeScript Migration & Project Structure 🏗️
8+
- [ ] Research and evaluate TypeScript CLI frameworks (if needed)
9+
- [ ] Set up TypeScript configuration
10+
- [ ] Set up Vitest for testing
11+
- [ ] Implement project structure:
12+
```
13+
strapi-tool-dockerize/
14+
├── src/
15+
│ ├── commands/ # CLI commands
16+
│ ├── config/ # Configuration management
17+
│ ├── core/ # Core functionality
18+
│ ├── templates/ # Docker templates
19+
│ │ ├── development/
20+
│ │ ├── production/
21+
│ │ └── custom/
22+
│ ├── utils/ # Utility functions
23+
│ └── types/ # TypeScript types
24+
├── tests/ # Test files
25+
├── docs/ # Documentation
26+
└── examples/ # Example configurations
27+
```
28+
- [ ] Set up ESLint and Prettier configurations
29+
- [ ] Implement TypeScript interfaces for all major components
30+
- [ ] Set up GitHub Actions for CI/CD
31+
32+
### 2. Docker Template System 🐳
33+
- [ ] Create modular template system
34+
- [ ] Implement development environment templates
35+
- [ ] Implement production environment templates
36+
- [ ] Add support for custom templates
37+
- [ ] Implement template validation
38+
- [ ] Add support for template variables
39+
- [ ] Create plugin system for custom Docker configurations
40+
- [ ] Design plugin interface
41+
- [ ] Implement plugin loading system
42+
- [ ] Create example plugins
43+
44+
### Plugin System Architecture 🔌
45+
- [ ] Design core plugin system:
46+
- [ ] Create plugin interface definitions
47+
- [ ] Implement plugin registry
48+
- [ ] Add plugin validation system
49+
- [ ] Create plugin loading mechanism
50+
- [ ] Add plugin dependency resolution
51+
52+
- [ ] Core Plugin Types (Everything is a plugin):
53+
- [ ] Database plugins
54+
- [ ] Question sets for each database
55+
- [ ] Database-specific configuration templates
56+
- [ ] Validation rules
57+
- [ ] Environment variable handling
58+
- [ ] Provider plugins
59+
- [ ] Configuration plugins
60+
- [ ] Template plugins
61+
62+
- [ ] Example Plugin Structure:
63+
```
64+
plugins/
65+
├── databases/
66+
│ ├── postgresql/
67+
│ │ ├── index.ts # Main plugin entry
68+
│ │ ├── questions.ts # PostgreSQL specific questions
69+
│ │ ├── validation.ts # Validation rules
70+
│ │ ├── config.ts # Configuration generator
71+
│ │ ├── templates/ # Templates
72+
│ │ │ ├── docker.liquid # Docker template
73+
│ │ │ └── compose.liquid # Docker-compose template
74+
│ │ └── env.ts # Environment handling
75+
│ └── mysql/
76+
│ ├── index.ts
77+
│ ├── questions.ts # MySQL specific questions
78+
│ ├── validation.ts
79+
│ └── ...
80+
└── templates/
81+
└── nginx/
82+
├── index.ts
83+
├── questions.ts # Nginx configuration questions
84+
└── templates/
85+
└── nginx.conf.liquid
86+
```
87+
88+
- [ ] Plugin Interface Example:
89+
```typescript
90+
interface Plugin {
91+
type: 'database' | 'provider' | 'template';
92+
name: string;
93+
version: string;
94+
95+
// Questions to ask when this plugin is selected
96+
getQuestions(): Question[];
97+
98+
// Validate the answers
99+
validateAnswers(answers: any): ValidationResult;
100+
101+
// Get templates based on answers
102+
getTemplates(answers: any): Template[];
103+
104+
// Get environment variables
105+
getEnvironmentVariables(answers: any): EnvVars[];
106+
}
107+
108+
// Example Database Plugin Implementation
109+
class PostgresPlugin implements Plugin {
110+
type = 'database';
111+
name = 'postgresql';
112+
113+
getQuestions() {
114+
return [
115+
{
116+
type: 'text',
117+
name: 'POSTGRES_DB',
118+
message: 'Database name?',
119+
default: 'strapi'
120+
},
121+
{
122+
type: 'text',
123+
name: 'POSTGRES_USER',
124+
message: 'Database user?'
125+
},
126+
// More PostgreSQL specific questions
127+
];
128+
}
129+
130+
validateAnswers(answers) {
131+
// PostgreSQL specific validation
132+
}
133+
134+
getTemplates(answers) {
135+
// Return appropriate Docker/compose templates
136+
}
137+
}
138+
```
139+
140+
- [ ] Plugin Management:
141+
- [ ] Plugin discovery and loading
142+
- [ ] Plugin configuration storage
143+
- [ ] Plugin dependency management
144+
- [ ] Plugin version compatibility
145+
146+
### 3. Database Support 🗄️
147+
- [ ] Implement support for official Strapi databases:
148+
- [ ] PostgreSQL
149+
- [ ] MySQL
150+
- [ ] MariaDB
151+
- [ ] SQLite (with bind mount support)
152+
- [ ] Add .env file parsing for existing configurations
153+
- [ ] Implement database backup functionality
154+
- [ ] Add database configuration validation
155+
- [ ] Support for database migrations
156+
157+
### 4. User Experience 👥
158+
- [x] Research and implement Ink for better CLI experience
159+
- [x] Create interactive mode with improved prompts
160+
- [x] Implement progress indicators
161+
- [x] Add validation for all user inputs
162+
- [x] Implement better error handling and messages
163+
- [x] Add debug mode
164+
- [x] Create comprehensive help system
165+
166+
#### CLI Flow & Questions
167+
1. **Auto-Detection Phase**
168+
- Project type (TS/JS)
169+
- Existing database config
170+
- Existing Docker files
171+
- Environment files
172+
173+
2. **Environment Selection**
174+
```
175+
? Select environment setup:
176+
❯ Development (Optimized for local development with hot-reload)
177+
❯ Production (Optimized for deployment)
178+
❯ Both (Development + Production setup)
179+
```
180+
181+
3. **Production Setup** (Only if Production/Both selected)
182+
- If Production was selected:
183+
```
184+
? Choose deployment setup:
185+
❯ Single Dockerfile (Simple deployment, good for platforms like Heroku)
186+
❯ Docker Compose (Multi-container setup, good for custom servers)
187+
```
188+
- If Development was selected:
189+
- Automatically use docker-compose (better for development)
190+
- If Both was selected:
191+
- Development: docker-compose.yml
192+
- Production: Both Dockerfile and docker-compose.prod.yml
193+
194+
4. **Database Configuration**
195+
```
196+
? Select database setup:
197+
❯ PostgreSQL (Recommended for production)
198+
❯ MySQL
199+
❯ MariaDB
200+
❯ SQLite (Development only)
201+
```
202+
- Skip if valid database configuration detected
203+
- Show warning if SQLite selected for production
204+
- Additional configuration based on database type
205+
206+
5. **Node.js Configuration**
207+
```
208+
? Select Node.js version:
209+
❯ LTS (Recommended, currently Node.js 20)
210+
❯ Current (Latest stable)
211+
❯ Custom Version
212+
```
213+
214+
#### Smart Defaults & Validation
215+
- [x] Use detected values when available
216+
- [x] Skip questions if valid configuration exists
217+
- [x] Validate database credentials
218+
- [x] Ensure password strength
219+
- [x] Verify port availability
220+
221+
### Current Progress
222+
- [x] Basic project structure
223+
- [x] TypeScript migration
224+
- [x] Project detection
225+
- [x] Interactive UI with Ink
226+
- [x] Basic flow implementation
227+
- [ ] Database configuration
228+
- [ ] Docker file generation
229+
- [ ] Environment handling
230+
- [ ] Plugin system
231+
232+
### Next Steps
233+
1. Implement database configuration handlers
234+
2. Create Docker template system
235+
3. Add environment variable management
236+
4. Implement plugin system for extensibility
237+
238+
### 5. Project Detection & Configuration 🔍
239+
- [ ] Improve Strapi version detection
240+
- [ ] Add Node.js version compatibility check
241+
- [ ] Implement project structure validation
242+
- [ ] Add support for custom Strapi configurations
243+
- [ ] Implement configuration file support
244+
- [ ] Add project backup functionality
245+
246+
### 6. Testing & Quality Assurance ✅
247+
- [ ] Set up Vitest testing framework
248+
- [ ] Implement unit tests
249+
- [ ] Add integration tests
250+
- [ ] Create end-to-end tests
251+
- [ ] Implement test coverage reporting
252+
- [ ] Add automated testing in CI/CD
253+
254+
### 7. Documentation 📚
255+
- [ ] Create comprehensive README
256+
- [ ] Add JSDoc documentation
257+
- [ ] Create usage examples
258+
- [ ] Add contributing guidelines
259+
- [ ] Create plugin development guide
260+
- [ ] Add troubleshooting guide
261+
262+
### 8. CI/CD & Deployment 🚀
263+
- [ ] Set up GitHub Actions for:
264+
- [ ] Building
265+
- [ ] Testing
266+
- [ ] Publishing to npm
267+
- [ ] Documentation generation
268+
- [ ] Implement semantic versioning
269+
- [ ] Add automated changelog generation
270+
- [ ] Create release workflow
271+
272+
## Future/Bonus Features 🎁
273+
274+
### Cloud Platform Integration
275+
- [ ] Research and plan cloud platform integration
276+
- [ ] Design plugin system for cloud providers
277+
- [ ] Add support for:
278+
- [ ] AWS
279+
- [ ] GCP
280+
- [ ] Azure
281+
- [ ] Implement Terraform template generation
282+
283+
### Advanced Features
284+
- [ ] Add support for Docker Swarm
285+
- [ ] Implement container health checks
286+
- [ ] Add performance optimization options
287+
- [ ] Create monitoring setup templates
288+
289+
## Development Guidelines
290+
291+
### Code Style
292+
- Use TypeScript for all new code
293+
- Follow ESLint and Prettier configurations
294+
- Write comprehensive tests for all features
295+
- Document all public APIs and interfaces
296+
- Use semantic commit messages
297+
298+
### Testing Strategy
299+
- Unit tests for all utility functions
300+
- Integration tests for core features
301+
302+
### Documentation Requirements
303+
- Clear and concise API documentation
304+
- Comprehensive usage examples
305+
- Detailed setup instructions
306+
- Troubleshooting guides
307+
- Plugin development documentation
308+
309+
## Release Strategy
310+
311+
1. Alpha Release
312+
- Core TypeScript migration
313+
- Basic Docker template system
314+
- Essential database support
315+
316+
2. Beta Release
317+
- Enhanced user interface with Ink
318+
- Complete template system
319+
- Plugin system implementation
320+
321+
3. V2 Release
322+
- All core features implemented
323+
- Comprehensive testing
324+
- Complete documentation
325+
- Production-ready stability
326+
327+
4. Future Updates
328+
- Cloud platform integrations
329+
- Additional template support
330+
- Performance optimizations
331+
- Community-requested features

dist/cli.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#!/usr/bin/env node

dist/cli.js

Lines changed: 302 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)