Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 106 additions & 41 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
name: Ensure parseable builds on all release targets

on:
pull_request:
paths-ignore:
- docs/**
- helm/**
- assets/**
- "**.md"

jobs:
# Default build without Kafka
build-default:
Expand All @@ -15,25 +17,45 @@ jobs:
fail-fast: false
matrix:
include:
# Linux builds
# Linux builds - x86_64 native, aarch64 cross-compile
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
use_cross: false
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
# macOS builds
use_cross: true

# macOS builds - both native on macos-latest (M1)
- os: macos-latest
target: x86_64-apple-darwin
use_cross: false
- os: macos-latest
target: aarch64-apple-darwin
use_cross: false

# Windows build
- os: windows-latest
target: x86_64-pc-windows-msvc
use_cross: false

steps:
- uses: actions/checkout@v4

- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
uses: dtolnay/rust-toolchain@nightly
with:
targets: ${{ matrix.target }}

- name: Install GCC 11 on Linux
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y gcc-11 g++-11

- name: Install cross
if: matrix.use_cross
run: cargo install cross --git https://github.com/cross-rs/cross

- name: Cache dependencies
uses: actions/cache@v4
with:
Expand All @@ -42,12 +64,20 @@ jobs:
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ matrix.target }}-default-${{ hashFiles('**/Cargo.lock') }}
- name: Build
uses: actions-rs/cargo@v1
with:
use-cross: ${{ runner.os == 'Linux' }}
command: build
args: --target ${{ matrix.target }} --release

- name: Build with cross
if: matrix.use_cross
env:
CROSS_NO_WARNINGS: "0"
run: cross build --target ${{ matrix.target }} --release

- name: Build native
if: ${{ !matrix.use_cross }}
env:
CC: ${{ runner.os == 'Linux' && 'gcc-11' || '' }}
CXX: ${{ runner.os == 'Linux' && 'g++-11' || '' }}
run: cargo build --target ${{ matrix.target }} --release

# Kafka build for supported platforms
build-kafka:
name: Build Kafka ${{matrix.target}}
Expand All @@ -56,19 +86,40 @@ jobs:
fail-fast: false
matrix:
include:
# Linux builds
# Linux x86_64 - native build
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
use_cross: false

# Linux aarch64 - cross-compile
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
use_cross: true

# macOS aarch64 - native on M1
- os: macos-latest
target: aarch64-apple-darwin
use_cross: false

steps:
- uses: actions/checkout@v4
# Linux-specific dependencies
- name: Install Linux dependencies
if: runner.os == 'Linux'

- name: Set up Docker Buildx
if: matrix.use_cross
uses: docker/setup-buildx-action@v3

- name: Set up QEMU for cross-arch builds
if: matrix.use_cross
uses: docker/setup-qemu-action@v3

# Linux-specific dependencies for native x86_64 build
- name: Install Linux dependencies (x86_64)
if: runner.os == 'Linux' && matrix.target == 'x86_64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt-get install -y \
gcc-11 \
g++-11 \
build-essential \
pkg-config \
cmake \
Expand All @@ -78,19 +129,8 @@ jobs:
liblz4-dev \
libssl-dev \
libsasl2-dev \
python3 \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu
# Install cross-compilation specific packages
if [ "${{ matrix.target }}" = "aarch64-unknown-linux-gnu" ]; then
sudo apt-get install -y \
gcc-aarch64-linux-gnu \
g++-aarch64-linux-gnu \
libc6-dev-arm64-cross \
libsasl2-dev:arm64 \
libssl-dev:arm64 \
pkg-config-aarch64-linux-gnu
fi
python3

# macOS-specific dependencies
- name: Install macOS dependencies
if: runner.os == 'macOS'
Expand All @@ -103,10 +143,16 @@ jobs:
openssl@3.0 \
cyrus-sasl \
python3

- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
uses: dtolnay/rust-toolchain@nightly
with:
targets: ${{ matrix.target }}

- name: Install cross for aarch64
if: matrix.use_cross
run: cargo install cross --git https://github.com/cross-rs/cross

- name: Cache dependencies
uses: actions/cache@v4
with:
Expand All @@ -115,8 +161,9 @@ jobs:
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ matrix.target }}-kafka-${{ hashFiles('**/Cargo.lock') }}

- name: Find and fix librdkafka CMakeLists.txt for Linux
if: runner.os == 'Linux'
if: runner.os == 'Linux' && !matrix.use_cross
run: |
cargo fetch
# Find the rdkafka-sys package directory
Expand All @@ -136,6 +183,7 @@ jobs:
echo "Could not find librdkafka CMakeLists.txt file!"
exit 1
fi

- name: Find and fix librdkafka CMakeLists.txt for macOS
if: runner.os == 'macOS'
run: |
Expand All @@ -157,18 +205,35 @@ jobs:
echo "Could not find librdkafka CMakeLists.txt file!"
exit 1
fi
- name: Build with Kafka
uses: actions-rs/cargo@v1
with:
use-cross: ${{ runner.os == 'Linux' }}
command: build
args: --target ${{ matrix.target }} --features kafka --release

- name: Build with Kafka (cross) - FIXED
if: matrix.use_cross
env:
LIBRDKAFKA_SSL_VENDORED: 1
LIBRDKAFKA_SSL_VENDORED: "1"
PKG_CONFIG_ALLOW_CROSS: "1"
PKG_CONFIG_PATH: /usr/lib/aarch64-linux-gnu/pkgconfig
SASL2_DIR: /usr/lib/aarch64-linux-gnu
OPENSSL_DIR: /usr/lib/aarch64-linux-gnu
OPENSSL_ROOT_DIR: /usr/lib/aarch64-linux-gnu
OPENSSL_STATIC: "1"
SASL2_STATIC: "0"
CROSS_NO_WARNINGS: "0"
RUST_BACKTRACE: "1"

# Standard Debian multiarch paths for aarch64
ZLIB_INCLUDE_DIR: "/usr/include"
ZLIB_LIBRARY: "/usr/lib/aarch64-linux-gnu/libz.so"

OPENSSL_ROOT_DIR: "/usr"
OPENSSL_INCLUDE_DIR: "/usr/include"
OPENSSL_CRYPTO_LIBRARY: "/usr/lib/aarch64-linux-gnu/libcrypto.so"
OPENSSL_SSL_LIBRARY: "/usr/lib/aarch64-linux-gnu/libssl.so"

PKG_CONFIG_PATH: "/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig"
run: |
echo "=== HOST ENV DEBUG ==="
env | grep -E 'ZLIB_|OPENSSL_|PKG_CONFIG|LIBRDKAFKA'
echo "=== NOW RUNNING CROSS BUILD (pre-build will show zlib paths) ==="
cross build --target ${{ matrix.target }} --features kafka --release --verbose

- name: Build with Kafka (native)
if: ${{ !matrix.use_cross }}
env:
CC: ${{ runner.os == 'Linux' && 'gcc-11' || '' }}
CXX: ${{ runner.os == 'Linux' && 'g++-11' || '' }}
LIBRDKAFKA_SSL_VENDORED: "1"
run: cargo build --target ${{ matrix.target }} --features kafka --release
Loading
Loading