name: Build and Release on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: name: Cross-compile for Raspberry Pi runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v4 with: go-version: '1.20' - name: Build for ARM (Pi Zero, Pi 1 - ARMv6) run: | GOOS=linux GOARCH=arm GOARM=6 go build -ldflags="-s -w" -o wol-server-arm6 - name: Create systemd service file run: | cat > wol-server.service << 'EOL' [Unit] Description=WOL Server Go Application After=network.target [Service] User=pi WorkingDirectory=/home/pi/wol-server ExecStart=/home/pi/wol-server/wol-server Restart=always [Install] WantedBy=multi-user.target EOL - name: Create deployment script run: | cat > install.sh << 'EOL' #!/bin/bash set -e # Installation directory INSTALL_DIR=~/wol-server echo "Creating installation directory..." mkdir -p $INSTALL_DIR mkdir -p $INSTALL_DIR/templates echo "Installing application..." cp wol-server-arm6 $INSTALL_DIR/wol-server chmod +x $INSTALL_DIR/wol-server echo "Installing template files..." cp -r templates/* $INSTALL_DIR/templates/ echo "Installing system service..." sudo cp wol-server.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable wol-server # Install required dependencies echo "Installing dependencies..." sudo apt-get update -qq sudo apt-get install -y wakeonlan sshpass # Start the service echo "Starting service..." sudo systemctl restart wol-server echo "===========================================" echo "Installation complete!" echo "The WOL server is now running at http://$(hostname -I | awk '{print $1}'):8080" echo "===========================================" EOL chmod +x install.sh - name: Create README with installation instructions run: | cat > INSTALL.md << 'EOL' # WOL Server Installation Guide This guide will help you install the Wake-on-LAN server on your Raspberry Pi. ## Prerequisites - Raspberry Pi running Raspberry Pi OS (Raspbian) - SSH access to your Pi - SCP or SFTP capability to transfer files ## Installation Steps ### 1. Transfer Files to Raspberry Pi **Option 1: Using SCP from your computer** ```bash # Replace with your Pi's IP address PI_IP=192.168.1.100 # Transfer the installation package scp wol-server.tar.gz pi@$PI_IP:~/ ``` **Option 2: Using SFTP client** Use a tool like FileZilla, WinSCP, or Cyberduck to transfer the `wol-server.tar.gz` file to your Raspberry Pi. ### 2. SSH into your Raspberry Pi ```bash ssh pi@192.168.1.100 ``` ### 3. Extract and Install ```bash # Navigate to home directory cd ~ # Extract the archive tar -xzf wol-server.tar.gz # Run the installation script ./install.sh ``` ### 4. Test the Installation Open a web browser and navigate to: ``` http://[your-pi-ip]:8080 ``` ## Troubleshooting If the service fails to start, check the logs: ```bash sudo systemctl status wol-server ``` If template errors occur, ensure the template files were copied correctly: ```bash ls -la ~/wol-server/templates/ ``` ## Manual Installation (if needed) If you encounter issues with the automated install: ```bash # Create directories mkdir -p ~/wol-server/templates # Copy files manually cp wol-server-arm6 ~/wol-server/wol-server chmod +x ~/wol-server/wol-server cp templates/* ~/wol-server/templates/ sudo cp wol-server.service /etc/systemd/system/ # Install dependencies sudo apt-get update sudo apt-get install -y wakeonlan sshpass # Enable and start service sudo systemctl daemon-reload sudo systemctl enable wol-server sudo systemctl start wol-server ``` EOL - name: Create all-in-one package run: | # Create a single package with everything needed mkdir -p package cp wol-server-arm6 package/ cp wol-server.service package/ cp install.sh package/ cp -r templates package/ cp INSTALL.md package/ # Create the tarball tar -czf wol-server.tar.gz -C package . - name: Create Release id: create_release uses: softprops/action-gh-release@v1 if: github.ref == 'refs/heads/main' with: tag_name: v${{ github.run_number }} name: Release v${{ github.run_number }} draft: false prerelease: false files: | wol-server.tar.gz INSTALL.md env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}