name: Release Multiplatform Binaries on: push: tags: - 'v*' workflow_dispatch: inputs: tag: description: 'Release Tag (e.g. v2.2.3)' required: false default: 'v2.2.3' type: string permissions: contents: write env: SQLX_OFFLINE: true SQLX_OFFLINE_DIR: packages/oneclient_db/.sqlx jobs: build: strategy: fail-fast: false matrix: include: # Linux x86_64 - os: ubuntu-22.04 target: x86_64-unknown-linux-gnu name: linux-x86_64 formats: deb,appimage # Windows x86_64 - os: windows-latest target: x86_64-pc-windows-msvc name: windows-x86_64 formats: nsis # macOS Apple Silicon - os: macos-14 target: aarch64-apple-darwin name: macos-arm64 formats: dmg,app # macOS Intel (cross-compiled on macos-14) - os: macos-14 target: x86_64-apple-darwin name: macos-x86_64 formats: dmg,app runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - name: Rust Cache uses: Swatinem/rust-cache@v2 with: key: ${{ matrix.target }} cache-all-crates: true - name: Install Linux build dependencies if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y \ libwebkit2gtk-4.1-dev \ build-essential \ curl \ wget \ file \ libxdo-dev \ libssl-dev \ libayatana-appindicator3-dev \ librsvg2-dev \ libfontconfig1-dev \ libfreetype6-dev \ libgl1-mesa-dev \ libvulkan-dev \ libasound2-dev - name: Install cargo-packager run: cargo install cargo-packager --locked || true - name: Build Release Binary run: cargo build --release --bin oneclient_app --target ${{ matrix.target }} - name: Package Application run: cargo packager --release --target ${{ matrix.target }} --formats ${{ matrix.formats }} continue-on-error: true - name: Generate RPM Package (Linux) if: runner.os == 'Linux' run: | cargo install cargo-generate-rpm --locked || true cargo generate-rpm --target ${{ matrix.target }} -p oneclient_app || true - name: Upload Build Artifacts uses: actions/upload-artifact@v4 with: name: binaries-${{ matrix.name }} if-no-files-found: warn path: | target/${{ matrix.target }}/release/*.deb target/${{ matrix.target }}/release/*.AppImage target/${{ matrix.target }}/release/*.dmg target/${{ matrix.target }}/release/*-setup.exe target/${{ matrix.target }}/release/oneclient_app.exe target/${{ matrix.target }}/release/oneclient_app target/${{ matrix.target }}/generate-rpm/*.rpm target/generate-rpm/*.rpm target/release/*.deb target/release/*.AppImage target/release/*.dmg target/release/*-setup.exe create-release: needs: build runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' steps: - name: Download all artifacts uses: actions/download-artifact@v4 with: path: ./artifacts merge-multiple: true - name: Determine Release Tag id: release_tag run: | if [[ "${{ github.ref_name }}" =~ ^v ]]; then echo "tag=${{ github.ref_name }}" >> $GITHUB_OUTPUT elif [ -n "${{ inputs.tag }}" ]; then echo "tag=${{ inputs.tag }}" >> $GITHUB_OUTPUT else echo "tag=v2.2.3" >> $GITHUB_OUTPUT fi - name: Publish GitHub Release uses: softprops/action-gh-release@v2 with: files: ./artifacts/**/* tag_name: ${{ steps.release_tag.outputs.tag }} name: "OneLauncher-Cracked ${{ steps.release_tag.outputs.tag }}" draft: false prerelease: false generate_release_notes: true make_latest: true fail_on_unmatched_files: false