shakauthossain commited on
Commit
2df0cf9
·
verified ·
1 Parent(s): ef9956b
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. Dockerfile +2 -2
  2. app/api/routes/docker.py +270 -0
  3. app/api/routes/scripts.py +93 -0
  4. app/core/config.py +1 -1
  5. app/main.py +2 -0
  6. app/models/schemas.py +114 -0
  7. app/services/devops.py +7 -1
  8. app/services/docker_generator.py +181 -0
  9. app/services/dockerfile_validator.py +185 -0
  10. app/services/script_validator.py +253 -0
  11. app/templates/docker/docker-build.sh.j2 +66 -0
  12. app/templates/docker/docker-compose.yml.j2 +158 -0
  13. app/templates/docker/dockerfile_dotnet.j2 +61 -0
  14. app/templates/docker/dockerfile_go.j2 +75 -0
  15. app/templates/docker/dockerfile_java.j2 +92 -0
  16. app/templates/docker/dockerfile_nodejs.j2 +77 -0
  17. app/templates/docker/dockerfile_php.j2 +70 -0
  18. app/templates/docker/dockerfile_python.j2 +132 -0
  19. app/templates/docker/dockerfile_ruby.j2 +54 -0
  20. app/templates/docker/dockerignore.j2 +113 -0
  21. app/templates/docker/env.example.j2 +71 -0
  22. app/templates/systemd_setup.j2 +3 -3
  23. generated/.dockerignore-013314fa +113 -0
  24. generated/.dockerignore-04971ae7 +113 -0
  25. generated/.dockerignore-0dd6b89c +113 -0
  26. generated/.dockerignore-0df1cbc6 +113 -0
  27. generated/.dockerignore-10529e9e +113 -0
  28. generated/.dockerignore-125b6db9 +113 -0
  29. generated/.dockerignore-12bcf307 +113 -0
  30. generated/.dockerignore-13cb20c1 +113 -0
  31. generated/.dockerignore-22291843 +113 -0
  32. generated/.dockerignore-23d12e96 +113 -0
  33. generated/.dockerignore-26b408d2 +113 -0
  34. generated/.dockerignore-26f15cf4 +113 -0
  35. generated/.dockerignore-28e849ba +113 -0
  36. generated/.dockerignore-2b780d1b +113 -0
  37. generated/.dockerignore-2f2b704b +113 -0
  38. generated/.dockerignore-2f5b2050 +113 -0
  39. generated/.dockerignore-33e8e7c0 +113 -0
  40. generated/.dockerignore-3cb05336 +113 -0
  41. generated/.dockerignore-3ef9d7a4 +113 -0
  42. generated/.dockerignore-3f413bf3 +113 -0
  43. generated/.dockerignore-4539f725 +113 -0
  44. generated/.dockerignore-460c0e40 +113 -0
  45. generated/.dockerignore-48fdb6ed +113 -0
  46. generated/.dockerignore-500b6612 +113 -0
  47. generated/.dockerignore-52b05f9c +113 -0
  48. generated/.dockerignore-53944f53 +113 -0
  49. generated/.dockerignore-59dc72f0 +113 -0
  50. generated/.dockerignore-5d3c0a14 +113 -0
Dockerfile CHANGED
@@ -21,7 +21,7 @@ RUN useradd --create-home --shell /bin/bash app \
21
  USER app
22
 
23
  # Expose port
24
- EXPOSE 8000
25
 
26
  # Run the application
27
- CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]
 
21
  USER app
22
 
23
  # Expose port
24
+ EXPOSE 7860
25
 
26
  # Run the application
