name: Build and Release on: push: branches: [main] pull_request: branches: [main] jobs: build: name: Build multi-arch Raspberry Pi binaries runs-on: ubuntu-latest steps: # -------------------------------------------------- # Checkout # -------------------------------------------------- - name: Checkout code uses: actions/checkout@v4 # -------------------------------------------------- # Go setup # -------------------------------------------------- - name: Set up Go uses: actions/setup-go@v5 with: go-version: "1.22" # -------------------------------------------------- # Build binaries # -------------------------------------------------- - name: Build for ARMv6 (Pi Zero / Pi 1) run: | GOOS=linux GOARCH=arm GOARM=6 \ go build -ldflags="-s -w" -o wol-server-armv6 - name: Build for ARM64 (Pi Zero 2 / Pi 3 / Pi 4 / Pi 5) run: | GOOS=linux GOARCH=arm64 \ go build -ldflags="-s -w" -o wol-server-arm64 # -------------------------------------------------- # systemd service (portable, no hardcoded user) # -------------------------------------------------- - name: Create systemd service file run: | cat > wol-server.service << 'EOF' [Unit] Description=WOL Server Go Application After=network.target [Service] Type=simple User=loke WorkingDirectory=/home/loke/wol-server ExecStart=/home/loke/wol-server/wol-server Restart=always RestartSec=3 [Install] WantedBy=multi-user.target EOF # -------------------------------------------------- # Install script (auto-detect architecture) # -------------------------------------------------- - name: Create install script run: | cat > install.sh << 'EOF' #!/bin/bash set -e INSTALL_DIR="$HOME/wol-server" echo "Creating installation directory..." mkdir -p "$INSTALL_DIR/templates" ARCH=$(uname -m) case "$ARCH" in armv6l|armv7l) BIN="wol-server-armv6" ;; aarch64) BIN="wol-server-arm64" ;; *) echo "Unsupported architecture: $ARCH" exit 1 ;; esac echo "Detected architecture: $ARCH" echo "Using binary: $BIN" cp "$BIN" "$INSTALL_DIR/wol-server" chmod +x "$INSTALL_DIR/wol-server" echo "Installing templates..." cp -r templates/* "$INSTALL_DIR/templates/" echo "Installing systemd service..." sudo cp wol-server.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable wol-server echo "Installing dependencies..." sudo apt-get update -qq sudo apt-get install -y wakeonlan sshpass echo "Starting service..." sudo systemctl restart wol-server echo "===========================================" echo "WOL Server installed successfully!" echo "URL: http://$(hostname -I | awk '{print $1}'):8080" echo "===========================================" EOF chmod +x install.sh # -------------------------------------------------- # Package # -------------------------------------------------- - name: Create release package run: | mkdir -p package cp wol-server-armv6 package/ cp wol-server-arm64 package/ cp wol-server.service package/ cp install.sh package/ cp -r templates package/ tar -czf wol-server.tar.gz -C package . # -------------------------------------------------- # GitHub Release # -------------------------------------------------- - name: Create GitHub 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 }} files: | wol-server.tar.gz env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}