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: - name: Checkout code uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: "1.22" - 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 - 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 - 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 - 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 . - name: Create Forgejo Release if: github.ref == 'refs/heads/main' run: | TAG="v${{ github.run_number }}" API_URL="${{ github.server_url }}/api/v1" REPO="${{ github.repository }}" # Create release RELEASE_ID=$(curl -s -X POST \ -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ -H "Content-Type: application/json" \ "${API_URL}/repos/${REPO}/releases" \ -d "{\"tag_name\": \"${TAG}\", \"name\": \"Release ${TAG}\", \"draft\": false, \"prerelease\": false}" \ | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) # Upload asset curl -s -X POST \ -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ "${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=wol-server.tar.gz" \ -F "attachment=@wol-server.tar.gz" > /dev/null echo "Release ${TAG} created with asset wol-server.tar.gz"