name: Multi-Platform Release Build on: push: tags: - "v*.*.*" jobs: build: runs-on: docker strategy: fail-fast: false matrix: include: - target: native cross: false - target: x86_64-unknown-linux-gnu cross: true linker: x86_64-linux-gnu-gcc - target: aarch64-unknown-linux-gnu cross: true linker: aarch64-linux-gnu-gcc - target: armv7-unknown-linux-gnueabihf cross: true linker: arm-linux-gnueabihf-gcc - target: x86_64-pc-windows-gnu cross: true linker: x86_64-w64-mingw32-gcc steps: - name: Checkout code uses: https://code.forgejo.org/actions/checkout@v4 - name: Setup Rust uses: https://github.com/dtolnay/rust-toolchain@stable with: toolchain: stable - name: Add Rust target if: matrix.target != 'native' run: rustup target add ${{ matrix.target }} - name: Install cross-compilation tools if: matrix.cross run: | sudo apt-get update sudo apt-get install -y \ gcc-arm-linux-gnueabihf \ gcc-aarch64-linux-gnu \ gcc-x86-64-linux-gnu \ g++-arm-linux-gnueabihf \ g++-aarch64-linux-gnu \ mingw-w64 \ libc6-dev-armhf-cross \ libc6-dev-arm64-cross - name: Cache Rust dependencies uses: https://code.forgejo.org/actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ runner.os }}-cargo-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo-${{ matrix.target }}- ${{ runner.os }}-cargo- - name: Configure cross-compilation if: matrix.cross && matrix.target != 'native' run: | mkdir -p .cargo cat >> .cargo/config.toml << EOF [target.${{ matrix.target }}] linker = "${{ matrix.linker }}" EOF - name: Build release run: | if [ "${{ matrix.target }}" = "native" ]; then NATIVE_TARGET=$(rustc -vV | grep 'host:' | cut -d' ' -f2) echo "Building for native target: $NATIVE_TARGET" cargo build --release TARGET_BINARY="target/release/uptime-kuma-dashboard" OUTPUT_NAME="uptime-kuma-dashboard-$NATIVE_TARGET" else echo "Building for target: ${{ matrix.target }}" cargo build --release --target ${{ matrix.target }} if [[ "${{ matrix.target }}" == *"windows"* ]]; then TARGET_BINARY="target/${{ matrix.target }}/release/uptime-kuma-dashboard.exe" OUTPUT_NAME="uptime-kuma-dashboard-${{ matrix.target }}.exe" else TARGET_BINARY="target/${{ matrix.target }}/release/uptime-kuma-dashboard" OUTPUT_NAME="uptime-kuma-dashboard-${{ matrix.target }}" fi fi mkdir -p release-artifacts if [ ! -f "$TARGET_BINARY" ]; then echo "Error: Binary not found at $TARGET_BINARY" exit 1 fi cp "$TARGET_BINARY" "release-artifacts/$OUTPUT_NAME" if [[ "${{ matrix.target }}" == *"linux"* ]] || [ "${{ matrix.target }}" = "native" ]; then strip "release-artifacts/$OUTPUT_NAME" 2>/dev/null || echo "Strip failed, continuing..." fi if [[ "${{ matrix.target }}" != *"windows"* ]]; then chmod +x "release-artifacts/$OUTPUT_NAME" fi ls -lh "release-artifacts/$OUTPUT_NAME" file "release-artifacts/$OUTPUT_NAME" || true - name: Upload artifacts uses: https://code.forgejo.org/actions/upload-artifact@v6 with: name: binary-${{ matrix.target }} path: release-artifacts/ retention-days: 1 create-release: runs-on: docker needs: build permissions: contents: write steps: - name: Checkout code uses: https://code.forgejo.org/actions/checkout@v4 - name: Download all artifacts uses: https://code.forgejo.org/actions/download-artifact@v4 with: path: all-artifacts/ - name: Prepare release artifacts run: | mkdir -p release-artifacts find all-artifacts -type f -name "uptime-kuma-dashboard-*" -exec cp {} release-artifacts/ \; ls -lh release-artifacts/ - name: Generate checksums run: | cd release-artifacts sha256sum uptime-kuma-dashboard-* > SHA256SUMS.txt cat SHA256SUMS.txt - name: Create Release uses: https://code.forgejo.org/actions/forgejo-release@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: direction: upload release-dir: release-artifacts title: "Release ${{ github.ref_name }}" tag: ${{ github.ref_name }} release-notes: | ## 🚀 Multi-Platform Release Compiled on runner **${{ env.RUNNER_ARCH }}** ### 📦 Available Binaries This release includes binaries for the following platforms: - **Linux x86_64** (Intel/AMD 64-bit) - **Linux ARM64** (aarch64) - Raspberry Pi 4, Apple Silicon Linux, ARM servers - **Linux ARMv7** (armhf) - Raspberry Pi 3 and earlier - **Windows x86_64** (64-bit) ### 🚀 How to use #### Linux/ARM: ```bash # Download the appropriate binary wget https://your-forgejo.com/releases/download/${{ forgejo.ref_name }}/uptime-kuma-dashboard- # Make executable chmod +x uptime-kuma-dashboard-* # Run ./uptime-kuma-dashboard-* --base-url https://your-kuma --slug your-slug ``` #### Windows: ```powershell # Download uptime-kuma-dashboard-x86_64-pc-windows-gnu.exe # Run in PowerShell or CMD .\uptime-kuma-dashboard-x86_64-pc-windows-gnu.exe --base-url https://your-kuma --slug your-slug ``` ### ✅ Verify Checksums ```bash sha256sum -c SHA256SUMS.txt ``` ### 🏗️ Build Information - Runner Architecture: ${{ env.RUNNER_ARCH }} - Rust Version: 1.84.0 - Build Type: Release (optimized)