Spaces:
Running
Running
V2.0.0
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- Dockerfile +2 -2
- app/api/routes/docker.py +270 -0
- app/api/routes/scripts.py +93 -0
- app/core/config.py +1 -1
- app/main.py +2 -0
- app/models/schemas.py +114 -0
- app/services/devops.py +7 -1
- app/services/docker_generator.py +181 -0
- app/services/dockerfile_validator.py +185 -0
- app/services/script_validator.py +253 -0
- app/templates/docker/docker-build.sh.j2 +66 -0
- app/templates/docker/docker-compose.yml.j2 +158 -0
- app/templates/docker/dockerfile_dotnet.j2 +61 -0
- app/templates/docker/dockerfile_go.j2 +75 -0
- app/templates/docker/dockerfile_java.j2 +92 -0
- app/templates/docker/dockerfile_nodejs.j2 +77 -0
- app/templates/docker/dockerfile_php.j2 +70 -0
- app/templates/docker/dockerfile_python.j2 +132 -0
- app/templates/docker/dockerfile_ruby.j2 +54 -0
- app/templates/docker/dockerignore.j2 +113 -0
- app/templates/docker/env.example.j2 +71 -0
- app/templates/systemd_setup.j2 +3 -3
- generated/.dockerignore-013314fa +113 -0
- generated/.dockerignore-04971ae7 +113 -0
- generated/.dockerignore-0dd6b89c +113 -0
- generated/.dockerignore-0df1cbc6 +113 -0
- generated/.dockerignore-10529e9e +113 -0
- generated/.dockerignore-125b6db9 +113 -0
- generated/.dockerignore-12bcf307 +113 -0
- generated/.dockerignore-13cb20c1 +113 -0
- generated/.dockerignore-22291843 +113 -0
- generated/.dockerignore-23d12e96 +113 -0
- generated/.dockerignore-26b408d2 +113 -0
- generated/.dockerignore-26f15cf4 +113 -0
- generated/.dockerignore-28e849ba +113 -0
- generated/.dockerignore-2b780d1b +113 -0
- generated/.dockerignore-2f2b704b +113 -0
- generated/.dockerignore-2f5b2050 +113 -0
- generated/.dockerignore-33e8e7c0 +113 -0
- generated/.dockerignore-3cb05336 +113 -0
- generated/.dockerignore-3ef9d7a4 +113 -0
- generated/.dockerignore-3f413bf3 +113 -0
- generated/.dockerignore-4539f725 +113 -0
- generated/.dockerignore-460c0e40 +113 -0
- generated/.dockerignore-48fdb6ed +113 -0
- generated/.dockerignore-500b6612 +113 -0
- generated/.dockerignore-52b05f9c +113 -0
- generated/.dockerignore-53944f53 +113 -0
- generated/.dockerignore-59dc72f0 +113 -0
- 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
|
| 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",
|
| 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 -
|
| 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/
|