mirror of
https://github.com/agessaman/meshcore-bot.git
synced 2026-05-14 03:15:12 +00:00
chore: Improve docker-compose.yml and docker-setup.sh for better environment management
- Clarified comments in docker-compose.yml regarding build configuration and updated pull_policy to 'missing' for clearer intent. - Enhanced docker-setup.sh to ensure .env file creation and updates are more robust, with improved error handling and verification steps for Docker image configuration.
This commit is contained in:
+3
-4
@@ -1,15 +1,14 @@
|
||||
services:
|
||||
meshcore-bot:
|
||||
# Build configuration - will build locally if image doesn't exist
|
||||
# Build configuration - builds locally if image not available
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
# Pre-built image from GitHub Container Registry (used if available)
|
||||
# Pre-built image from GitHub Container Registry
|
||||
# Image tag is automatically set based on current git branch via .env file
|
||||
# Set DOCKER_IMAGE_REGISTRY in .env to override (default: ghcr.io/agessaman/meshcore-bot)
|
||||
# If the image doesn't exist in registry, Docker Compose will build locally
|
||||
image: ${DOCKER_IMAGE_REGISTRY:-ghcr.io/agessaman/meshcore-bot}:${DOCKER_IMAGE_TAG:-latest}
|
||||
pull_policy: if_not_present
|
||||
pull_policy: missing
|
||||
container_name: meshcore-bot
|
||||
restart: unless-stopped
|
||||
|
||||
|
||||
+64
-11
@@ -274,23 +274,76 @@ else
|
||||
fi
|
||||
|
||||
# Create or update .env file for docker-compose
|
||||
# Ensure this always runs, even if there were non-critical errors earlier
|
||||
ENV_FILE=".env"
|
||||
if [ ! -f "$ENV_FILE" ] || ! grep -q "^DOCKER_IMAGE_TAG=" "$ENV_FILE" 2>/dev/null; then
|
||||
echo "" >> "$ENV_FILE"
|
||||
echo "# Docker image configuration (auto-generated by docker-setup.sh)" >> "$ENV_FILE"
|
||||
echo "DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY" >> "$ENV_FILE"
|
||||
echo "DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG" >> "$ENV_FILE"
|
||||
echo " ✓ Created/updated .env file with image tag: $DOCKER_IMAGE_TAG"
|
||||
|
||||
# Temporarily disable exit on error for .env creation
|
||||
set +e
|
||||
|
||||
# Check if .env file exists and has the tag variable
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
# Create new .env file
|
||||
cat > "$ENV_FILE" << EOF
|
||||
# Docker image configuration (auto-generated by docker-setup.sh)
|
||||
DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY
|
||||
DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG
|
||||
EOF
|
||||
if [ $? -eq 0 ]; then
|
||||
echo " ✓ Created .env file with image tag: $DOCKER_IMAGE_TAG"
|
||||
else
|
||||
echo " ⚠️ Warning: Failed to create .env file"
|
||||
fi
|
||||
elif ! grep -q "^DOCKER_IMAGE_TAG=" "$ENV_FILE" 2>/dev/null; then
|
||||
# .env exists but doesn't have the tag - append it
|
||||
{
|
||||
echo ""
|
||||
echo "# Docker image configuration (auto-generated by docker-setup.sh)"
|
||||
echo "DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY"
|
||||
echo "DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG"
|
||||
} >> "$ENV_FILE"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo " ✓ Added Docker image configuration to .env file with tag: $DOCKER_IMAGE_TAG"
|
||||
else
|
||||
echo " ⚠️ Warning: Failed to append to .env file"
|
||||
fi
|
||||
else
|
||||
# Update existing .env file
|
||||
if [[ "$PLATFORM" == "Darwin" ]]; then
|
||||
sed -i '' "s|^DOCKER_IMAGE_TAG=.*|DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG|" "$ENV_FILE"
|
||||
sed -i '' "s|^DOCKER_IMAGE_REGISTRY=.*|DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY|" "$ENV_FILE"
|
||||
sed -i '' "s|^DOCKER_IMAGE_TAG=.*|DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG|" "$ENV_FILE" 2>/dev/null
|
||||
sed -i '' "s|^DOCKER_IMAGE_REGISTRY=.*|DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY|" "$ENV_FILE" 2>/dev/null
|
||||
else
|
||||
sed -i "s|^DOCKER_IMAGE_TAG=.*|DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG|" "$ENV_FILE"
|
||||
sed -i "s|^DOCKER_IMAGE_REGISTRY=.*|DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY|" "$ENV_FILE"
|
||||
sed -i "s|^DOCKER_IMAGE_TAG=.*|DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG|" "$ENV_FILE" 2>/dev/null
|
||||
sed -i "s|^DOCKER_IMAGE_REGISTRY=.*|DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY|" "$ENV_FILE" 2>/dev/null
|
||||
fi
|
||||
if [ $? -eq 0 ]; then
|
||||
echo " ✓ Updated .env file with image tag: $DOCKER_IMAGE_TAG"
|
||||
else
|
||||
echo " ⚠️ Warning: Failed to update .env file"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Re-enable exit on error
|
||||
set -e
|
||||
|
||||
# Verify .env file was created/updated
|
||||
if [ -f "$ENV_FILE" ] && grep -q "^DOCKER_IMAGE_TAG=" "$ENV_FILE" 2>/dev/null; then
|
||||
ACTUAL_TAG=$(grep "^DOCKER_IMAGE_TAG=" "$ENV_FILE" | cut -d'=' -f2 | tr -d ' ')
|
||||
echo " ✓ Verified .env file contains DOCKER_IMAGE_TAG=$ACTUAL_TAG"
|
||||
else
|
||||
echo " ⚠️ Warning: .env file may not have been created correctly"
|
||||
echo " Creating .env file manually..."
|
||||
cat > "$ENV_FILE" << EOF
|
||||
# Docker image configuration (auto-generated by docker-setup.sh)
|
||||
DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY
|
||||
DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG
|
||||
EOF
|
||||
if [ -f "$ENV_FILE" ]; then
|
||||
echo " ✓ Manually created .env file with tag: $DOCKER_IMAGE_TAG"
|
||||
else
|
||||
echo " ✗ Error: Could not create .env file. Please create it manually:"
|
||||
echo " echo 'DOCKER_IMAGE_REGISTRY=$DOCKER_IMAGE_REGISTRY' > .env"
|
||||
echo " echo 'DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG' >> .env"
|
||||
fi
|
||||
echo " ✓ Updated .env file with image tag: $DOCKER_IMAGE_TAG"
|
||||
fi
|
||||
|
||||
# Set permissions (container runs as UID 1000)
|
||||
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
# Quick script to find and update the serial device in config.ini
|
||||
|
||||
CONFIG_FILE="data/config/config.ini"
|
||||
|
||||
# Find the actual device the symlink points to
|
||||
SYMLINK="/dev/serial/by-id/usb-RAKwireless_WisCore_RAK4631_Board_B2C39A2D9735430C-if00"
|
||||
|
||||
if [ -L "$SYMLINK" ]; then
|
||||
ACTUAL_DEVICE=$(readlink -f "$SYMLINK" 2>/dev/null)
|
||||
if [ -n "$ACTUAL_DEVICE" ] && [ -e "$ACTUAL_DEVICE" ]; then
|
||||
echo "Found device: $SYMLINK -> $ACTUAL_DEVICE"
|
||||
|
||||
# Update config.ini
|
||||
if [[ "$(uname -s)" == "Darwin" ]]; then
|
||||
sed -i '' "s|^serial_port[[:space:]]*=.*|serial_port = $ACTUAL_DEVICE|" "$CONFIG_FILE"
|
||||
else
|
||||
sed -i "s|^serial_port[[:space:]]*=.*|serial_port = $ACTUAL_DEVICE|" "$CONFIG_FILE"
|
||||
fi
|
||||
|
||||
echo "✓ Updated config.ini to use: $ACTUAL_DEVICE"
|
||||
echo ""
|
||||
echo "Restart the container:"
|
||||
echo " docker compose restart"
|
||||
else
|
||||
echo "Error: Could not resolve symlink"
|
||||
fi
|
||||
else
|
||||
echo "Symlink not found: $SYMLINK"
|
||||
echo "Available serial devices:"
|
||||
ls -la /dev/ttyACM* /dev/ttyUSB* 2>/dev/null || echo " None found"
|
||||
fi
|
||||
Reference in New Issue
Block a user