27
+ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860", "--reload"]
app/api/routes/docker.py ADDED
@@ -0,0 +1,270 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ API routes for Docker file generation.
3
+ """
4
+
5
+ import os
6
+ import uuid
7
+
8
+ from fastapi import APIRouter, Depends, HTTPException, Request, status
9
+
10
+ from app.api.deps import get_logger, get_settings
11
+ from app.core.security import limiter
12
+ from app.models.schemas import (
13
+ DockerfileConfig,
14
+ DockerComposeConfig,
15
+ DockerGeneratedFiles,
16
+ )
17
+ from app.services.docker_generator import DockerGenerator
18
+ from app.services.dockerfile_validator import DockerfileValidator
19
+ from app.core.config import settings
20
+ from app.core.logging import logger
21
+ import jinja2
22
+
23
+ router = APIRouter()
24
+
25
+ # Create Docker Generator instance
26
+ template_env = jinja2.Environment(
27
+ loader=jinja2.FileSystemLoader(settings.templates_dir),
28
+ trim_blocks=True,
29
+ lstrip_blocks=True,
30
+ autoescape=True,
31
+ cache_size=0,
32
+ )
33
+ docker_generator = DockerGenerator(template_env, settings, logger)
34
+ dockerfile_validator = DockerfileValidator(logger)
35
+
36
+
37
+ @router.post("/generate-dockerfile", response_model=DockerGeneratedFiles)
38
+ @limiter.limit("10/minute")
39
+ async def generate_dockerfile(
40
+ request: Request,
41
+ config: DockerfileConfig,
42
+ settings=Depends(get_settings),
43
+ logger=Depends(get_logger),
44
+ ):
45
+ """Generate a Dockerfile based on stack type."""
46
+ client_ip = request.client.host if request.client else "unknown"
47
+ logger.info(f"Dockerfile generation request from {client_ip} for {config.stackType}")
48
+
49
+ try:
50
+ # Generate unique filename
51
+ file_id = str(uuid.uuid4())[:8]
52
+
53
+ # Generate Dockerfile
54
+ dockerfile_content = docker_generator.generate_dockerfile(config, file_id)
55
+ dockerfile_filename = f"Dockerfile-{file_id}"
56
+ dockerfile_path = settings.generated_dir / dockerfile_filename
57
+
58
+ # Ensure generated directory exists
59
+ dockerfile_path.parent.mkdir(exist_ok=True)
60
+
61
+ # Write Dockerfile
62
+ with open(dockerfile_path, "w") as f:
63
+ f.write(dockerfile_content)
64
+
65
+ # Generate .dockerignore
66
+ dockerignore_content = docker_generator.generate_dockerignore(config, file_id)
67
+ dockerignore_filename = f".dockerignore-{file_id}"
68
+ dockerignore_path = settings.generated_dir / dockerignore_filename
69
+
70
+ with open(dockerignore_path, "w") as f:
71
+ f.write(dockerignore_content)
72
+
73
+ # Create URLs
74
+ dockerfile_url = f"/download/{dockerfile_filename}"
75
+ dockerignore_url = f"/download/{dockerignore_filename}"
76
+
77
+ response = DockerGeneratedFiles(
78
+ dockerfile_url=dockerfile_url,
79
+ dockerfile_path=str(dockerfile_path),
80
+ dockerignore_url=dockerignore_url,
81
+ dockerignore_path=str(dockerignore_path),
82
+ description=f"Dockerfile for {config.stackType} "
83
+ f"({'multi-stage' if config.multiStage else 'single-stage'}, "
84
+ f"{'development' if config.developmentMode else 'production'})",
85
+ )
86
+
87
+ return response
88
+
89
+ except Exception as e:
90
+ logger.error(f"Failed to generate Dockerfile: {str(e)}")
91
+ raise HTTPException(
92
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
93
+ detail=f"Failed to generate Dockerfile: {str(e)}",
94
+ )
95
+
96
+
97
+ @router.post("/generate-docker-compose", response_model=DockerGeneratedFiles)
98
+ @limiter.limit("10/minute")
99
+ async def generate_docker_compose(
100
+ request: Request,
101
+ config: DockerComposeConfig,
102
+ settings=Depends(get_settings),
103
+ logger=Depends(get_logger),
104
+ ):
105
+ """Generate docker-compose.yml and supporting files."""
106
+ client_ip = request.client.host if request.client else "unknown"
107
+ logger.info(
108
+ f"Docker Compose generation request from {client_ip} for {config.stackType}"
109
+ )
110
+
111
+ try:
112
+ # Generate unique filename
113
+ file_id = str(uuid.uuid4())[:8]
114
+
115
+ # Generate docker-compose.yml
116
+ compose_content = docker_generator.generate_docker_compose(config, file_id)
117
+ compose_filename = f"docker-compose-{file_id}.yml"
118
+ compose_path = settings.generated_dir / compose_filename
119
+
120
+ # Ensure generated directory exists
121
+ compose_path.parent.mkdir(exist_ok=True)
122
+
123
+ # Write compose file
124
+ with open(compose_path, "w") as f:
125
+ f.write(compose_content)
126
+
127
+ response = DockerGeneratedFiles(
128
+ compose_url=f"/download/{compose_filename}",
129
+ compose_path=str(compose_path),
130
+ description=f"Docker Compose for {config.stackType} ({config.mode} mode)",
131
+ )
132
+
133
+ # Generate .dockerignore
134
+ dockerignore_content = docker_generator.generate_dockerignore(config, file_id)
135
+ dockerignore_filename = f".dockerignore-{file_id}"
136
+ dockerignore_path = settings.generated_dir / dockerignore_filename
137
+
138
+ with open(dockerignore_path, "w") as f:
139
+ f.write(dockerignore_content)
140
+
141
+ response.dockerignore_url = f"/download/{dockerignore_filename}"
142
+ response.dockerignore_path = str(dockerignore_path)
143
+
144
+ # Generate .env.example if requested
145
+ if config.includeEnvFile:
146
+ env_content = docker_generator.generate_env_example(config, file_id)
147
+ env_filename = f".env.example-{file_id}"
148
+ env_path = settings.generated_dir / env_filename
149
+
150
+ with open(env_path, "w") as f:
151
+ f.write(env_content)
152
+
153
+ response.env_url = f"/download/{env_filename}"
154
+ response.env_path = str(env_path)
155
+
156
+ # Generate build script
157
+ build_script_content = docker_generator.generate_build_script(config, file_id)
158
+ build_script_filename = f"docker-build-{file_id}.sh"
159
+ build_script_path = settings.generated_dir / build_script_filename
160
+
161
+ with open(build_script_path, "w") as f:
162
+ f.write(build_script_content)
163
+
164
+ # Make script executable
165
+ os.chmod(build_script_path, 0o755)
166
+
167
+ response.build_script_url = f"/download/{build_script_filename}"
168
+ response.build_script_path = str(build_script_path)
169
+
170
+ return response
171
+
172
+ except Exception as e:
173
+ logger.error(f"Failed to generate docker-compose: {str(e)}")
174
+ raise HTTPException(
175
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
176
+ detail=f"Failed to generate docker-compose: {str(e)}",
177
+ )
178
+
179
+
180
+ @router.get("/validate-dockerfile/{file_id}")
181
+ @limiter.limit("20/minute")
182
+ async def validate_dockerfile(
183
+ request: Request,
184
+ file_id: str,
185
+ logger=Depends(get_logger),
186
+ settings=Depends(get_settings),
187
+ ):
188
+ """
189
+ Validate a generated Dockerfile for syntax and best practices
190
+ """
191
+ client_ip = request.client.host if request.client else "unknown"
192
+ logger.info(f"Dockerfile validation request from {client_ip} for file {file_id}")
193
+
194
+ try:
195
+ # Find the Dockerfile
196
+ dockerfile_path = settings.generated_dir / f"Dockerfile-{file_id}"
197
+
198
+ if not dockerfile_path.exists():
199
+ raise HTTPException(
200
+ status_code=status.HTTP_404_NOT_FOUND,
201
+ detail=f"Dockerfile not found: {file_id}"
202
+ )
203
+
204
+ # Read Dockerfile content
205
+ with open(dockerfile_path, 'r') as f:
206
+ dockerfile_content = f.read()
207
+
208
+ # Validate
209
+ validation_result = dockerfile_validator.validate_dockerfile(
210
+ dockerfile_content,
211
+ stack_type="unknown" # We could extract this from config if needed
212
+ )
213
+
214
+ logger.info(f"Validation result for {file_id}: valid={validation_result['valid']}, score={validation_result['score']}")
215
+
216
+ return validation_result
217
+
218
+ except HTTPException:
219
+ raise
220
+ except Exception as e:
221
+ logger.error(f"Failed to validate Dockerfile: {str(e)}")
222
+ raise HTTPException(
223
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
224
+ detail=f"Failed to validate Dockerfile: {str(e)}"
225
+ )
226
+
227
+
228
+ @router.get("/validate-docker-compose/{file_id}")
229
+ @limiter.limit("20/minute")
230
+ async def validate_docker_compose(
231
+ request: Request,
232
+ file_id: str,
233
+ logger=Depends(get_logger),
234
+ settings=Depends(get_settings),
235
+ ):
236
+ """
237
+ Validate a generated docker-compose.yml for syntax and best practices
238
+ """
239
+ client_ip = request.client.host if request.client else "unknown"
240
+ logger.info(f"Docker Compose validation request from {client_ip} for file {file_id}")
241
+
242
+ try:
243
+ # Find the docker-compose file
244
+ compose_path = settings.generated_dir / f"docker-compose-{file_id}.yml"
245
+
246
+ if not compose_path.exists():
247
+ raise HTTPException(
248
+ status_code=status.HTTP_404_NOT_FOUND,
249
+ detail=f"Docker Compose file not found: {file_id}"
250
+ )
251
+
252
+ # Read compose content
253
+ with open(compose_path, 'r') as f:
254
+ compose_content = f.read()
255
+
256
+ # Validate
257
+ validation_result = dockerfile_validator.validate_docker_compose(compose_content)
258
+
259
+ logger.info(f"Validation result for {file_id}: valid={validation_result['valid']}, score={validation_result['score']}")
260
+
261
+ return validation_result
262
+
263
+ except HTTPException:
264
+ raise
265
+ except Exception as e:
266
+ logger.error(f"Failed to validate docker-compose: {str(e)}")
267
+ raise HTTPException(
268
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
269
+ detail=f"Failed to validate docker-compose: {str(e)}"
270
+ )
app/api/routes/scripts.py CHANGED
@@ -10,8 +10,11 @@ from fastapi import APIRouter, Depends, HTTPException, Request, status
10
  from app.api.deps import get_devops_service, get_logger, get_settings
11
  from app.core.security import limiter
12
  from app.models.schemas import ConfigState, GeneratedFiles
 
 
13
 
14
  router = APIRouter()
 
15
 
16
 
17
  @router.post("/generate-script", response_model=GeneratedFiles)
@@ -77,3 +80,93 @@ async def generate_script(
77
  status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
78
  detail=f"Failed to generate script: {str(e)}",
79
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  from app.api.deps import get_devops_service, get_logger, get_settings
11
  from app.core.security import limiter
12
  from app.models.schemas import ConfigState, GeneratedFiles
13
+ from app.services.script_validator import ScriptValidator
14
+ from app.core.logging import logger as app_logger
15
 
16
  router = APIRouter()
17
+ script_validator = ScriptValidator(app_logger)
18
 
19
 
20
  @router.post("/generate-script", response_model=GeneratedFiles)
 
80
  status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
81
  detail=f"Failed to generate script: {str(e)}",
82
  )
83
+
84
+
85
+ @router.get("/validate-script/{file_id}")
86
+ @limiter.limit("20/minute")
87
+ async def validate_script(
88
+ request: Request,
89
+ file_id: str,
90
+ logger=Depends(get_logger),
91
+ settings=Depends(get_settings),
92
+ ):
93
+ """
94
+ Validate a generated bash script for syntax and best practices
95
+ """
96
+ client_ip = request.client.host if request.client else "unknown"
97
+ logger.info(f"Script validation request from {client_ip} for file {file_id}")
98
+
99
+ try:
100
+ # Find the script file
101
+ script_path = settings.generated_dir / f"setup-{file_id}.sh"
102
+
103
+ if not script_path.exists():
104
+ raise HTTPException(
105
+ status_code=status.HTTP_404_NOT_FOUND,
106
+ detail=f"Script not found: {file_id}"
107
+ )
108
+
109
+ # Read script content
110
+ with open(script_path, 'r') as f:
111
+ script_content = f.read()
112
+
113
+ # Validate
114
+ validation_result = script_validator.validate_bash_script(script_content)
115
+
116
+ logger.info(f"Validation result for {file_id}: valid={validation_result['valid']}, score={validation_result['score']}")
117
+
118
+ return validation_result
119
+
120
+ except HTTPException:
121
+ raise
122
+ except Exception as e:
123
+ logger.error(f"Failed to validate script: {str(e)}")
124
+ raise HTTPException(
125
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
126
+ detail=f"Failed to validate script: {str(e)}"
127
+ )
128
+
129
+
130
+ @router.get("/validate-nginx/{file_id}")
131
+ @limiter.limit("20/minute")
132
+ async def validate_nginx(
133
+ request: Request,
134
+ file_id: str,
135
+ logger=Depends(get_logger),
136
+ settings=Depends(get_settings),
137
+ ):
138
+ """
139
+ Validate a generated nginx configuration for syntax and best practices
140
+ """
141
+ client_ip = request.client.host if request.client else "unknown"
142
+ logger.info(f"Nginx validation request from {client_ip} for file {file_id}")
143
+
144
+ try:
145
+ # Find the nginx config file
146
+ nginx_path = settings.generated_dir / f"nginx-{file_id}.conf"
147
+
148
+ if not nginx_path.exists():
149
+ raise HTTPException(
150
+ status_code=status.HTTP_404_NOT_FOUND,
151
+ detail=f"Nginx config not found: {file_id}"
152
+ )
153
+
154
+ # Read nginx content
155
+ with open(nginx_path, 'r') as f:
156
+ nginx_content = f.read()
157
+
158
+ # Validate
159
+ validation_result = script_validator.validate_nginx_config(nginx_content)
160
+
161
+ logger.info(f"Validation result for {file_id}: valid={validation_result['valid']}, score={validation_result['score']}")
162
+
163
+ return validation_result
164
+
165
+ except HTTPException:
166
+ raise
167
+ except Exception as e:
168
+ logger.error(f"Failed to validate nginx config: {str(e)}")
169
+ raise HTTPException(
170
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
171
+ detail=f"Failed to validate nginx config: {str(e)}"
172
+ )
app/core/config.py CHANGED
@@ -13,7 +13,7 @@ class Settings:
13
  def __init__(self):
14
  # Server settings
15
  self.host: str = os.getenv("HOST", "0.0.0.0")
16
- self.port: int = int(os.getenv("PORT", 8000))
17
  self.debug: bool = os.getenv("DEBUG", "false").lower() == "true"
18
 
19
  # Security settings
 
13
  def __init__(self):
14
  # Server settings
15
  self.host: str = os.getenv("HOST", "0.0.0.0")
16
+ self.port: int = int(os.getenv("PORT", 7860))
17
  self.debug: bool = os.getenv("DEBUG", "false").lower() == "true"
18
 
19
  # Security settings
app/main.py CHANGED
@@ -14,6 +14,7 @@ from slowapi.errors import RateLimitExceeded
14
  from app.api.deps import get_logger, get_settings
15
  from app.api.routes.nginx import router as nginx_router
16
  from app.api.routes.scripts import router as scripts_router
 
17
  from app.core.config import settings
18
  from app.core.logging import logger
19
  from app.core.security import limiter, rate_limit_middleware
@@ -110,3 +111,4 @@ async def download_file(
110
  # Include API routers
111
  app.include_router(scripts_router, prefix="/api/v1", tags=["scripts"])
112
  app.include_router(nginx_router, prefix="/api/v1", tags=["nginx"])
 
 
14
  from app.api.deps import get_logger, get_settings
15
  from app.api.routes.nginx import router as nginx_router
16
  from app.api.routes.scripts import router as scripts_router
17
+ from app.api.routes.docker import router as docker_router
18
  from app.core.config import settings
19
  from app.core.logging import logger
20
  from app.core.security import limiter, rate_limit_middleware
 
111
  # Include API routers
112
  app.include_router(scripts_router, prefix="/api/v1", tags=["scripts"])
113
  app.include_router(nginx_router, prefix="/api/v1", tags=["nginx"])
114
+ app.include_router(docker_router, prefix="/api/v1", tags=["docker"])
app/models/schemas.py CHANGED
@@ -193,3 +193,117 @@ class NginxConfigRequest(BaseModel):
193
  ):
194
  raise ValueError("Invalid domain format")
195
  return v
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  ):
194
  raise ValueError("Invalid domain format")
195
  return v
196
+
197
+
198
+ # Docker Configuration Models
199
+
200
+ class DockerfileConfig(BaseModel):
201
+ """Configuration for Dockerfile generation."""
202
+
203
+ stackType: str # nodejs, python, php, go, java, dotnet, ruby
204
+ multiStage: bool = False
205
+ developmentMode: bool = False
206
+
207
+ # Version settings
208
+ nodeVersion: Optional[str] = "18"
209
+ pythonVersion: Optional[str] = "3.11"
210
+ phpVersion: Optional[str] = "8.3"
211
+ goVersion: Optional[str] = "1.21"
212
+ javaVersion: Optional[str] = "17"
213
+ dotnetVersion: Optional[str] = "8.0"
214
+ rubyVersion: Optional[str] = "3.2"
215
+
216
+ # Port settings
217
+ port: Optional[str] = None
218
+
219
+ # Build settings
220
+ buildCommand: Optional[str] = None
221
+ entrypoint: Optional[str] = None
222
+ framework: Optional[str] = None # flask, fastapi, django, rails, etc.
223
+ projectName: Optional[str] = None
224
+ mainPackage: Optional[str] = None # for Go
225
+ composer: bool = False # for PHP
226
+
227
+ @field_validator("stackType")
228
+ @classmethod
229
+ def validate_stack_type(cls, v):
230
+ allowed = ["nodejs", "python", "php", "go", "java", "dotnet", "ruby"]
231
+ if v not in allowed:
232
+ raise ValueError(
233
+ f'Invalid stack type. Must be one of: {", ".join(allowed)}'
234
+ )
235
+ return v
236
+
237
+
238
+ class ServiceConfig(BaseModel):
239
+ """Configuration for docker-compose services."""
240
+
241
+ database: Optional[str] = None # postgresql, mysql, mongodb
242
+ redis: bool = False
243
+ nginx: bool = False
244
+
245
+
246
+ class DockerComposeConfig(BaseModel):
247
+ """Configuration for docker-compose.yml generation."""
248
+
249
+ stackType: str
250
+ mode: str = "production" # development or production
251
+ projectName: Optional[str] = "myapp"
252
+
253
+ # Service configuration
254
+ services: ServiceConfig = ServiceConfig()
255
+
256
+ # Port settings
257
+ appPort: Optional[str] = None
258
+ dbPort: Optional[str] = None
259
+ redisPort: Optional[str] = "6379"
260
+ nginxPort: Optional[str] = "80"
261
+
262
+ # Database versions
263
+ dbVersion: Optional[str] = None
264
+ redisVersion: Optional[str] = "7"
265
+
266
+ # Advanced options
267
+ volumePersistence: bool = True
268
+ includeEnvFile: bool = True
269
+ ssl: bool = False
270
+
271
+ # Registry options (for build script)
272
+ registry: Optional[str] = "docker.io"
273
+ tag: Optional[str] = "latest"
274
+
275
+ @field_validator("stackType")
276
+ @classmethod
277
+ def validate_stack_type(cls, v):
278
+ allowed = ["nodejs", "python", "php", "go", "java", "dotnet", "ruby"]
279
+ if v not in allowed:
280
+ raise ValueError(
281
+ f'Invalid stack type. Must be one of: {", ".join(allowed)}'
282
+ )
283
+ return v
284
+
285
+ @field_validator("mode")
286
+ @classmethod
287
+ def validate_mode(cls, v):
288
+ allowed = ["development", "production"]
289
+ if v not in allowed:
290
+ raise ValueError(
291
+ f'Invalid mode. Must be one of: {", ".join(allowed)}'
292
+ )
293
+ return v
294
+
295
+
296
+ class DockerGeneratedFiles(BaseModel):
297
+ """Response model for Docker file generation."""
298
+
299
+ dockerfile_url: Optional[str] = None
300
+ dockerfile_path: Optional[str] = None
301
+ dockerignore_url: Optional[str] = None
302
+ dockerignore_path: Optional[str] = None
303
+ compose_url: Optional[str] = None
304
+ compose_path: Optional[str] = None
305
+ env_url: Optional[str] = None
306
+ env_path: Optional[str] = None
307
+ build_script_url: Optional[str] = None
308
+ build_script_path: Optional[str] = None
309
+ description: str
app/services/devops.py CHANGED
@@ -150,9 +150,15 @@ class DevOpsService:
150
  # Database: {config.database or 'None'}
151
  # Process Manager: {config.processManager or 'None'}
152
 
153
- set -e
154
 
155
  echo "🚀 Starting server setup..."
 
 
 
 
 
 
156
  """
