automated-setup 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,17 @@
1
+ FROM python:3.12-slim
2
+
3
+ WORKDIR /var/www/html/api
4
+
5
+ RUN apt-get update && apt-get install -y --no-install-recommends \
6
+ gcc \
7
+ libpq-dev \
8
+ && rm -rf /var/lib/apt/lists/*
9
+
10
+ COPY requirements.txt ./
11
+ RUN pip install --no-cache-dir -r requirements.txt
12
+
13
+ COPY . .
14
+
15
+ EXPOSE 8000
16
+
17
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
@@ -0,0 +1,11 @@
1
+ FROM node:22.18-slim
2
+
3
+ WORKDIR /usr/src/app/ui
4
+
5
+ COPY package*.json ./
6
+
7
+ RUN npm ci --prefer-offline
8
+
9
+ EXPOSE 3000
10
+
11
+ CMD ["npm", "run", "dev"]
@@ -0,0 +1,18 @@
1
+ FROM ruby:3.3-slim
2
+
3
+ WORKDIR /var/www/html/api
4
+
5
+ RUN apt-get update && apt-get install -y --no-install-recommends \
6
+ build-essential \
7
+ libpq-dev \
8
+ nodejs \
9
+ && rm -rf /var/lib/apt/lists/*
10
+
11
+ COPY Gemfile Gemfile.lock ./
12
+ RUN bundle install
13
+
14
+ COPY . .
15
+
16
+ EXPOSE 3000
17
+
18
+ CMD ["rails", "server", "-b", "0.0.0.0"]
@@ -0,0 +1,18 @@
1
+ FROM rust:1.81-slim
2
+
3
+ WORKDIR /var/www/html/api
4
+
5
+ RUN apt-get update && apt-get install -y --no-install-recommends \
6
+ pkg-config \
7
+ libssl-dev \
8
+ gcc \
9
+ libc6-dev \
10
+ && rm -rf /var/lib/apt/lists/*
11
+
12
+ RUN cargo install cargo-watch
13
+
14
+ COPY . .
15
+
16
+ EXPOSE 8080
17
+
18
+ CMD ["cargo", "watch", "-x", "run"]
@@ -0,0 +1,11 @@
1
+ FROM node:22.18-slim
2
+
3
+ WORKDIR /usr/src/app/ui
4
+
5
+ COPY package*.json ./
6
+
7
+ RUN npm ci --prefer-offline
8
+
9
+ EXPOSE 5173
10
+
11
+ CMD ["npm", "run", "dev", "--", "--host"]
@@ -0,0 +1,11 @@
1
+ FROM node:22.18-slim
2
+
3
+ WORKDIR /usr/src/app/ui
4
+
5
+ COPY package*.json ./
6
+
7
+ RUN npm ci --prefer-offline
8
+
9
+ EXPOSE 3000
10
+
11
+ CMD ["npm", "run", "dev"]
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "automated-setup",
3
+ "version": "1.0.0",
4
+ "description": "A powerful, dynamic tool to scaffold full-stack development environments with Docker.",
5
+ "main": "setup.sh",
6
+ "bin": {
7
+ "automated-setup": "setup.sh"
8
+ },
9
+ "scripts": {
10
+ "test": "echo \"Error: no test specified\" && exit 1"
11
+ },
12
+ "keywords": [
13
+ "scaffold",
14
+ "docker",
15
+ "fullstack",
16
+ "automation",
17
+ "cli"
18
+ ],
19
+ "author": "Dxcode",
20
+ "license": "MIT",
21
+ "files": [
22
+ "setup.sh",
23
+ "compose_file/",
24
+ "config/",
25
+ "docker_file/",
26
+ "README.md"
27
+ ]
28
+ }
package/setup.sh ADDED
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ # Usage: ./setup.sh PROJECT_NAME API_LANG UI_LANG [DB_TYPE]
5
+ # Example: ./setup.sh my-app laravel vue postgres
6
+
7
+ if [ "$#" -lt 3 ]; then
8
+ echo "Usage: $0 PROJECT_NAME API_LANG UI_LANG [DB_TYPE]"
9
+ echo "Example: $0 my-app laravel vue postgres"
10
+ exit 1
11
+ fi
12
+
13
+ PROJECT_NAME=$1
14
+ API_LANG=$2
15
+ UI_LANG=$3
16
+ DB_TYPE=${4:-none}
17
+
18
+ SCRIPT_ROOT_DIR=$(dirname "$(readlink -f "$0")")
19
+
20
+ if [ -d "$PROJECT_NAME" ]; then
21
+ echo "Project '$PROJECT_NAME' already exists. Updating/using existing directory."
22
+ else
23
+ echo "Creating project: $PROJECT_NAME"
24
+ mkdir -p "$PROJECT_NAME"
25
+ fi
26
+
27
+ # Copy API Dockerfile
28
+ if [ "$API_LANG" != "none" ]; then
29
+ mkdir -p "$PROJECT_NAME/api"
30
+ if [ -d "$SCRIPT_ROOT_DIR/docker_file/$API_LANG" ]; then
31
+ echo "Copying $API_LANG Dockerfile to $PROJECT_NAME/api/"
32
+ cp -f "$SCRIPT_ROOT_DIR/docker_file/$API_LANG/Dockerfile" "$PROJECT_NAME/api/Dockerfile"
33
+ else
34
+ echo "Error: API language '$API_LANG' not supported (Dockerfile not found in docker_file/)."
35
+ exit 1
36
+ fi
37
+ fi
38
+
39
+ # Copy UI Dockerfile
40
+ if [ "$UI_LANG" != "none" ]; then
41
+ mkdir -p "$PROJECT_NAME/ui"
42
+ if [ -d "$SCRIPT_ROOT_DIR/docker_file/$UI_LANG" ]; then
43
+ echo "Copying $UI_LANG Dockerfile to $PROJECT_NAME/ui/"
44
+ cp -f "$SCRIPT_ROOT_DIR/docker_file/$UI_LANG/Dockerfile" "$PROJECT_NAME/ui/Dockerfile"
45
+ else
46
+ echo "Error: UI language '$UI_LANG' not supported (Dockerfile not found in docker_file/)."
47
+ exit 1
48
+ fi
49
+ fi
50
+
51
+ # Copy Nginx config
52
+ if [ "$API_LANG" != "none" ] && [ "$UI_LANG" != "none" ] || [ "$API_LANG" != "none" ]; then
53
+ echo "Copying Nginx configuration..."
54
+ mkdir -p "$PROJECT_NAME/infra/config/nginx/conf.d"
55
+ mkdir -p "$PROJECT_NAME/infra/config/nginx/error"
56
+ cp -f "$SCRIPT_ROOT_DIR/config/nginx/conf.d/default.conf" "$PROJECT_NAME/infra/config/nginx/conf.d/default.conf"
57
+ fi
58
+
59
+ # Select and Copy Compose Template
60
+ TEMPLATE=""
61
+ if [ "$API_LANG" != "none" ] && [ "$UI_LANG" != "none" ]; then
62
+ TEMPLATE="full_template.yaml"
63
+ elif [ "$API_LANG" != "none" ]; then
64
+ TEMPLATE="api_template.yaml"
65
+ else
66
+ TEMPLATE="ui_template.yaml"
67
+ fi
68
+
69
+ echo "Using template: $TEMPLATE"
70
+ cp -f "$SCRIPT_ROOT_DIR/compose_file/$TEMPLATE" "$PROJECT_NAME/compose.yaml"
71
+
72
+ # Handle Dynamic Database
73
+ if [ "$DB_TYPE" != "none" ] && [ "$API_LANG" != "none" ]; then
74
+ echo "Configuring database: $DB_TYPE..."
75
+ DB_IMAGE=""
76
+ DB_PORT=""
77
+ DB_ENV=""
78
+
79
+ case $DB_TYPE in
80
+ postgres)
81
+ DB_IMAGE="postgres:alpine"
82
+ DB_PORT="5432"
83
+ DB_ENV="- POSTGRES_DB=\${DB_DATABASE:-project_db}
84
+ - POSTGRES_USER=\${DB_USERNAME:-user}
85
+ - POSTGRES_PASSWORD=\${DB_PASSWORD:-password}"
86
+ ;;
87
+ mysql)
88
+ DB_IMAGE="mysql:8.0"
89
+ DB_PORT="3306"
90
+ DB_ENV="- MYSQL_DATABASE=\${DB_DATABASE:-project_db}
91
+ - MYSQL_USER=\${DB_USERNAME:-user}
92
+ - MYSQL_PASSWORD=\${DB_PASSWORD:-password}
93
+ - MYSQL_ROOT_PASSWORD=\${DB_PASSWORD:-password}"
94
+ ;;
95
+ mariadb)
96
+ DB_IMAGE="mariadb:latest"
97
+ DB_PORT="3306"
98
+ DB_ENV="- MYSQL_DATABASE=\${DB_DATABASE:-project_db}
99
+ - MYSQL_USER=\${DB_USERNAME:-user}
100
+ - MYSQL_PASSWORD=\${DB_PASSWORD:-password}
101
+ - MYSQL_ROOT_PASSWORD=\${DB_PASSWORD:-password}"
102
+ ;;
103
+ mongo)
104
+ DB_IMAGE="mongo:latest"
105
+ DB_PORT="27017"
106
+ DB_ENV="- MONGO_INITDB_DATABASE=\${DB_DATABASE:-project_db}"
107
+ ;;
108
+ redis)
109
+ DB_IMAGE="redis:alpine"
110
+ DB_PORT="6379"
111
+ DB_ENV="- REDIS_PASSWORD=\${DB_PASSWORD:-password}"
112
+ ;;
113
+ *)
114
+ echo "Error: Database type '$DB_TYPE' not supported."
115
+ exit 1
116
+ ;;
117
+ esac
118
+
119
+ # Use python for safe multiline replacement
120
+ python3 -c "import sys; content = open(sys.argv[1]).read(); content = content.replace('__DB_IMAGE__', sys.argv[2]).replace('__DB_PORT__', sys.argv[3]).replace('__DB_ENV__', sys.argv[4]); open(sys.argv[1], 'w').write(content)" "$PROJECT_NAME/compose.yaml" "$DB_IMAGE" "$DB_PORT" "$DB_ENV"
121
+ else
122
+ echo "No database configured or UI-only project."
123
+ # Remove DB service if it exists in template
124
+ sed -i '/ db:/,/^$/ d' "$PROJECT_NAME/compose.yaml"
125
+ sed -i '/volumes:/,/^$/ d' "$PROJECT_NAME/compose.yaml"
126
+ # Also remove DB env from API service if it exists
127
+ sed -i '/ environment:/,/^$/ d' "$PROJECT_NAME/compose.yaml"
128
+ fi
129
+
130
+ # Check Docker
131
+ if ! command -v docker >/dev/null 2>&1; then
132
+ echo "Docker is not installed. Please install Docker first."
133
+ exit 1
134
+ fi
135
+
136
+ echo "------------------------------------------------"
137
+ echo "Project $PROJECT_NAME created successfully!"
138
+ echo "Components:"
139
+ [ "$API_LANG" != "none" ] && echo " - API: $API_LANG"
140
+ [ "$UI_LANG" != "none" ] && echo " - UI: $UI_LANG"
141
+ [ "$DB_TYPE" != "none" ] && [ "$API_LANG" != "none" ] && echo " - Persistence: $DB_TYPE"
142
+ echo "------------------------------------------------"
143
+ echo "Navigate to $PROJECT_NAME and run 'docker compose up' to start."