-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-dev.sh
More file actions
executable file
Β·169 lines (141 loc) Β· 5.53 KB
/
docker-dev.sh
File metadata and controls
executable file
Β·169 lines (141 loc) Β· 5.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#!/bin/bash
# Docker development helper script for embedded-ruby-vm
set -e
CMD=${1:-help}
case "$CMD" in
setup)
echo "π Setting up Docker development environment..."
docker-compose build
docker-compose run --rm source-sync-in
docker-compose up -d dev
echo "β
Setup complete! Run '$0 shell' to enter the container."
;;
build-image)
echo "π¨ Building Docker image..."
docker-compose build
;;
sync)
echo "π¦ Syncing source code to container..."
docker-compose run --rm source-sync-in
echo "β
Source code synced!"
;;
start)
echo "βΆοΈ Starting development container..."
docker-compose up -d dev
echo "β
Container started! Run '$0 shell' to enter."
;;
stop)
echo "βΉοΈ Stopping development container..."
docker-compose down
echo "β
Container stopped!"
;;
shell)
echo "π Entering development container..."
docker-compose exec dev bash
;;
build)
TARGET_ARCH=${2:-}
if [ -z "$TARGET_ARCH" ]; then
echo "π¨ Building project (auto-detect architecture)..."
docker-compose exec dev ./gradlew build -PbuildType=Debug -PbuildWrapperShared=true
else
echo "π¨ Building project for $TARGET_ARCH..."
docker-compose exec dev ./gradlew build -PbuildType=Debug -PbuildWrapperShared=true -PtargetArch="$TARGET_ARCH"
fi
;;
release)
TARGET_ARCH=${2:-}
if [ -z "$TARGET_ARCH" ]; then
echo "π¨ Building project (auto-detect architecture)..."
docker-compose exec dev ./gradlew build -PbuildType=Release
else
echo "π¨ Building project for $TARGET_ARCH..."
docker-compose exec dev ./gradlew build -PbuildType=Release -PtargetArch="$TARGET_ARCH"
fi
;;
desktop-jar)
echo "π¦ Building desktop JAR... (no cache)"
docker-compose exec dev ./gradlew :ruby-vm-kmp:clean :ruby-vm-kmp:desktopJar -PbuildType=Debug --no-build-cache
;;
test)
echo "π§ͺ Running tests..."
docker-compose exec dev bash -c "cd build && ./bin/test_core && ./bin/test_jni"
;;
static-test)
echo "π§ͺ Building fully static libraries and running tests..."
docker-compose exec dev bash -c "
./gradlew build -PbuildType=Debug -PbuildWrapperShared=false -PbuildSharedLibs=false -PforceRebuild=true && \
cd build && \
./bin/test_core && \
./bin/test_jni
"
;;
export)
echo "π€ Exporting build artifacts..."
docker-compose run --rm artifact-export
echo "β
Artifacts available in ./docker-output/"
;;
clean)
echo "π§Ή Cleaning build artifacts..."
docker-compose exec dev bash -c " rm -f CMakeCache.txt && rm -rf CMakeFiles && ./gradlew clean && rm -rf build kmp/build"
docker volume rm embedded-ruby-vm_build-artifacts embedded-ruby-vm_kmp-artifacts || true
echo "β
Build artifacts cleaned!"
;;
clean-all)
echo "π§Ή Cleaning all volumes and containers..."
docker-compose down -v
echo "β
All volumes removed! Run '$0 setup' to start fresh."
;;
logs)
docker-compose logs -f dev
;;
android-setup)
echo "π€ Setting up Android development environment..."
docker-compose -f docker-compose.yml -f docker-compose.override.yml build dev-android
docker-compose run --rm source-sync-in
docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d dev-android
echo "β
Android setup complete!"
;;
android-shell)
echo "π Entering Android development container..."
docker-compose exec dev-android bash
;;
help|*)
cat << 'EOF'
π³ Docker Development Helper for embedded-ruby-vm
Usage: ./docker-dev.sh <command> [arguments]
Setup Commands:
setup - Initial setup: build image, sync code, start container
build-image - Build Docker image only
sync - Sync source code from host to container
start - Start the development container
stop - Stop the development container
Development Commands:
shell - Enter the development container shell
build [arch] - Build the project (optional: x86_64, arm64, all)
desktop-jar - Build desktop JAR
test - Run all tests
static-test - Build fully static libraries and run tests
export - Export build artifacts to ./docker-output/
Maintenance Commands:
clean - Clean build artifacts (keeps cache)
clean-all - Remove all volumes and containers (fresh start)
logs - View container logs
Android Commands:
android-setup - Setup Android development environment
android-shell - Enter Android development container
Examples:
./docker-dev.sh setup # Initial setup
./docker-dev.sh sync # Sync code changes
./docker-dev.sh shell # Enter container
./docker-dev.sh build x86_64 # Build for x86_64
./docker-dev.sh export # Export artifacts
Quick Workflow:
1. ./docker-dev.sh setup # One-time setup
2. Make changes in your IDE
3. ./docker-dev.sh sync # Sync changes
4. ./docker-dev.sh build # Build in container
5. ./docker-dev.sh export # Get artifacts
EOF
;;
esac