name: Multi-Platform Release Build on: push: tags: - "v*.*.*" jobs: build: runs-on: docker strategy: fail-fast: false matrix: include: - target: native cross: false platform: linux/arm64 - target: x86_64-unknown-linux-gnu cross: true platform: linux/amd64 - target: x86_64-pc-windows-gnu cross: true platform: linux/amd64 container: image: rust:alpine options: --platform ${{ matrix.platform }} 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' && !matrix.container run: rustup target add ${{ matrix.target }} - 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' && !matrix.container 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 }}" # Os containers especializados jรก tรชm tudo configurado 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://data.forgejo.org/forgejo/upload-artifact@v4 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://data.forgejo.org/forgejo/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, ARM servers - **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)