157
 
158
  # Add footer
 
150
  # Database: {config.database or 'None'}
151
  # Process Manager: {config.processManager or 'None'}
152
 
153
+ set -euo pipefail
154
 
155
  echo "🚀 Starting server setup..."
156
+
157
+ # Update system packages for security
158
+ echo "📦 Updating system packages..."
159
+ sudo apt-get update -y
160
+ sudo apt-get upgrade -y
161
+
162
  """
163
 
164
  # Add footer
app/services/docker_generator.py ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Docker file generation service.
3
+ """
4
+
5
+ from typing import Union
6
+ from pathlib import Path
7
+
8
+ from fastapi import HTTPException, status
9
+ from jinja2 import Environment, Template
10
+
11
+ from app.core.config import Settings
12
+ from app.models.schemas import DockerfileConfig, DockerComposeConfig
13
+
14
+
15
+ class DockerGenerator:
16
+ """Service for generating Docker files and configurations."""
17
+
18
+ def __init__(self, template_env: Environment, settings: Settings, logger):
19
+ self.template_env = template_env
20
+ self.settings = settings
21
+ self.logger = logger
22
+
23
+ def generate_dockerfile(self, config: DockerfileConfig, file_id: str) -> str:
24
+ """
25
+ Generate a Dockerfile based on stack type and configuration.
26
+ """
27
+ stack = config.stackType.lower()
28
+
29
+ # Map stack to template
30
+ template_map = {
31
+ "nodejs": "docker/dockerfile_nodejs.j2",
32
+ "python": "docker/dockerfile_python.j2",
33
+ "php": "docker/dockerfile_php.j2",
34
+ "go": "docker/dockerfile_go.j2",
35
+ "java": "docker/dockerfile_java.j2",
36
+ "dotnet": "docker/dockerfile_dotnet.j2",
37
+ "ruby": "docker/dockerfile_ruby.j2",
38
+ }
39
+
40
+ template_name = template_map.get(stack)
41
+ if not template_name:
42
+ raise ValueError(f"Unsupported stack type: {stack}")
43
+
44
+ try:
45
+ # Read template from disk
46
+ template_path = self.settings.templates_dir / template_name
47
+ with open(template_path, 'r', encoding='utf-8') as f:
48
+ template_content = f.read()
49
+
50
+ # Render using Jinja2
51
+ template = Template(
52
+ template_content,
53
+ trim_blocks=True,
54
+ lstrip_blocks=True
55
+ )
56
+
57
+ dockerfile_content = template.render(config=config, file_id=file_id)
58
+ return dockerfile_content
59
+
60
+ except Exception as e:
61
+ self.logger.error(f"Failed to generate Dockerfile: {str(e)}")
62
+ raise HTTPException(
63
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
64
+ detail=f"Failed to generate Dockerfile: {str(e)}"
65
+ )
66
+
67
+ def generate_docker_compose(self, config: DockerComposeConfig, file_id: str) -> str:
68
+ """
69
+ Generate a docker-compose.yml based on configuration.
70
+ """
71
+ template_name = "docker/docker-compose.yml.j2"
72
+
73
+ try:
74
+ # Read template from disk
75
+ template_path = self.settings.templates_dir / template_name
76
+ with open(template_path, 'r', encoding='utf-8') as f:
77
+ template_content = f.read()
78
+
79
+ # Render using Jinja2
80
+ template = Template(
81
+ template_content,
82
+ trim_blocks=True,
83
+ lstrip_blocks=True
84
+ )
85
+
86
+ compose_content = template.render(config=config, file_id=file_id)
87
+ return compose_content
88
+
89
+ except Exception as e:
90
+ self.logger.error(f"Failed to generate docker-compose: {str(e)}")
91
+ raise HTTPException(
92
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
93
+ detail=f"Failed to generate docker-compose: {str(e)}"
94
+ )
95
+
96
+ def generate_dockerignore(self, config: Union[DockerfileConfig, DockerComposeConfig], file_id: str) -> str:
97
+ """
98
+ Generate a .dockerignore file.
99
+ """
100
+ template_name = "docker/dockerignore.j2"
101
+
102
+ try:
103
+ # Read template from disk
104
+ template_path = self.settings.templates_dir / template_name
105
+ with open(template_path, 'r', encoding='utf-8') as f:
106
+ template_content = f.read()
107
+
108
+ # Render using Jinja2
109
+ template = Template(
110
+ template_content,
111
+ trim_blocks=True,
112
+ lstrip_blocks=True
113
+ )
114
+
115
+ dockerignore_content = template.render(config=config, file_id=file_id)
116
+ return dockerignore_content
117
+
118
+ except Exception as e:
119
+ self.logger.error(f"Failed to generate .dockerignore: {str(e)}")
120
+ raise HTTPException(
121
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
122
+ detail=f"Failed to generate .dockerignore: {str(e)}"
123
+ )
124
+
125
+ def generate_env_example(self, config: DockerComposeConfig, file_id: str) -> str:
126
+ """
127
+ Generate a .env.example file for docker-compose.
128
+ """
129
+ template_name = "docker/env.example.j2"
130
+
131
+ try:
132
+ # Read template from disk
133
+ template_path = self.settings.templates_dir / template_name
134
+ with open(template_path, 'r', encoding='utf-8') as f:
135
+ template_content = f.read()
136
+
137
+ # Render using Jinja2
138
+ template = Template(
139
+ template_content,
140
+ trim_blocks=True,
141
+ lstrip_blocks=True
142
+ )
143
+
144
+ env_content = template.render(config=config, file_id=file_id)
145
+ return env_content
146
+
147
+ except Exception as e:
148
+ self.logger.error(f"Failed to generate .env.example: {str(e)}")
149
+ raise HTTPException(
150
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
151
+ detail=f"Failed to generate .env.example: {str(e)}"
152
+ )
153
+
154
+ def generate_build_script(self, config: DockerComposeConfig, file_id: str) -> str:
155
+ """
156
+ Generate a docker-build.sh helper script.
157
+ """
158
+ template_name = "docker/docker-build.sh.j2"
159
+
160
+ try:
161
+ # Read template from disk
162
+ template_path = self.settings.templates_dir / template_name
163
+ with open(template_path, 'r', encoding='utf-8') as f:
164
+ template_content = f.read()
165
+
166
+ # Render using Jinja2
167
+ template = Template(
168
+ template_content,
169
+ trim_blocks=True,
170
+ lstrip_blocks=True
171
+ )
172
+
173
+ script_content = template.render(config=config, file_id=file_id)
174
+ return script_content
175
+
176
+ except Exception as e:
177
+ self.logger.error(f"Failed to generate build script: {str(e)}")
178
+ raise HTTPException(
179
+ status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
180
+ detail=f"Failed to generate build script: {str(e)}"
181
+ )
app/services/dockerfile_validator.py ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Dockerfile validation service
3
+ Tests generated Dockerfiles for syntax and build errors
4
+ """
5
+
6
+ import subprocess
7
+ import tempfile
8
+ import os
9
+ from pathlib import Path
10
+ from typing import Dict, List, Optional
11
+ import shutil
12
+
13
+
14
+ class DockerfileValidator:
15
+ """Validates Dockerfiles without requiring actual Docker build"""
16
+
17
+ def __init__(self, logger):
18
+ self.logger = logger
19
+
20
+ def validate_dockerfile(self, dockerfile_content: str, stack_type: str) -> Dict:
21
+ """
22
+ Validate Dockerfile for syntax errors and best practices
23
+
24
+ Returns:
25
+ {
26
+ "valid": bool,
27
+ "errors": List[str],
28
+ "warnings": List[str],
29
+ "suggestions": List[str]
30
+ }
31
+ """
32
+ errors = []
33
+ warnings = []
34
+ suggestions = []
35
+
36
+ # Basic syntax validation
37
+ lines = dockerfile_content.split('\n')
38
+
39
+ # Check for required directives
40
+ has_from = any('FROM' in line for line in lines)
41
+ has_workdir = any('WORKDIR' in line for line in lines)
42
+ has_expose = any('EXPOSE' in line for line in lines)
43
+ has_cmd = any('CMD' in line or 'ENTRYPOINT' in line for line in lines)
44
+
45
+ if not has_from:
46
+ errors.append("Missing FROM directive - every Dockerfile must start with a base image")
47
+
48
+ if not has_workdir:
49
+ warnings.append("No WORKDIR directive found - consider setting a working directory")
50
+
51
+ if not has_expose:
52
+ warnings.append("No EXPOSE directive found - consider documenting the port your app uses")
53
+
54
+ if not has_cmd:
55
+ warnings.append("No CMD or ENTRYPOINT directive found - how will your container start?")
56
+
57
+ # Check CMD format (should be exec form)
58
+ for line in lines:
59
+ if line.strip().startswith('CMD '):
60
+ if 'CMD [' not in line:
61
+ errors.append(f"CMD should use exec form: CMD [\"command\", \"arg\"] not shell form")
62
+ elif '" "' in line or ' ' in line:
63
+ errors.append(f"CMD format error: arguments should be separate array elements")
64
+
65
+ # Check for common issues
66
+ if 'apt-get update' in dockerfile_content and 'rm -rf /var/lib/apt/lists/*' not in dockerfile_content:
67
+ suggestions.append("Consider cleaning apt cache: '&& rm -rf /var/lib/apt/lists/*'")
68
+
69
+ if 'pip install' in dockerfile_content and '--no-cache-dir' not in dockerfile_content:
70
+ suggestions.append("Consider using pip with --no-cache-dir to reduce image size")
71
+
72
+ if 'npm install' in dockerfile_content and '--production' not in dockerfile_content and 'ci' not in dockerfile_content:
73
+ suggestions.append("Consider using 'npm ci' or 'npm install --production' for production builds")
74
+
75
+ # Check for security best practices
76
+ user_found = any('USER ' in line for line in lines if not line.strip().startswith('#'))
77
+ # Check if it's an Apache/Nginx container that handles user switching internally
78
+ is_web_server = any(server in dockerfile_content.lower() for server in ['apache', 'nginx', 'httpd'])
79
+ has_www_data = 'www-data' in dockerfile_content or 'nginx' in dockerfile_content
80
+
81
+ if not user_found and not (is_web_server and has_www_data):
82
+ warnings.append("No USER directive found - running as root is a security risk")
83
+
84
+ # Try hadolint if available
85
+ hadolint_results = self._run_hadolint(dockerfile_content)
86
+ if hadolint_results:
87
+ errors.extend(hadolint_results.get('errors', []))
88
+ warnings.extend(hadolint_results.get('warnings', []))
89
+
90
+ is_valid = len(errors) == 0
91
+
92
+ return {
93
+ "valid": is_valid,
94
+ "errors": errors,
95
+ "warnings": warnings,
96
+ "suggestions": suggestions,
97
+ "score": self._calculate_score(errors, warnings, suggestions)
98
+ }
99
+
100
+ def _run_hadolint(self, dockerfile_content: str) -> Optional[Dict]:
101
+ """Run hadolint if available"""
102
+ if not shutil.which('hadolint'):
103
+ return None
104
+
105
+ try:
106
+ with tempfile.NamedTemporaryFile(mode='w', suffix='.Dockerfile', delete=False) as f:
107
+ f.write(dockerfile_content)
108
+ temp_path = f.name
109
+
110
+ result = subprocess.run(
111
+ ['hadolint', temp_path],
112
+ capture_output=True,
113
+ text=True,
114
+ timeout=5
115
+ )
116
+
117
+ os.unlink(temp_path)
118
+
119
+ if result.returncode == 0:
120
+ return {"errors": [], "warnings": []}
121
+
122
+ # Parse hadolint output
123
+ output_lines = result.stdout.split('\n')
124
+ errors = []
125
+ warnings = []
126
+
127
+ for line in output_lines:
128
+ if 'DL' in line or 'SC' in line: # Hadolint/ShellCheck codes
129
+ if 'error' in line.lower():
130
+ errors.append(line.split(':', 1)[-1].strip() if ':' in line else line)
131
+ elif 'warning' in line.lower():
132
+ warnings.append(line.split(':', 1)[-1].strip() if ':' in line else line)
133
+
134
+ return {"errors": errors, "warnings": warnings}
135
+
136
+ except Exception as e:
137
+ self.logger.warning(f"Hadolint validation failed: {str(e)}")
138
+ return None
139
+
140
+ def _calculate_score(self, errors: List, warnings: List, suggestions: List) -> int:
141
+ """Calculate quality score 0-100"""
142
+ score = 100
143
+ score -= len(errors) * 20 # Critical issues
144
+ score -= len(warnings) * 5 # Minor issues
145
+ score -= len(suggestions) * 2 # Improvements
146
+ return max(0, min(100, score))
147
+
148
+ def validate_docker_compose(self, compose_content: str) -> Dict:
149
+ """Validate docker-compose.yml content"""
150
+ errors = []
151
+ warnings = []
152
+ suggestions = []
153
+
154
+ lines = compose_content.split('\n')
155
+
156
+ # Check for required fields
157
+ has_version = any('version:' in line for line in lines)
158
+ has_services = any('services:' in line for line in lines)
159
+
160
+ if not has_version:
161
+ warnings.append("No version specified - consider adding 'version: \"3.8\"'")
162
+
163
+ if not has_services:
164
+ errors.append("Missing 'services:' section - compose file must define services")
165
+
166
+ # Check for common issues
167
+ if 'build:' in compose_content and 'context:' not in compose_content:
168
+ warnings.append("Build directive found without context - specify build context")
169
+
170
+ if 'depends_on:' in compose_content:
171
+ suggestions.append("Using depends_on: Consider adding healthchecks for better reliability")
172
+
173
+ # Check for volumes without persistence warning
174
+ if 'volumes:' not in compose_content and 'database' in compose_content.lower():
175
+ warnings.append("Database service found without volumes - data will be lost on restart")
176
+
177
+ is_valid = len(errors) == 0
178
+
179
+ return {
180
+ "valid": is_valid,
181
+ "errors": errors,
182
+ "warnings": warnings,
183
+ "suggestions": suggestions,
184
+ "score": self._calculate_score(errors, warnings, suggestions)
185
+ }
app/services/script_validator.py ADDED
@@ -0,0 +1,253 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Script and Nginx configuration validator
3
+ Tests generated bash scripts and nginx configurations
4
+ """
5
+
6
+ import re
7
+ import subprocess
8
+ import tempfile
9
+ import os
10
+ from pathlib import Path
11
+ from typing import Dict, List, Optional
12
+ import shutil
13
+
14
+
15
+ class ScriptValidator:
16
+ """Validates bash scripts and nginx configurations"""
17
+
18
+ def __init__(self, logger):
19
+ self.logger = logger
20
+
21
+ def validate_bash_script(self, script_content: str) -> Dict:
22
+ """
23
+ Validate bash script for syntax errors and best practices
24
+
25
+ Returns:
26
+ {
27
+ "valid": bool,
28
+ "errors": List[str],
29
+ "warnings": List[str],
30
+ "suggestions": List[str],
31
+ "score": int
32
+ }
33
+ """
34
+ errors = []
35
+ warnings = []
36
+ suggestions = []
37
+
38
+ lines = script_content.split('\n')
39
+
40
+ # Check for shebang
41
+ if not lines[0].startswith('#!'):
42
+ errors.append("Missing shebang - script should start with '#!/bin/bash'")
43
+ elif '#!/bin/bash' not in lines[0] and '#!/usr/bin/env bash' not in lines[0]:
44
+ warnings.append("Shebang should use bash: #!/bin/bash or #!/usr/bin/env bash")
45
+
46
+ # Check for set -e (exit on error)
47
+ has_set_e = any('set -e' in line or 'set -euo pipefail' in line for line in lines)
48
+ if not has_set_e:
49
+ suggestions.append("Consider adding 'set -e' to exit on errors")
50
+
51
+ # Check for dangerous commands without safeguards
52
+ dangerous_patterns = [
53
+ (r'\brm\s+-rf\s+/', "Using 'rm -rf /' is extremely dangerous"),
54
+ (r'\bchmod\s+777', "chmod 777 is a security risk - use specific permissions"),
55
+ (r'\bsudo\s+su\s+-', "Using 'sudo su -' unnecessarily escalates privileges"),
56
+ ]
57
+
58
+ for line_num, line in enumerate(lines, 1):
59
+ for pattern, message in dangerous_patterns:
60
+ if re.search(pattern, line):
61
+ warnings.append(f"Line {line_num}: {message}")
62
+
63
+ # Check for unquoted variables
64
+ unquoted_vars = re.findall(r'[^"\']\$\{?[A-Za-z_][A-Za-z0-9_]*\}?[^"\']', script_content)
65
+ if unquoted_vars:
66
+ suggestions.append("Consider quoting variables to prevent word splitting")
67
+
68
+ # Check for package manager best practices
69
+ if 'apt-get update' in script_content and 'apt-get upgrade' not in script_content:
70
+ suggestions.append("Consider running 'apt-get upgrade' after update for security patches")
71
+
72
+ if 'apt-get install' in script_content and '-y' not in script_content:
73
+ warnings.append("apt-get install should use -y flag for non-interactive installation")
74
+
75
+ # Check for error handling
76
+ if 'systemctl' in script_content and not any('||' in line or 'if' in line for line in lines if 'systemctl' in line):
77
+ suggestions.append("Consider adding error handling for systemctl commands")
78
+
79
+ # Check for firewall configuration
80
+ if any(db in script_content.lower() for db in ['mysql', 'postgresql', 'mongodb']) and 'ufw' not in script_content.lower() and 'firewall' not in script_content.lower():
81
+ warnings.append("Database installed without firewall configuration")
82
+
83
+ # Run shellcheck if available
84
+ shellcheck_results = self._run_shellcheck(script_content)
85
+ if shellcheck_results:
86
+ errors.extend(shellcheck_results.get('errors', []))
87
+ warnings.extend(shellcheck_results.get('warnings', []))
88
+
89
+ is_valid = len(errors) == 0
90
+
91
+ return {
92
+ "valid": is_valid,
93
+ "errors": errors,
94
+ "warnings": warnings,
95
+ "suggestions": suggestions,
96
+ "score": self._calculate_score(errors, warnings, suggestions)
97
+ }
98
+
99
+ def _run_shellcheck(self, script_content: str) -> Optional[Dict]:
100
+ """Run shellcheck if available"""
101
+ if not shutil.which('shellcheck'):
102
+ return None
103
+
104
+ try:
105
+ with tempfile.NamedTemporaryFile(mode='w', suffix='.sh', delete=False) as f:
106
+ f.write(script_content)
107
+ temp_path = f.name
108
+
109
+ result = subprocess.run(
110
+ ['shellcheck', '-f', 'json', temp_path],
111
+ capture_output=True,
112
+ text=True,
113
+ timeout=5
114
+ )
115
+
116
+ os.unlink(temp_path)
117
+
118
+ if result.returncode == 0:
119
+ return {"errors": [], "warnings": []}
120
+
121
+ # Parse shellcheck JSON output
122
+ import json
123
+ try:
124
+ issues = json.loads(result.stdout)
125
+ errors = []
126
+ warnings = []
127
+
128
+ for issue in issues:
129
+ level = issue.get('level', 'info')
130
+ message = f"Line {issue.get('line', '?')}: {issue.get('message', 'Unknown issue')}"
131
+
132
+ if level == 'error':
133
+ errors.append(message)
134
+ elif level == 'warning':
135
+ warnings.append(message)
136
+
137
+ return {"errors": errors, "warnings": warnings}
138
+ except:
139
+ return None
140
+
141
+ except Exception as e:
142
+ self.logger.warning(f"Shellcheck validation failed: {str(e)}")
143
+ return None
144
+
145
+ def validate_nginx_config(self, nginx_content: str) -> Dict:
146
+ """Validate nginx configuration"""
147
+ errors = []
148
+ warnings = []
149
+ suggestions = []
150
+
151
+ lines = nginx_content.split('\n')
152
+
153
+ # Check for server block
154
+ if 'server {' not in nginx_content:
155
+ errors.append("Missing 'server' block - nginx config must define a server")
156
+
157
+ # Check for listen directive
158
+ if not any('listen' in line for line in lines):
159
+ errors.append("Missing 'listen' directive - must specify port")
160
+
161
+ # Check for server_name
162
+ if not any('server_name' in line for line in lines):
163
+ warnings.append("Missing 'server_name' directive - consider specifying domain")
164
+
165
+ # Check for root or proxy_pass
166
+ has_root = any('root' in line for line in lines if not line.strip().startswith('#'))
167
+ has_proxy = any('proxy_pass' in line for line in lines if not line.strip().startswith('#'))
168
+
169
+ if not has_root and not has_proxy:
170
+ warnings.append("No 'root' or 'proxy_pass' directive - where should nginx serve from?")
171
+
172
+ # Check for SSL/TLS if port 443
173
+ if '443' in nginx_content:
174
+ if 'ssl_certificate' not in nginx_content:
175
+ warnings.append("Port 443 configured but no SSL certificate specified")
176
+ if 'ssl_certificate_key' not in nginx_content:
177
+ warnings.append("Port 443 configured but no SSL key specified")
178
+
179
+ # Check for security headers
180
+ security_headers = [
181
+ 'X-Frame-Options',
182
+ 'X-Content-Type-Options',
183
+ 'X-XSS-Protection',
184
+ ]
185
+
186
+ missing_headers = [h for h in security_headers if h not in nginx_content]
187
+ if missing_headers:
188
+ suggestions.append(f"Consider adding security headers: {', '.join(missing_headers)}")
189
+
190
+ # Check for gzip compression
191
+ if 'gzip' not in nginx_content:
192
+ suggestions.append("Consider enabling gzip compression for better performance")
193
+
194
+ # Check for client_max_body_size
195
+ if 'client_max_body_size' not in nginx_content:
196
+ suggestions.append("Consider setting client_max_body_size to prevent upload issues")
197
+
198
+ # Check for access_log and error_log
199
+ if 'access_log' not in nginx_content:
200
+ suggestions.append("Consider specifying access_log location")
201
+
202
+ if 'error_log' not in nginx_content:
203
+ suggestions.append("Consider specifying error_log location")
204
+
205
+ # Try nginx -t if available (syntax check)
206
+ nginx_test = self._test_nginx_syntax(nginx_content)
207
+ if nginx_test and not nginx_test['valid']:
208
+ errors.extend(nginx_test.get('errors', []))
209
+
210
+ is_valid = len(errors) == 0
211
+
212
+ return {
213
+ "valid": is_valid,
214
+ "errors": errors,
215
+ "warnings": warnings,
216
+ "suggestions": suggestions,
217
+ "score": self._calculate_score(errors, warnings, suggestions)
218
+ }
219
+
220
+ def _test_nginx_syntax(self, nginx_content: str) -> Optional[Dict]:
221
+ """Test nginx syntax if nginx is available"""
222
+ if not shutil.which('nginx'):
223
+ return None
224
+
225
+ try:
226
+ with tempfile.TemporaryDirectory() as tmpdir:
227
+ conf_path = Path(tmpdir) / 'nginx.conf'
228
+ conf_path.write_text(nginx_content)
229
+
230
+ result = subprocess.run(
231
+ ['nginx', '-t', '-c', str(conf_path)],
232
+ capture_output=True,
233
+ text=True,
234
+ timeout=5
235
+ )
236
+
237
+ if result.returncode == 0:
238
+ return {"valid": True, "errors": []}
239
+ else:
240
+ error_msg = result.stderr.strip()
241
+ return {"valid": False, "errors": [f"Nginx syntax error: {error_msg}"]}
242
+
243
+ except Exception as e:
244
+ self.logger.warning(f"Nginx syntax test failed: {str(e)}")
245
+ return None
246
+
247
+ def _calculate_score(self, errors: List, warnings: List, suggestions: List) -> int:
248
+ """Calculate quality score 0-100"""
249
+ score = 100
250
+ score -= len(errors) * 20 # Critical issues
251
+ score -= len(warnings) * 5 # Minor issues
252
+ score -= len(suggestions) * 2 # Improvements
253
+ return max(0, min(100, score))
app/templates/docker/docker-build.sh.j2 ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # Docker Build and Push Script
3
+ # Generated by DeployMate
4
+
5
+ set -e
6
+
7
+ # Configuration
8
+ IMAGE_NAME="{{ config.projectName or 'myapp' }}"
9
+ REGISTRY="{{ config.registry or 'docker.io' }}"
10
+ TAG="{{ config.tag or 'latest' }}"
11
+ DOCKERFILE="Dockerfile"
12
+
13
+ # Colors for output
14
+ RED='\033[0;31m'
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ NC='\033[0m' # No Color
18
+
19
+ echo -e "${GREEN}🐳 Docker Build Script${NC}"
20
+ echo "================================"
21
+
22
+ # Check if Docker is installed
23
+ if ! command -v docker &> /dev/null; then
24
+ echo -e "${RED}Error: Docker is not installed${NC}"
25
+ exit 1
26
+ fi
27
+
28
+ # Build the image
29
+ echo -e "${YELLOW}Building Docker image...${NC}"
30
+ docker build -t ${IMAGE_NAME}:${TAG} -f ${DOCKERFILE} .
31
+
32
+ if [ $? -eq 0 ]; then
33
+ echo -e "${GREEN}✓ Build successful${NC}"
34
+ else
35
+ echo -e "${RED}✗ Build failed${NC}"
36
+ exit 1
37
+ fi
38
+
39
+ # Tag for registry
40
+ if [ "$REGISTRY" != "docker.io" ] || [ "$REGISTRY" != "localhost" ]; then
41
+ echo -e "${YELLOW}Tagging image for registry...${NC}"
42
+ docker tag ${IMAGE_NAME}:${TAG} ${REGISTRY}/${IMAGE_NAME}:${TAG}
43
+ fi
44
+
45
+ # Ask to push
46
+ read -p "Do you want to push to registry? (y/n) " -n 1 -r
47
+ echo
48
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
49
+ echo -e "${YELLOW}Pushing to registry...${NC}"
50
+ docker push ${REGISTRY}/${IMAGE_NAME}:${TAG}
51
+
52
+ if [ $? -eq 0 ]; then
53
+ echo -e "${GREEN}✓ Push successful${NC}"
54
+ else
55
+ echo -e "${RED}✗ Push failed${NC}"
56
+ exit 1
57
+ fi
58
+ fi
59
+
60
+ echo -e "${GREEN}✓ All done!${NC}"
61
+ echo ""
62
+ echo "Run your container with:"
63
+ echo " docker run -p {{ config.appPort or '3000' }}:{{ config.appPort or '3000' }} ${IMAGE_NAME}:${TAG}"
64
+ echo ""
65
+ echo "Or use docker-compose:"
66
+ echo " docker-compose up -d"
app/templates/docker/docker-compose.yml.j2 ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '3.8'
2
+
3
+ services:
4
+ app:
5
+ build:
6
+ context: .
7
+ dockerfile: Dockerfile
8
+ container_name: {{ config.projectName or 'app' }}
9
+ {% if config.mode == 'development' %}
10
+ volumes:
11
+ - .:/app
12
+ - /app/node_modules
13
+ environment:
14
+ - NODE_ENV=development
15
+ {% else %}
16
+ environment:
17
+ - NODE_ENV=production
18
+ {% endif %}
19
+ ports:
20
+ - "{{ config.appPort or '3000' }}:{{ config.appPort or '3000' }}"
21
+ {% if config.services.database or config.services.redis %}
22
+ depends_on:
23
+ {% if config.services.database %}
24
+ - {{ config.services.database }}
25
+ {% endif %}
26
+ {% if config.services.redis %}
27
+ - redis
28
+ {% endif %}
29
+ {% endif %}
30
+ networks:
31
+ - app-network
32
+ {% if config.mode == 'production' %}
33
+ restart: unless-stopped
34
+ {% endif %}
35
+
36
+ {% if config.services.database == 'postgresql' %}
37
+ postgres:
38
+ image: postgres:{{ config.dbVersion or '15' }}-alpine
39
+ container_name: {{ config.projectName or 'app' }}_postgres
40
+ environment:
41
+ - POSTGRES_USER={{ '${POSTGRES_USER:-postgres}' }}
42
+ - POSTGRES_PASSWORD={{ '${POSTGRES_PASSWORD:-postgres}' }}
43
+ - POSTGRES_DB={{ '${POSTGRES_DB:-' ~ (config.projectName or 'app') ~ '}' }}
44
+ {% if config.volumePersistence %}
45
+ volumes:
46
+ - postgres_data:/var/lib/postgresql/data
47
+ {% endif %}
48
+ ports:
49
+ - "{{ config.dbPort or '5432' }}:5432"
50
+ networks:
51
+ - app-network
52
+ {% if config.mode == 'production' %}
53
+ restart: unless-stopped
54
+ {% endif %}
55
+ {% endif %}
56
+
57
+ {% if config.services.database == 'mysql' %}
58
+ mysql:
59
+ image: mysql:{{ config.dbVersion or '8' }}
60
+ container_name: {{ config.projectName or 'app' }}_mysql
61
+ environment:
62
+ - MYSQL_ROOT_PASSWORD={{ '${MYSQL_ROOT_PASSWORD:-root}' }}
63
+ - MYSQL_DATABASE={{ '${MYSQL_DATABASE:-' ~ (config.projectName or 'app') ~ '}' }}
64
+ - MYSQL_USER={{ '${MYSQL_USER:-user}' }}
65
+ - MYSQL_PASSWORD={{ '${MYSQL_PASSWORD:-password}' }}
66
+ {% if config.volumePersistence %}
67
+ volumes:
68
+ - mysql_data:/var/lib/mysql
69
+ {% endif %}
70
+ ports:
71
+ - "{{ config.dbPort or '3306' }}:3306"
72
+ networks:
73
+ - app-network
74
+ {% if config.mode == 'production' %}
75
+ restart: unless-stopped
76
+ {% endif %}
77
+ {% endif %}
78
+
79
+ {% if config.services.database == 'mongodb' %}
80
+ mongodb:
81
+ image: mongo:{{ config.dbVersion or '7' }}
82
+ container_name: {{ config.projectName or 'app' }}_mongodb
83
+ environment:
84
+ - MONGO_INITDB_ROOT_USERNAME={{ '${MONGO_USERNAME:-admin}' }}
85
+ - MONGO_INITDB_ROOT_PASSWORD={{ '${MONGO_PASSWORD:-admin}' }}
86
+ - MONGO_INITDB_DATABASE={{ '${MONGO_DATABASE:-' ~ (config.projectName or 'app') ~ '}' }}
87
+ {% if config.volumePersistence %}
88
+ volumes:
89
+ - mongodb_data:/data/db
90
+ {% endif %}
91
+ ports:
92
+ - "{{ config.dbPort or '27017' }}:27017"
93
+ networks:
94
+ - app-network
95
+ {% if config.mode == 'production' %}
96
+ restart: unless-stopped
97
+ {% endif %}
98
+ {% endif %}
99
+
100
+ {% if config.services.redis %}
101
+ redis:
102
+ image: redis:{{ config.redisVersion or '7' }}-alpine
103
+ container_name: {{ config.projectName or 'app' }}_redis
104
+ {% if config.volumePersistence %}
105
+ volumes:
106
+ - redis_data:/data
107
+ {% endif %}
108
+ ports:
109
+ - "{{ config.redisPort or '6379' }}:6379"
110
+ networks:
111
+ - app-network
112
+ {% if config.mode == 'production' %}
113
+ restart: unless-stopped
114
+ {% endif %}
115
+ {% endif %}
116
+
117
+ {% if config.services.nginx %}
118
+ nginx:
119
+ image: nginx:alpine
120
+ container_name: {{ config.projectName or 'app' }}_nginx
121
+ ports:
122
+ - "{{ config.nginxPort or '80' }}:80"
123
+ {% if config.ssl %}
124
+ - "443:443"
125
+ {% endif %}
126
+ volumes:
127
+ - ./nginx.conf:/etc/nginx/nginx.conf:ro
128
+ {% if config.ssl %}
129
+ - ./ssl:/etc/nginx/ssl:ro
130
+ {% endif %}
131
+ depends_on:
132
+ - app
133
+ networks:
134
+ - app-network
135
+ {% if config.mode == 'production' %}
136
+ restart: unless-stopped
137
+ {% endif %}
138
+ {% endif %}
139
+
140
+ networks:
141
+ app-network:
142
+ driver: bridge
143
+
144
+ {% if config.volumePersistence %}
145
+ volumes:
146
+ {% if config.services.database == 'postgresql' %}
147
+ postgres_data:
148
+ {% endif %}
149
+ {% if config.services.database == 'mysql' %}
150
+ mysql_data:
151
+ {% endif %}
152
+ {% if config.services.database == 'mongodb' %}
153
+ mongodb_data:
154
+ {% endif %}
155
+ {% if config.services.redis %}
156
+ redis_data:
157
+ {% endif %}
158
+ {% endif %}
app/templates/docker/dockerfile_dotnet.j2 ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% if config.multiStage %}
2
+ # Multi-stage build for .NET
3
+ FROM mcr.microsoft.com/dotnet/sdk:{{ config.dotnetVersion or '8.0' }} AS builder
4
+
5
+ WORKDIR /app
6
+
7
+ # Copy csproj and restore dependencies
8
+ COPY *.csproj ./
9
+ RUN dotnet restore
10
+
11
+ # Copy everything else and build
12
+ COPY . ./
13
+ RUN dotnet publish -c Release -o out
14
+
15
+ # Production stage
16
+ FROM mcr.microsoft.com/dotnet/aspnet:{{ config.dotnetVersion or '8.0' }}
17
+
18
+ WORKDIR /app
19
+
20
+ # Copy build output from builder
21
+ COPY --from=builder /app/out .
22
+
23
+ {% else %}
24
+ # .NET {{ config.dotnetVersion or '8.0' }} Dockerfile
25
+ FROM mcr.microsoft.com/dotnet/sdk:{{ config.dotnetVersion or '8.0' }}
26
+
27
+ WORKDIR /app
28
+
29
+ # Copy csproj and restore
30
+ COPY *.csproj ./
31
+ RUN dotnet restore
32
+
33
+ # Copy everything else
34
+ COPY . ./
35
+
36
+ {% if not config.developmentMode %}
37
+ # Build and publish
38
+ RUN dotnet publish -c Release -o out
39
+ {% endif %}
40
+ {% endif %}
41
+
42
+ # Expose port
43
+ EXPOSE {{ config.port or '5000' }}
44
+
45
+ {% if config.developmentMode %}
46
+ # Development mode
47
+ ENV ASPNETCORE_ENVIRONMENT=Development
48
+ ENV ASPNETCORE_URLS=http://+:{{ config.port or '5000' }}
49
+
50
+ CMD ["dotnet", "watch", "run"]
51
+ {% else %}
52
+ # Production mode
53
+ ENV ASPNETCORE_ENVIRONMENT=Production
54
+ ENV ASPNETCORE_URLS=http://+:{{ config.port or '5000' }}
55
+
56
+ # Set memory and other runtime options
57
+ ENV DOTNET_EnableDiagnostics=0
58
+
59
+ # Start application from published output
60
+ CMD ["dotnet", "{{ config.projectName or 'app' }}.dll"]
61
+ {% endif %}
app/templates/docker/dockerfile_go.j2 ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% if config.multiStage %}
2
+ # Multi-stage build for Go
3
+ FROM golang:{{ config.goVersion or '1.21' }}-alpine AS builder
4
+
5
+ WORKDIR /app
6
+
7
+ # Install git for go mod download
8
+ RUN apk add --no-cache git
9
+
10
+ # Copy go mod files
11
+ COPY go.mod go.sum* ./
12
+
13
+ # Download dependencies
14
+ RUN go mod download
15
+
16
+ # Copy source code
17
+ COPY . .
18
+
19
+ # Build application with static linking and optimizations
20
+ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags="-w -s" -o main {{ config.mainPackage or '.' }}
21
+
22
+ # Production stage - minimal image
23
+ FROM alpine:latest
24
+
25
+ # Install ca-certificates for HTTPS
26
+ RUN apk --no-cache add ca-certificates
27
+
28
+ WORKDIR /root/
29
+
30
+ # Copy binary from builder
31
+ COPY --from=builder /app/main .
32
+
33
+ {% else %}
34
+ # Go {{ config.goVersion or '1.21' }} Dockerfile
35
+ FROM golang:{{ config.goVersion or '1.21' }}-alpine
36
+
37
+ WORKDIR /app
38
+
39
+ # Install build dependencies
40
+ RUN apk add --no-cache git
41
+
42
+ # Copy go mod files
43
+ COPY go.mod go.sum* ./
44
+
45
+ # Download dependencies
46
+ RUN go mod download
47
+
48
+ # Copy source code
49
+ COPY . .
50
+
51
+ {% if not config.developmentMode %}
52
+ # Build application
53
+ RUN go build -o main {{ config.mainPackage or '.' }}
54
+ {% endif %}
55
+ {% endif %}
56
+
57
+ # Expose port
58
+ EXPOSE {{ config.port or '8080' }}
59
+
60
+ # Create non-root user
61
+ RUN addgroup -g 1001 -S golang && \
62
+ adduser -S golang -u 1001 && \
63
+ chown -R golang:golang /root/
64
+
65
+ USER golang
66
+
67
+ {% if config.developmentMode %}
68
+ # Development mode with hot-reload
69
+ RUN go install github.com/cosmtrek/air@latest
70
+
71
+ CMD ["air", "-c", ".air.toml"]
72
+ {% else %}
73
+ # Production mode
74
+ CMD ["./main"]
75
+ {% endif %}
app/templates/docker/dockerfile_java.j2 ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% if config.multiStage %}
2
+ # Multi-stage build for Java
3
+ FROM maven:{{ config.javaVersion or '17' }}-alpine AS builder
4
+
5
+ WORKDIR /app
6
+
7
+ # Copy pom.xml
8
+ COPY pom.xml .
9
+
10
+ # Download dependencies
11
+ RUN mvn dependency:go-offline
12
+
13
+ # Copy source code
14
+ COPY src ./src
15
+
16
+ # Build application
17
+ RUN mvn clean package -DskipTests
18
+
19
+ # Production stage - JRE only for smaller image
20
+ FROM openjdk:{{ config.javaVersion or '17' }}-jre-alpine
21
+
22
+ WORKDIR /app
23
+
24
+ # Install dumb-init for proper signal handling
25
+ RUN apk add --no-cache dumb-init
26
+
27
+ # Copy JAR from builder
28
+ COPY --from=builder /app/target/*.jar app.jar
29
+
30
+ # Create non-root user
31
+ RUN addgroup -g 1001 -S java && \
32
+ adduser -S java -u 1001 && \
33
+ chown -R java:java /app
34
+
35
+ USER java
36
+
37
+ # Expose port
38
+ EXPOSE {{ config.port or '8080' }}
39
+
40
+ # Production mode
41
+ ENV SPRING_PROFILES_ACTIVE=prod
42
+
43
+ # Start application
44
+ CMD ["java", "-jar", "app.jar"]
45
+
46
+ {% else %}
47
+ # Java {{ config.javaVersion or '17' }} Dockerfile
48
+ FROM openjdk:{{ config.javaVersion or '17' }}-jdk-alpine
49
+
50
+ WORKDIR /app
51
+
52
+ # Install Maven
53
+ RUN apk add --no-cache maven
54
+
55
+ # Copy pom.xml
56
+ COPY pom.xml .
57
+
58
+ # Download dependencies
59
+ RUN mvn dependency:go-offline
60
+
61
+ # Copy source code
62
+ COPY src ./src
63
+
64
+ {% if not config.developmentMode %}
65
+ # Build application
66
+ RUN mvn clean package -DskipTests
67
+ {% endif %}
68
+
69
+ # Create non-root user
70
+ RUN addgroup -g 1001 -S java && \
71
+ adduser -S java -u 1001 && \
72
+ chown -R java:java /app
73
+
74
+ USER java
75
+
76
+ # Expose port
77
+ EXPOSE {{ config.port or '8080' }}
78
+
79
+ {% if config.developmentMode %}
80
+ # Development mode
81
+ ENV SPRING_PROFILES_ACTIVE=dev
82
+
83
+ CMD ["mvn", "spring-boot:run"]
84
+ {% else %}
85
+ # Production mode
86
+ ENV SPRING_PROFILES_ACTIVE=prod
87
+
88
+ # Start application
89
+ CMD ["java", "-jar", "target/*.jar"]
90
+ {% endif %}
91
+
92
+ {% endif %}
app/templates/docker/dockerfile_nodejs.j2 ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% if config.multiStage %}
2
+ # Multi-stage build for Node.js
3
+ FROM node:{{ config.nodeVersion or '18' }}-alpine AS builder
4
+
5
+ WORKDIR /app
6
+
7
+ # Copy package files
8
+ COPY package*.json ./
9
+
10
+ # Install dependencies
11
+ RUN npm ci --only=production
12
+
13
+ # Copy source code
14
+ COPY . .
15
+
16
+ {% if config.buildCommand %}
17
+ # Build application
18
+ RUN {{ config.buildCommand }}
19
+ {% endif %}
20
+
21
+ # Production stage
22
+ FROM node:{{ config.nodeVersion or '18' }}-alpine
23
+
24
+ WORKDIR /app
25
+
26
+ # Copy from builder
27
+ COPY --from=builder /app/node_modules ./node_modules
28
+ COPY --from=builder /app .
29
+
30
+ {% else %}
31
+ # Node.js {{ config.nodeVersion or '18' }} Dockerfile
32
+ FROM node:{{ config.nodeVersion or '18' }}-alpine
33
+
34
+ WORKDIR /app
35
+
36
+ # Copy package files
37
+ COPY package*.json ./
38
+
39
+ # Install dependencies
40
+ {% if config.developmentMode %}
41
+ RUN npm install
42
+ {% else %}
43
+ RUN npm ci --only=production
44
+ {% endif %}
45
+
46
+ # Copy application code
47
+ COPY . .
48
+
49
+ {% if config.buildCommand and not config.developmentMode %}
50
+ # Build application
51
+ RUN {{ config.buildCommand }}
52
+ {% endif %}
53
+ {% endif %}
54
+
55
+ # Create non-root user
56
+ RUN addgroup -g 1001 -S nodejs && \
57
+ adduser -S nodejs -u 1001 && \
58
+ chown -R nodejs:nodejs /app
59
+
60
+ USER nodejs
61
+
62
+ # Expose port
63
+ EXPOSE {{ config.port or '3000' }}
64
+
65
+ {% if config.developmentMode %}
66
+ # Development mode
67
+ ENV NODE_ENV=development
68
+
69
+ # Install development dependencies
70
+ CMD ["npm", "run", "dev"]
71
+ {% else %}
72
+ # Production mode
73
+ ENV NODE_ENV=production
74
+
75
+ # Start application
76
+ CMD ["node", "{{ config.entrypoint or 'index.js' }}"]
77
+ {% endif %}
app/templates/docker/dockerfile_php.j2 ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # PHP {{ config.phpVersion or '8.3' }} Dockerfile with Apache
2
+ FROM php:{{ config.phpVersion or '8.3' }}-apache
3
+
4
+ WORKDIR /var/www/html
5
+
6
+ # Install system dependencies
7
+ RUN apt-get update && apt-get install -y \
8
+ libpng-dev \
9
+ libjpeg-dev \
10
+ libfreetype6-dev \
11
+ zip \
12
+ unzip \
13
+ git \
14
+ && rm -rf /var/lib/apt/lists/*
15
+
16
+ # Install PHP extensions
17
+ RUN docker-php-ext-configure gd --with-freetype --with-jpeg && \
18
+ docker-php-ext-install -j$(nproc) \
19
+ gd \
20
+ pdo \
21
+ pdo_mysql \
22
+ mysqli \
23
+ opcache
24
+
25
+ {% if config.composer %}
26
+ # Install Composer
27
+ COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
28
+
29
+ # Copy composer files
30
+ COPY composer.json composer.lock* ./
31
+
32
+ # Install dependencies
33
+ {% if config.developmentMode %}
34
+ RUN composer install --no-interaction
35
+ {% else %}
36
+ RUN composer install --no-dev --no-interaction --optimize-autoloader
37
+ {% endif %}
38
+ {% endif %}
39
+
40
+ # Copy application code
41
+ COPY . .
42
+
43
+ # Set permissions
44
+ RUN chown -R www-data:www-data /var/www/html && \
45
+ chmod -R 755 /var/www/html
46
+
47
+ {% if not config.developmentMode %}
48
+ # Enable Apache rewrite module
49
+ RUN a2enmod rewrite
50
+
51
+ # Configure Apache for production
52
+ RUN echo "ServerTokens Prod" >> /etc/apache2/apache2.conf && \
53
+ echo "ServerSignature Off" >> /etc/apache2/apache2.conf
54
+ {% endif %}
55
+
56
+ # Expose port
57
+ EXPOSE {{ config.port or '80' }}
58
+
59
+ {% if config.developmentMode %}
60
+ # Development mode
61
+ ENV ENVIRONMENT=development
62
+
63
+ CMD ["apache2-foreground"]
64
+ {% else %}
65
+ # Production mode
66
+ ENV ENVIRONMENT=production
67
+
68
+ # Start Apache
69
+ CMD ["apache2-foreground"]
70
+ {% endif %}
app/templates/docker/dockerfile_python.j2 ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% if config.multiStage %}
2
+ # Multi-stage build for Python {{ config.pythonVersion or '3.11' }}
3
+ FROM python:{{ config.pythonVersion or '3.11' }}-slim AS builder
4
+
5
+ WORKDIR /app
6
+
7
+ # Install system dependencies
8
+ RUN apt-get update && apt-get install -y --no-install-recommends \
9
+ gcc \
10
+ && rm -rf /var/lib/apt/lists/*
11
+
12
+ # Copy requirements
13
+ COPY requirements.txt .
14
+
15
+ # Install Python dependencies to /opt/venv
16
+ RUN python -m venv /opt/venv
17
+ ENV PATH="/opt/venv/bin:$PATH"
18
+ RUN pip install --no-cache-dir -r requirements.txt
19
+
20
+ # Runtime stage
21
+ FROM python:{{ config.pythonVersion or '3.11' }}-slim
22
+
23
+ # Set environment variables
24
+ ENV PATH="/opt/venv/bin:$PATH" \
25
+ PYTHONUNBUFFERED=1 \
26
+ PYTHONDONTWRITEBYTECODE=1
27
+
28
+ WORKDIR /app
29
+
30
+ # Install runtime dependencies only
31
+ RUN apt-get update && apt-get install -y --no-install-recommends \
32
+ ca-certificates \
33
+ && rm -rf /var/lib/apt/lists/*
34
+
35
+ # Copy venv from builder
36
+ COPY --from=builder /opt/venv /opt/venv
37
+
38
+ # Copy application code
39
+ COPY . .
40
+
41
+ # Create non-root user
42
+ RUN useradd --create-home --shell /bin/bash --uid 1000 app && \
43
+ chown -R app:app /app
44
+
45
+ USER app
46
+
47
+ # Expose port
48
+ EXPOSE {{ config.port or '8000' }}
49
+
50
+ # Production mode
51
+ {% if config.framework == 'fastapi' or config.framework == 'uvicorn' %}
52
+ CMD ["uvicorn", "{{ config.entrypoint or 'app.main:app' }}", "--host", "0.0.0.0", "--port", "{{ config.port or '8000' }}"]
53
+ {% elif config.framework == 'django' %}
54
+ CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:{{ config.port or '8000' }}"]
55
+ {% elif config.framework == 'flask' %}
56
+ CMD ["gunicorn", "{{ config.entrypoint or 'app:app' }}", "--bind", "0.0.0.0:{{ config.port or '8000' }}"]
57
+ {% else %}
58
+ CMD ["python", "{{ config.entrypoint or 'app.py' }}"]
59
+ {% endif %}
60
+
61
+ {% else %}
62
+ # Single-stage Python {{ config.pythonVersion or '3.11' }} Dockerfile
63
+ FROM python:{{ config.pythonVersion or '3.11' }}-slim
64
+
65
+ # Set environment variables
66
+ ENV PYTHONUNBUFFERED=1 \
67
+ PYTHONDONTWRITEBYTECODE=1
68
+
69
+ WORKDIR /app
70
+
71
+ # Install system dependencies
72
+ RUN apt-get update && apt-get install -y --no-install-recommends \
73
+ gcc \
74
+ && rm -rf /var/lib/apt/lists/*
75
+
76
+ # Copy requirements
77
+ COPY requirements.txt .
78
+
79
+ {% if config.developmentMode %}
80
+ # Development mode - install all dependencies
81
+ RUN pip install --no-cache-dir -r requirements.txt
82
+ {% else %}
83
+ # Production mode - use venv for cleaner dependencies
84
+ RUN python -m venv /opt/venv
85
+ ENV PATH="/opt/venv/bin:$PATH"
86
+ RUN pip install --no-cache-dir -r requirements.txt
87
+ {% endif %}
88
+
89
+ # Copy application code
90
+ COPY . .
91
+
92
+ # Create non-root user
93
+ RUN useradd --create-home --shell /bin/bash --uid 1000 app && \
94
+ chown -R app:app /app
95
+
96
+ USER app
97
+
98
+ # Expose port
99
+ EXPOSE {{ config.port or '8000' }}
100
+
101
+ {% if config.developmentMode %}
102
+ # Development mode
103
+ ENV PYTHONUNBUFFERED=1
104
+
105
+ {% if config.framework == 'fastapi' or config.framework == 'uvicorn' %}
106
+ # FastAPI development server with auto-reload
107
+ CMD ["uvicorn", "{{ config.entrypoint or 'app.main:app' }}", "--host", "0.0.0.0", "--port", "{{ config.port or '8000' }}", "--reload"]
108
+ {% elif config.framework == 'django' %}
109
+ # Django development server
110
+ CMD ["python", "manage.py", "runserver", "0.0.0.0:{{ config.port or '8000' }}"]
111
+ {% elif config.framework == 'flask' %}
112
+ # Flask development server
113
+ CMD ["flask", "run", "--host=0.0.0.0", "--port={{ config.port or '8000' }}"]
114
+ {% else %}
115
+ # Custom Python application
116
+ CMD ["python", "{{ config.entrypoint or 'app.py' }}"]
117
+ {% endif %}
118
+
119
+ {% else %}
120
+ # Production mode
121
+ {% if config.framework == 'fastapi' or config.framework == 'uvicorn' %}
122
+ CMD ["uvicorn", "{{ config.entrypoint or 'app.main:app' }}", "--host", "0.0.0.0", "--port", "{{ config.port or '8000' }}"]
123
+ {% elif config.framework == 'django' %}
124
+ CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:{{ config.port or '8000' }}"]
125
+ {% elif config.framework == 'flask' %}
126
+ CMD ["gunicorn", "{{ config.entrypoint or 'app:app' }}", "--bind", "0.0.0.0:{{ config.port or '8000' }}"]
127
+ {% else %}
128
+ CMD ["python", "{{ config.entrypoint or 'app.py' }}"]
129
+ {% endif %}
130
+ {% endif %}
131
+
132
+ {% endif %}
app/templates/docker/dockerfile_ruby.j2 ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Ruby {{ config.rubyVersion or '3.2' }} Dockerfile
2
+ FROM ruby:{{ config.rubyVersion or '3.2' }}-alpine
3
+
4
+ WORKDIR /app
5
+
6
+ # Install dependencies
7
+ RUN apk add --no-cache \
8
+ build-base \
9
+ postgresql-dev \
10
+ tzdata \
11
+ nodejs \
12
+ yarn
13
+
14
+ # Copy Gemfile
15
+ COPY Gemfile Gemfile.lock* ./
16
+
17
+ # Install gems
18
+ {% if config.developmentMode %}
19
+ RUN bundle install
20
+ {% else %}
21
+ RUN bundle install --without development test --deployment
22
+ {% endif %}
23
+
24
+ # Copy application code
25
+ COPY . .
26
+
27
+ # Create non-root user
28
+ RUN addgroup -g 1001 -S ruby && \
29
+ adduser -S ruby -u 1001 && \
30
+ chown -R ruby:ruby /app
31
+
32
+ USER ruby
33
+
34
+ # Expose port
35
+ EXPOSE {{ config.port or '3000' }}
36
+
37
+ {% if config.developmentMode %}
38
+ # Development mode
39
+ ENV RAILS_ENV=development
40
+
41
+ CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0", "-p", "{{ config.port or '3000' }}"]
42
+ {% else %}
43
+ # Production mode
44
+ ENV RAILS_ENV=production
45
+ ENV RACK_ENV=production
46
+
47
+ # Precompile assets for Rails
48
+ {% if config.framework == 'rails' %}
49
+ RUN bundle exec rake assets:precompile
50
+ {% endif %}
51
+
52
+ # Start application with Puma (production-grade server)
53
+ CMD ["bundle", "exec", "puma", "-b", "tcp://0.0.0.0:{{ config.port or '3000' }}"]
54
+ {% endif %}
app/templates/docker/dockerignore.j2 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
app/templates/docker/env.example.j2 ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Environment Variables Template
2
+ # Copy this file to .env and fill in your values
3
+
4
+ # Application
5
+ APP_NAME={{ config.projectName or 'myapp' }}
6
+ APP_ENV={{ config.mode or 'production' }}
7
+ APP_PORT={{ config.appPort or '3000' }}
8
+ APP_URL=http://localhost:{{ config.appPort or '3000' }}
9
+
10
+ {% if config.services.database == 'postgresql' %}
11
+ # PostgreSQL Database
12
+ POSTGRES_HOST=postgres
13
+ POSTGRES_PORT=5432
14
+ POSTGRES_USER=postgres
15
+ POSTGRES_PASSWORD=changeme_secure_password
16
+ POSTGRES_DB={{ config.projectName or 'myapp' }}
17
+ DATABASE_URL=postgresql://postgres:changeme_secure_password@postgres:5432/{{ config.projectName or 'myapp' }}
18
+ {% endif %}
19
+
20
+ {% if config.services.database == 'mysql' %}
21
+ # MySQL Database
22
+ MYSQL_HOST=mysql
23
+ MYSQL_PORT=3306
24
+ MYSQL_ROOT_PASSWORD=changeme_root_password
25
+ MYSQL_DATABASE={{ config.projectName or 'myapp' }}
26
+ MYSQL_USER=user
27
+ MYSQL_PASSWORD=changeme_secure_password
28
+ DATABASE_URL=mysql://user:changeme_secure_password@mysql:3306/{{ config.projectName or 'myapp' }}
29
+ {% endif %}
30
+
31
+ {% if config.services.database == 'mongodb' %}
32
+ # MongoDB Database
33
+ MONGO_HOST=mongodb
34
+ MONGO_PORT=27017
35
+ MONGO_USERNAME=admin
36
+ MONGO_PASSWORD=changeme_secure_password
37
+ MONGO_DATABASE={{ config.projectName or 'myapp' }}
38
+ MONGO_URL=mongodb://admin:changeme_secure_password@mongodb:27017/{{ config.projectName or 'myapp' }}?authSource=admin
39
+ {% endif %}
40
+
41
+ {% if config.services.redis %}
42
+ # Redis
43
+ REDIS_HOST=redis
44
+ REDIS_PORT=6379
45
+ REDIS_URL=redis://redis:6379
46
+ {% endif %}
47
+
48
+ {% if config.services.nginx %}
49
+ # Nginx
50
+ NGINX_PORT={{ config.nginxPort or '80' }}
51
+ {% if config.ssl %}
52
+ NGINX_SSL_PORT=443
53
+ {% endif %}
54
+ {% endif %}
55
+
56
+ # Security (Change these!)
57
+ SECRET_KEY=changeme_random_secret_key_here
58
+ JWT_SECRET=changeme_jwt_secret_here
59
+ SESSION_SECRET=changeme_session_secret_here
60
+
61
+ # Logging
62
+ LOG_LEVEL={{ 'debug' if config.mode == 'development' else 'info' }}
63
+
64
+ {% if config.mode == 'development' %}
65
+ # Development Only
66
+ DEBUG=true
67
+ HOT_RELOAD=true
68
+ {% else %}
69
+ # Production Only
70
+ DEBUG=false
71
+ {% endif %}
app/templates/systemd_setup.j2 CHANGED
@@ -17,6 +17,6 @@ Restart=always
17
  WantedBy=multi-user.target
18
  EOF
19
 
20
- sudo systemctl daemon-reload
21
- sudo systemctl start my-app
22
- sudo systemctl enable my-app
 
17
  WantedBy=multi-user.target
18
  EOF
19
 
20
+ sudo systemctl daemon-reload || echo "Warning: Failed to reload systemd"
21
+ sudo systemctl start my-app || echo "Warning: Failed to start service"
22
+ sudo systemctl enable my-app || echo "Warning: Failed to enable service"
generated/.dockerignore-013314fa ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-04971ae7 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-0dd6b89c ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-0df1cbc6 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-10529e9e ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-125b6db9 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-12bcf307 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-13cb20c1 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-22291843 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-23d12e96 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-26b408d2 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-26f15cf4 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-28e849ba ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-2b780d1b ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-2f2b704b ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-2f5b2050 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-33e8e7c0 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-3cb05336 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-3ef9d7a4 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-3f413bf3 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-4539f725 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-460c0e40 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-48fdb6ed ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-500b6612 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-52b05f9c ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-53944f53 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-59dc72f0 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/
generated/.dockerignore-5d3c0a14 ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Node.js
2
+ node_modules/
3
+ npm-debug.log*
4
+ yarn-debug.log*
5
+ yarn-error.log*
6
+ .npm
7
+ .yarn
8
+
9
+ # Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ venv/
16
+ env/
17
+ ENV/
18
+ .venv
19
+ pip-log.txt
20
+ pip-delete-this-directory.txt
21
+ *.egg-info/
22
+ dist/
23
+ build/
24
+
25
+ # PHP
26
+ vendor/
27
+ composer.phar
28
+ composer.lock
29
+
30
+ # Go
31
+ *.exe
32
+ *.exe~
33
+ *.dll
34
+ *.so
35
+ *.dylib
36
+ *.test
37
+ *.out
38
+
39
+ # Java
40
+ target/
41
+ *.class
42
+ *.jar
43
+ *.war
44
+ *.ear
45
+ *.log
46
+
47
+ # .NET
48
+ bin/
49
+ obj/
50
+ *.dll
51
+ *.exe
52
+ *.pdb
53
+
54
+ # Ruby
55
+ *.gem
56
+ *.rbc
57
+ /.config
58
+ /coverage/
59
+ /InstalledFiles
60
+ /pkg/
61
+ /spec/reports/
62
+ /test/tmp/
63
+ /test/version_tmp/
64
+ /tmp/
65
+
66
+ # IDEs
67
+ .vscode/
68
+ .idea/
69
+ *.swp
70
+ *.swo
71
+ *~
72
+ .DS_Store
73
+
74
+ # Git
75
+ .git/
76
+ .gitignore
77
+ .gitattributes
78
+
79
+ # Docker
80
+ Dockerfile*
81
+ docker-compose*
82
+ .dockerignore
83
+
84
+ # Environment
85
+ .env
86
+ .env.local
87
+ .env.*.local
88
+
89
+ # Logs
90
+ logs/
91
+ *.log
92
+
93
+ # Testing
94
+ coverage/
95
+ .nyc_output/
96
+ .pytest_cache/
97
+
98
+ # Documentation
99
+ README.md
100
+ docs/
101
+ *.md
102
+
103
+ # CI/CD
104
+ .github/
105
+ .gitlab-ci.yml
106
+ .travis.yml
107
+ Jenkinsfile
108
+
109
+ # Misc
110
+ *.bak
111
+ *.tmp
112
+ *.temp
113
+ .cache/