126 lines
3.4 KiB
YAML
126 lines
3.4 KiB
YAML
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 > deploy.sh << 'EOL'
|
|
#!/bin/bash
|
|
|
|
# Detect Raspberry Pi model and use the appropriate binary
|
|
MODEL=$(cat /proc/cpuinfo | grep "Model" | sed 's/Model\s*:\s*//g')
|
|
echo "Detected model: $MODEL"
|
|
|
|
# Select the right binary based on processor architecture
|
|
ARCH=$(uname -m)
|
|
echo "Architecture: $ARCH"
|
|
|
|
if [[ "$ARCH" == "aarch64" ]]; then
|
|
echo "Using ARM64 binary"
|
|
cp wol-server-arm64 wol-server
|
|
elif [[ "$ARCH" == "armv7l" ]]; then
|
|
echo "Using ARMv7 binary"
|
|
cp wol-server-arm7 wol-server
|
|
else
|
|
echo "Using ARMv6 binary"
|
|
cp wol-server-arm6 wol-server
|
|
fi
|
|
|
|
echo "Creating directory..."
|
|
mkdir -p ~/wol-server
|
|
|
|
echo "Copying application..."
|
|
cp wol-server ~/wol-server/
|
|
chmod +x ~/wol-server/wol-server
|
|
|
|
echo "Installing service..."
|
|
sudo cp wol-server.service /etc/systemd/system/
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable wol-server
|
|
sudo systemctl restart wol-server
|
|
|
|
echo "Deployment complete!"
|
|
echo "Service status:"
|
|
sudo systemctl status wol-server
|
|
EOL
|
|
|
|
chmod +x deploy.sh
|
|
|
|
- name: Create archive for each platform
|
|
run: |
|
|
# Create templates directory in the package directories
|
|
mkdir -p armv6-package/templates
|
|
mkdir -p all-package/templates
|
|
|
|
# Copy template files
|
|
cp templates/* armv6-package/templates/
|
|
cp templates/* all-package/templates/
|
|
|
|
# ARMv6 package
|
|
cp wol-server-arm6 armv6-package/wol-server-arm6
|
|
cp wol-server.service armv6-package/
|
|
cp deploy.sh armv6-package/
|
|
tar -czf wol-server-armv6.tar.gz -C armv6-package .
|
|
|
|
# All-in-one package
|
|
cp wol-server-arm6 all-package/
|
|
cp wol-server.service all-package/
|
|
cp deploy.sh all-package/
|
|
tar -czf wol-server-all.tar.gz -C all-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-arm6
|
|
wol-server.service
|
|
deploy.sh
|
|
wol-server-armv6.tar.gz
|
|
wol-server-all.tar.gz
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|