diff --git a/docker-compose.yml b/docker-compose.yml index 0e319e3..6948eff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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 diff --git a/docker-setup.sh b/docker-setup.sh index 43cf8d7..cd046c7 100755 --- a/docker-setup.sh +++ b/docker-setup.sh @@ -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) diff --git a/fix-serial-device.sh b/fix-serial-device.sh new file mode 100755 index 0000000..e1f621c --- /dev/null +++ b/fix-serial-device.sh @@ -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