Skip to content

Commit e008d4e

Browse files
Merge pull request #719 from contentstack/feature/docker-shared_data
refactor: enhance path handling and validation in setup-docker.sh
2 parents 4a2ce7e + e4754f4 commit e008d4e

File tree

1 file changed

+45
-8
lines changed

1 file changed

+45
-8
lines changed

setup-docker.sh

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,48 @@ done
2323

2424
read -p "Enter the full path to your $CMS_TYPE data file (e.g., $EXAMPLE_FILE): " CMS_DATA_PATH
2525

26-
if [ ! -f "$CMS_DATA_PATH" ]; then
27-
echo "❌ File does not exist: $CMS_DATA_PATH"
26+
# Remove surrounding quotes if they exist
27+
CMS_DATA_PATH="${CMS_DATA_PATH%\"}"
28+
CMS_DATA_PATH="${CMS_DATA_PATH#\"}"
29+
30+
# Store original Windows path for Docker volume mounting
31+
ORIGINAL_PATH="$CMS_DATA_PATH"
32+
33+
# Convert Windows path to Unix format for Git Bash file operations ONLY
34+
UNIX_PATH="$CMS_DATA_PATH"
35+
if [[ "$CMS_DATA_PATH" =~ ^[A-Za-z]:\\ ]]; then
36+
# Replace backslashes with forward slashes
37+
UNIX_PATH=$(echo "$CMS_DATA_PATH" | sed 's/\\/\//g')
38+
# Convert C: to /c/ format for Git Bash
39+
UNIX_PATH=$(echo "$UNIX_PATH" | sed 's/^\([A-Za-z]\):/\/\L\1/')
40+
fi
41+
42+
# Check if file exists using the converted path
43+
if [ ! -f "$UNIX_PATH" ]; then
44+
echo "❌ File does not exist: $UNIX_PATH"
2845
exit 1
2946
fi
3047

31-
FILENAME=$(basename "$CMS_DATA_PATH")
48+
FILENAME=$(basename "$UNIX_PATH")
3249
CONTAINER_PATH="/data/$FILENAME"
3350

3451
export CMS_TYPE
35-
export CMS_DATA_PATH
52+
export CMS_DATA_PATH="$ORIGINAL_PATH"
3653
export CONTAINER_PATH
3754

3855
ENV_PATH="./upload-api/.env"
3956

4057
set_env_var() {
4158
VAR_NAME="$1"
4259
VAR_VALUE="$2"
60+
61+
# Create directory if it doesn't exist
62+
mkdir -p "$(dirname "$ENV_PATH")"
63+
4364
if grep -q "^${VAR_NAME}=" "$ENV_PATH" 2>/dev/null; then
44-
# Update existing variable (cross-platform)
45-
sed -i.bak "s|^${VAR_NAME}=.*|${VAR_NAME}=${VAR_VALUE}|" "$ENV_PATH"
65+
# Update existing variable - escape special characters for sed
66+
ESCAPED_VALUE=$(printf '%s\n' "$VAR_VALUE" | sed 's/[[\.*^$()+?{|]/\\&/g')
67+
sed -i.bak "s|^${VAR_NAME}=.*|${VAR_NAME}=${ESCAPED_VALUE}|" "$ENV_PATH"
4668
rm -f "$ENV_PATH.bak"
4769
else
4870
# Append new variable
@@ -51,9 +73,24 @@ set_env_var() {
5173
}
5274

5375
set_env_var "CMS_TYPE" "$CMS_TYPE"
54-
set_env_var "CMS_DATA_PATH" "$CMS_DATA_PATH"
76+
# Use original Windows path for Docker volume mounting
77+
set_env_var "CMS_DATA_PATH" "$ORIGINAL_PATH"
5578
set_env_var "CONTAINER_PATH" "$CONTAINER_PATH"
5679
set_env_var "NODE_BACKEND_API" "http://migration-api:5001"
5780

81+
# Check if docker-compose.yml exists before running
82+
if [ ! -f "docker-compose.yml" ]; then
83+
echo "❌ docker-compose.yml not found in current directory"
84+
echo "Current directory: $(pwd)"
85+
echo "Available files:"
86+
ls -la
87+
exit 1
88+
fi
89+
90+
echo "✅ Starting Docker Compose with the following configuration:"
91+
echo "CMS_TYPE: $CMS_TYPE"
92+
echo "CMS_DATA_PATH (for Docker): $ORIGINAL_PATH"
93+
echo "CMS_DATA_PATH (for file check): $UNIX_PATH"
94+
echo "CONTAINER_PATH: $CONTAINER_PATH"
5895

59-
docker compose up --build
96+
MSYS_NO_PATHCONV=1 docker compose up --build

0 commit comments

Comments
 (0)