Skip to content
54 changes: 31 additions & 23 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
---
name: Ensure parseable builds on all release targets

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

jobs:
# Default build without Kafka
build-default:
Expand All @@ -30,15 +29,12 @@ jobs:
# Windows build
- os: windows-latest
target: x86_64-pc-windows-msvc

steps:
- uses: actions/checkout@v4

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

- name: Cache dependencies
uses: actions/cache@v4
with:
Expand All @@ -47,14 +43,12 @@ 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

# Kafka build for supported platforms
build-kafka:
name: Build Kafka ${{matrix.target}}
Expand All @@ -68,10 +62,8 @@ jobs:
target: x86_64-unknown-linux-gnu
- os: macos-latest
target: aarch64-apple-darwin

steps:
- uses: actions/checkout@v4

# Linux-specific dependencies
- name: Install Linux dependencies
if: runner.os == 'Linux'
Expand All @@ -90,7 +82,6 @@ jobs:
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 \
Expand All @@ -101,8 +92,6 @@ jobs:
libssl-dev:arm64 \
pkg-config-aarch64-linux-gnu
fi


# macOS-specific dependencies
- name: Install macOS dependencies
if: runner.os == 'macOS'
Expand All @@ -116,21 +105,40 @@ jobs:
openssl@3.0 \
cyrus-sasl \
python3

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

- name: Cache dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ matrix.target }}-kafka-${{ hashFiles('**/Cargo.lock') }}

key: ${{ runner.os }}-cargo-${{ matrix.target }}-kafka-${{
hashFiles('**/Cargo.lock') }}
- name: Find and fix librdkafka CMakeLists.txt
if: runner.os == 'Linux' || runner.os == 'macOS'
run: |
cargo fetch
# Find the rdkafka-sys package directory
RDKAFKA_SYS_DIR=$(find ~/.cargo/registry/src -name "rdkafka-sys-*" -type d | head -n 1)
echo "Found rdkafka-sys at: $RDKAFKA_SYS_DIR"
# Find the librdkafka CMakeLists.txt file
CMAKE_FILE="$RDKAFKA_SYS_DIR/librdkafka/CMakeLists.txt"
if [ -f "$CMAKE_FILE" ]; then
echo "Found CMakeLists.txt at: $CMAKE_FILE"
# Make a backup of the original file
cp "$CMAKE_FILE" "$CMAKE_FILE.bak"
# Replace the minimum required version
sed -i 's/cmake_minimum_required(VERSION 3.2)/cmake_minimum_required(VERSION 3.5)/' "$CMAKE_FILE"
echo "Modified CMakeLists.txt - before and after comparison:"
diff "$CMAKE_FILE.bak" "$CMAKE_FILE" || true
else
echo "Could not find librdkafka CMakeLists.txt file!"
exit 1
fi
- name: Build with Kafka
uses: actions-rs/cargo@v1
with:
Expand All @@ -140,9 +148,9 @@ jobs:
env:
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"
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"
28 changes: 0 additions & 28 deletions .github/workflows/coverage.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,34 +62,6 @@ jobs:
exit 1
fi

- name: Find and fix librdkafka CMakeLists.txt
run: |
# Download the package first so it's in the registry
cargo fetch

# Find the rdkafka-sys package directory
RDKAFKA_SYS_DIR=$(find ~/.cargo/registry/src -name "rdkafka-sys-*" -type d | head -n 1)
echo "Found rdkafka-sys at: $RDKAFKA_SYS_DIR"

# Find the librdkafka CMakeLists.txt file
CMAKE_FILE="$RDKAFKA_SYS_DIR/librdkafka/CMakeLists.txt"

if [ -f "$CMAKE_FILE" ]; then
echo "Found CMakeLists.txt at: $CMAKE_FILE"

# Make a backup of the original file
cp "$CMAKE_FILE" "$CMAKE_FILE.bak"

# Replace the minimum required version
sed -i 's/cmake_minimum_required(VERSION 3.2)/cmake_minimum_required(VERSION 3.5)/' "$CMAKE_FILE"

echo "Modified CMakeLists.txt - before and after comparison:"
diff "$CMAKE_FILE.bak" "$CMAKE_FILE" || true
else
echo "Could not find librdkafka CMakeLists.txt file!"
exit 1
fi

- name: Check with clippy
run: cargo hack clippy --verbose --each-feature --no-dev-deps -- -D warnings

Expand Down
24 changes: 21 additions & 3 deletions Dockerfile.kafka
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,27 @@ RUN apt-get update && \
WORKDIR /parseable
COPY Cargo.toml Cargo.lock build.rs ./

# Create a dummy main.rs to pre-cache dependencies
RUN mkdir src && echo "fn main() {}" > src/main.rs && \
cargo build --release --features kafka && \
# Fix librdkafka CMakeLists.txt before building
RUN mkdir -p src && echo "fn main() {}" > src/main.rs && \
# Download the package so it's in the cargo registry
cargo fetch && \
# Find rdkafka-sys directory
RDKAFKA_SYS_DIR=$(find /usr/local/cargo/registry/src -name "rdkafka-sys-*" -type d | head -n 1) && \
echo "Found rdkafka-sys at: $RDKAFKA_SYS_DIR" && \
# Find the CMakeLists.txt file
CMAKE_FILE="$RDKAFKA_SYS_DIR/librdkafka/CMakeLists.txt" && \
if [ -f "$CMAKE_FILE" ]; then \
echo "Found CMakeLists.txt at: $CMAKE_FILE" && \
# Replace the minimum required version
sed -i 's/cmake_minimum_required(VERSION 3.2)/cmake_minimum_required(VERSION 3.5)/' "$CMAKE_FILE" && \
echo "Modified CMakeLists.txt to use CMake 3.5 minimum version"; \
else \
echo "Could not find librdkafka CMakeLists.txt file!" && \
exit 1; \
fi

# Now build dependencies with the fixed CMakeLists.txt
RUN cargo build --release --features kafka && \
rm -rf src

# Copy the actual source code
Expand Down
Loading
Loading