diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9799759..1008bca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Build and Release Dash Evo Tool +name: Release Dash Evo Tool on: push: @@ -16,47 +16,112 @@ on: jobs: build-and-release: - name: Build and Release Dash Evo Tool (ARM64 Only) - runs-on: ubuntu-latest - + name: Build and Release Dash Evo Tool + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + arch: [amd64, arm64] + include: + - platform: linux/amd64 + os: ubuntu-latest + arch: amd64 + target: x86_64-unknown-linux-gnu + - platform: linux/arm64 + os: ubuntu-latest + arch: arm64 + target: aarch64-unknown-linux-gnu + - platform: macos/amd64 + os: macos-latest + arch: amd64 + target: x86_64-apple-darwin + - platform: macos/arm64 + os: macos-latest + arch: arm64 + target: aarch64-apple-darwin steps: - - uses: actions/checkout@v4 - - # Set up QEMU to emulate ARM64 on the AMD64 host - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + - uses: dtolnay/rust-toolchain@master + name: Install Rust toolchain with: - platforms: arm64 + toolchain: stable + + - name: Install protoc + id: deps-protoc + shell: bash + run: | + curl -Lo /tmp/protoc.zip \ + https://github.com/protocolbuffers/protobuf/releases/download/v25.2/protoc-25.2-linux-x86_64.zip + unzip /tmp/protoc.zip -d ${HOME}/.local + echo "PROTOC=${HOME}/.local/bin/protoc" >> $GITHUB_ENV + export PATH="${PATH}:${HOME}/.local/bin" + + # Install cross-compilation toolchain for ARM on Linux + - name: Install cross-compilation toolchain (only for arm64) + if: matrix.arch == 'arm64' && matrix.os == 'ubuntu-latest' + run: sudo apt-get update && sudo apt-get install -y gcc-aarch64-linux-gnu - # Set up Docker Buildx for multi-platform builds - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + - name: Set environment variables for cross-compilation + if: matrix.arch == 'arm64' && matrix.os == 'ubuntu-latest' + run: | + echo "CC=aarch64-linux-gnu-gcc" >> $GITHUB_ENV + echo "CXX=aarch64-linux-gnu-g++" >> $GITHUB_ENV + echo "AR=aarch64-linux-gnu-ar" >> $GITHUB_ENV + echo "PKG_CONFIG_PATH=/usr/aarch64-linux-gnu/lib/pkgconfig:/usr/lib/aarch64-linux-gnu/pkgconfig" >> $GITHUB_ENV + echo "PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu" >> $GITHUB_ENV + + - name: Install OpenSSL libraries for ARM64 + if: matrix.arch == 'arm64' && matrix.os == 'ubuntu-latest' + run: | + sudo dpkg --add-architecture arm64 + sudo apt-get update + sudo apt-get install -y libssl-dev:aarch64 - # ARM64 build in Docker with QEMU emulation - - name: Build in ARM64 Docker container + - name: Debug environment variables run: | - docker run --platform linux/arm64 --rm -v $(pwd):/build -w /build arm64v8/ubuntu:latest /bin/bash -c " - apt-get update && - apt-get install -y build-essential gcc-aarch64-linux-gnu libssl-dev curl unzip && - - # Install protoc for ARM64 - curl -Lo /tmp/protoc.zip \ - https://github.com/protocolbuffers/protobuf/releases/download/v22.2/protoc-22.2-linux-aarch_64.zip && - unzip /tmp/protoc.zip -d \$HOME/.local && - export PATH=\$PATH:\$HOME/.local/bin && - - # Install Rust and cross-compilation toolchain - curl https://sh.rustup.rs -sSf | sh -s -- -y && - source \$HOME/.cargo/env && - rustup target add aarch64-unknown-linux-gnu && - - # Build the Rust project - cargo build --release --target aarch64-unknown-linux-gnu - " - - # Upload artifacts + echo "CC is set to: $CC" + echo "CXX is set to: $CXX" + echo "PKG_CONFIG is set to: $PKG_CONFIG" + echo "PKG_CONFIG_PATH is set to: $PKG_CONFIG_PATH" + which $CC + + + - name: Check out code + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: ${{ matrix.target }} + override: true + + - name: Build project + run: cargo build --release --target ${{ matrix.target }} + - name: Upload build artifact uses: actions/upload-artifact@v3 with: - name: dash-evo-tool-arm64 - path: target/aarch64-unknown-linux-gnu/release/dash-evo-tool + name: dash-evo-tool-${{ matrix.platform }} + path: target/${{ matrix.target }}/release/dash-evo-tool + + continue-on-error: true + + release: + name: Create GitHub Release + needs: build-and-release + runs-on: ubuntu-latest + steps: + - name: Download build artifacts + uses: actions/download-artifact@v3 + with: + name: dash-evo-tool-* + path: ./release + + - name: Publish release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + files: ./release/dash-evo-tool-* + draft: false + prerelease: false \ No newline at end of file