From eeb61ace225bc907be720d5c83dce5d13e7ce724 Mon Sep 17 00:00:00 2001 From: Wendy Tang Date: Thu, 29 May 2025 21:08:19 -0700 Subject: [PATCH] fix: protobuf install in build (#2714) Co-authored-by: Michael Neale --- .github/workflows/build-cli.yml | 10 +++++-- Cross.toml | 46 ++++++++++++++++++++++++++++++--- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-cli.yml b/.github/workflows/build-cli.yml index b7fb859c..d0956aff 100644 --- a/.github/workflows/build-cli.yml +++ b/.github/workflows/build-cli.yml @@ -64,6 +64,12 @@ jobs: RUST_BACKTRACE: 1 CROSS_VERBOSE: 1 run: | + # Install protoc if on macOS + if [ "${{ matrix.os }}" = "macos-latest" ]; then + brew install protobuf + export PROTOC=$(which protoc) + fi + export TARGET="${{ matrix.architecture }}-${{ matrix.target-suffix }}" rustup target add "${TARGET}" echo "Building for target: ${TARGET}" @@ -72,7 +78,7 @@ jobs: echo "Cross version:" cross --version - # 'cross' is used to cross-compile for different architectures (see Cross.toml) + echo "Building with explicit PROTOC path..." cross build --release --target ${TARGET} -p goose-cli -vv # tar the goose binary as goose-.tar.bz2 @@ -84,4 +90,4 @@ jobs: uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # pin@v4 with: name: goose-${{ matrix.architecture }}-${{ matrix.target-suffix }} - path: ${{ env.ARTIFACT }} + path: ${{ env.ARTIFACT }} \ No newline at end of file diff --git a/Cross.toml b/Cross.toml index fc461fe1..4e7ab47d 100644 --- a/Cross.toml +++ b/Cross.toml @@ -1,4 +1,11 @@ # Configuration for cross-compiling using cross +[build.env] +passthrough = [ + "PROTOC", + "RUST_LOG", + "RUST_BACKTRACE" +] + [target.aarch64-unknown-linux-gnu] xargo = false pre-build = [ @@ -6,29 +13,62 @@ pre-build = [ "dpkg --add-architecture arm64", """\ apt-get update --fix-missing && apt-get install -y \ + curl \ + unzip \ pkg-config \ libssl-dev:arm64 \ libdbus-1-dev:arm64 \ libxcb1-dev:arm64 + """, + """\ + curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v31.1/protoc-31.1-linux-x86_64.zip && \ + unzip -o protoc-31.1-linux-x86_64.zip -d /usr/local && \ + chmod +x /usr/local/bin/protoc && \ + ln -sf /usr/local/bin/protoc /usr/bin/protoc && \ + which protoc && \ + protoc --version """ ] [target.x86_64-unknown-linux-gnu] xargo = false pre-build = [ - # Install necessary dependencies for x86_64 - # We don't need architecture-specific flags because x86_64 dependencies are installable on Ubuntu system """\ apt-get update && apt-get install -y \ + curl \ + unzip \ pkg-config \ libssl-dev \ libdbus-1-dev \ - libxcb1-dev \ + libxcb1-dev + """, + """\ + curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v31.1/protoc-31.1-linux-x86_64.zip && \ + unzip -o protoc-31.1-linux-x86_64.zip -d /usr/local && \ + chmod +x /usr/local/bin/protoc && \ + ln -sf /usr/local/bin/protoc /usr/bin/protoc && \ + which protoc && \ + protoc --version """ ] +env = { "PROTOC" = "/usr/bin/protoc", "PATH" = "/usr/local/bin:${PATH}" } [target.x86_64-pc-windows-gnu] image = "dockcross/windows-static-x64:latest" # Enable verbose output for Windows builds build-std = true env = { "RUST_LOG" = "debug", "RUST_BACKTRACE" = "1", "CROSS_VERBOSE" = "1" } +pre-build = [ + """\ + apt-get update && apt-get install -y \ + curl \ + unzip + """, + """\ + curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v31.1/protoc-31.1-linux-x86_64.zip && \ + unzip protoc-31.1-linux-x86_64.zip -d /usr/local && \ + chmod +x /usr/local/bin/protoc && \ + export PROTOC=/usr/local/bin/protoc && \ + protoc --version + """ +]