This is an automated email from the ASF dual-hosted git repository.
piotr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iggy.git
The following commit(s) were added to refs/heads/master by this push:
new 64d4e8ccf feat(ci): add ARM64 builds and connector plugins to edge
release (#2472)
64d4e8ccf is described below
commit 64d4e8ccf8ecf3d0a5337052b019fe1df1793344
Author: Hubert Gruszecki <[email protected]>
AuthorDate: Fri Dec 12 09:11:30 2025 +0100
feat(ci): add ARM64 builds and connector plugins to edge release (#2472)
- Fix edge tag not updating by using --cleanup-tag on release delete
- Add ARM64 binary builds using native ARM runners
- Add iggy-connectors binary to release artifacts
- Add connector plugin shared libraries (.so) for x86_64 and ARM64
- Refactor build logic into reusable _build_rust_artifacts.yml
---
...rust_binaries.yml => _build_rust_artifacts.yml} | 177 +++++++++++++++------
.github/workflows/_test_bdd.yml | 8 +
.github/workflows/post-merge.yml | 57 ++++---
3 files changed, 170 insertions(+), 72 deletions(-)
diff --git a/.github/workflows/_build_rust_binaries.yml
b/.github/workflows/_build_rust_artifacts.yml
similarity index 52%
rename from .github/workflows/_build_rust_binaries.yml
rename to .github/workflows/_build_rust_artifacts.yml
index 195d00df7..e087136a5 100644
--- a/.github/workflows/_build_rust_binaries.yml
+++ b/.github/workflows/_build_rust_artifacts.yml
@@ -15,8 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-# .github/workflows/_build_rust_binaries.yml
-name: _build_rust_binaries
+name: _build_rust_artifacts
on:
workflow_call:
inputs:
@@ -38,23 +37,28 @@ on:
type: string
required: false
default: ""
- description: "Specific commit to checkout for building binaries"
+ description: "Specific commit to checkout for building"
binaries:
type: string
required: false
- default: "iggy-server,iggy,iggy-bench"
+ default: "iggy-server,iggy,iggy-bench,iggy-connectors"
description: "Comma-separated list of binaries to build"
+ connector_plugins:
+ type: string
+ required: false
+ default:
"iggy_connector_elasticsearch_sink,iggy_connector_elasticsearch_source,iggy_connector_iceberg_sink,iggy_connector_postgres_sink,iggy_connector_postgres_source,iggy_connector_quickwit_sink,iggy_connector_random_source,iggy_connector_stdout_sink"
+ description: "Comma-separated list of connector plugin crates to build
as shared libraries"
outputs:
artifact_name:
- description: "Name of the uploaded artifact containing all binaries"
+ description: "Name of the uploaded artifact containing all artifacts"
value: ${{ jobs.collect.outputs.artifact_name }}
env:
IGGY_CI_BUILD: true
jobs:
- linux:
- name: Linux ${{ matrix.target }}
+ build-binaries:
+ name: Binaries ${{ matrix.target }}
runs-on: ${{ matrix.runner }}
timeout-minutes: 60
strategy:
@@ -67,12 +71,16 @@ jobs:
- target: x86_64-unknown-linux-musl
runner: ubuntu-latest
libc: musl
+ - target: aarch64-unknown-linux-gnu
+ runner: ubuntu-24.04-arm
+ libc: gnu
+ - target: aarch64-unknown-linux-musl
+ runner: ubuntu-24.04-arm
+ libc: musl
steps:
- name: Download latest copy script from master
if: inputs.use_latest_ci
- shell: bash
run: |
- set -euo pipefail
curl -sSL "https://raw.githubusercontent.com/${{ github.repository
}}/master/scripts/copy-latest-from-master.sh" \
-o /tmp/copy-latest-from-master.sh
chmod +x /tmp/copy-latest-from-master.sh
@@ -81,11 +89,9 @@ jobs:
with:
ref: ${{ inputs.commit || github.sha }}
- - name: Save and apply latest CI from master
+ - name: Apply latest CI from master
if: inputs.use_latest_ci
- shell: bash
run: |
- set -euo pipefail
/tmp/copy-latest-from-master.sh save .github scripts
/tmp/copy-latest-from-master.sh apply
@@ -102,10 +108,7 @@ jobs:
run: rustup target add ${{ matrix.target }}
- name: Build binaries
- shell: bash
run: |
- set -euo pipefail
-
binaries="${{ inputs.binaries }}"
bin_flags=()
@@ -120,10 +123,7 @@ jobs:
- name: Package binaries
id: pkg
- shell: bash
run: |
- set -euo pipefail
-
target="${{ matrix.target }}"
version="${{ inputs.version }}"
outdir="dist/${target}"
@@ -139,23 +139,102 @@ jobs:
tarball="iggy-${target}-${version}.tar.gz"
tar czf "${tarball}" -C "${outdir}" .
+ echo "tarball=${tarball}" >> "$GITHUB_OUTPUT"
+
+ - name: Upload artifact
+ if: inputs.upload_artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: binaries-${{ matrix.target }}
+ path: ${{ steps.pkg.outputs.tarball }}
+ retention-days: 7
+ if-no-files-found: error
+
+ build-connector-plugins:
+ name: Connector plugins ${{ matrix.target }}
+ runs-on: ${{ matrix.runner }}
+ timeout-minutes: 60
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - target: x86_64-unknown-linux-gnu
+ runner: ubuntu-latest
+ - target: aarch64-unknown-linux-gnu
+ runner: ubuntu-24.04-arm
+ steps:
+ - name: Download latest copy script from master
+ if: inputs.use_latest_ci
+ run: |
+ curl -sSL "https://raw.githubusercontent.com/${{ github.repository
}}/master/scripts/copy-latest-from-master.sh" \
+ -o /tmp/copy-latest-from-master.sh
+ chmod +x /tmp/copy-latest-from-master.sh
+
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.commit || github.sha }}
+
+ - name: Apply latest CI from master
+ if: inputs.use_latest_ci
+ run: |
+ /tmp/copy-latest-from-master.sh save .github scripts
+ /tmp/copy-latest-from-master.sh apply
+
+ - name: Setup Rust with cache
+ uses: ./.github/actions/utils/setup-rust-with-cache
+ with:
+ cache-targets: false
+
+ - name: Add Rust target
+ run: rustup target add ${{ matrix.target }}
+
+ - name: Build connector plugins
+ run: |
+ plugins="${{ inputs.connector_plugins }}"
+ pkg_flags=()
+
+ IFS=',' read -ra pkgs <<< "$plugins"
+ for pkg in "${pkgs[@]}"; do
+ name="$(echo "$pkg" | xargs)"
+ [[ -z "$name" ]] && continue
+ pkg_flags+=(--package "$name")
+ done
+
+ cargo build --locked --release --target ${{ matrix.target }}
"${pkg_flags[@]}"
+ - name: Package connector plugins
+ id: pkg
+ run: |
+ target="${{ matrix.target }}"
+ version="${{ inputs.version }}"
+ outdir="dist/${target}"
+ mkdir -p "${outdir}"
+
+ plugins="${{ inputs.connector_plugins }}"
+ IFS=',' read -ra pkgs <<< "$plugins"
+ for pkg in "${pkgs[@]}"; do
+ lib_name="$(echo "$pkg" | xargs)"
+ [[ -z "$lib_name" ]] && continue
+ so_file="target/${target}/release/lib${lib_name}.so"
+ [[ -f "$so_file" ]] && cp "$so_file" "${outdir}/"
+ done
+
+ tarball="iggy-connectors-${target}-${version}.tar.gz"
+ tar czf "${tarball}" -C "${outdir}" .
echo "tarball=${tarball}" >> "$GITHUB_OUTPUT"
- echo "Built: ${tarball}"
- ls -lh "${tarball}"
- name: Upload artifact
if: inputs.upload_artifacts
uses: actions/upload-artifact@v4
with:
- name: rust-binaries-${{ matrix.target }}
+ name: connector-plugins-${{ matrix.target }}
path: ${{ steps.pkg.outputs.tarball }}
retention-days: 7
if-no-files-found: error
collect:
- name: Collect all binaries
- needs: [linux]
+ name: Collect artifacts
+ needs: [build-binaries, build-connector-plugins]
if: inputs.upload_artifacts
runs-on: ubuntu-latest
outputs:
@@ -169,59 +248,57 @@ jobs:
id: meta
run: |
chmod +x scripts/extract-version.sh
- server_version=$(scripts/extract-version.sh rust-server)
- echo "server_version=${server_version}" >> "$GITHUB_OUTPUT"
+ echo "server_version=$(scripts/extract-version.sh rust-server)" >>
"$GITHUB_OUTPUT"
- - name: Download all binaries
+ - name: Download all artifacts
uses: actions/download-artifact@v4
with:
- pattern: rust-binaries-*
- merge-multiple: true
path: dist
+ merge-multiple: true
- - name: List binaries
- shell: bash
+ - name: Generate summary
run: |
- set -euo pipefail
shopt -s nullglob
-
tarballs=(dist/*.tar.gz)
- if ((${#tarballs[@]} == 0)); then
- echo "⚠️ No tarballs found in dist/, skipping summary." >>
"$GITHUB_STEP_SUMMARY"
- exit 0
- fi
+ (( ${#tarballs[@]} == 0 )) && exit 0
- echo "## 📦 Built Rust Binaries" >> "$GITHUB_STEP_SUMMARY"
- echo "" >> "$GITHUB_STEP_SUMMARY"
- echo "| Target | Libc | File | Size |" >> "$GITHUB_STEP_SUMMARY"
- echo "|--------|------|------|------|" >> "$GITHUB_STEP_SUMMARY"
+ {
+ echo "## Built Rust Artifacts"
+ echo ""
+ echo "| Type | Target | File | Size |"
+ echo "|------|--------|------|------|"
+ } >> "$GITHUB_STEP_SUMMARY"
for tarball in "${tarballs[@]}"; do
filename=$(basename "$tarball")
size=$(ls -lh "$tarball" | awk '{print $5}')
- if [[ "$filename" == *"gnu"* ]]; then libc="glibc"
- elif [[ "$filename" == *"musl"* ]]; then libc="musl (static)"
- else libc="unknown"; fi
+ if [[ "$filename" == iggy-connectors-* ]]; then type="plugins"
+ else type="binaries"; fi
if [[ "$filename" == *"x86_64"* ]]; then target="x86_64"
elif [[ "$filename" == *"aarch64"* ]]; then target="aarch64"
else target="unknown"; fi
- echo "| $target | $libc | \`$filename\` | $size |" >>
"$GITHUB_STEP_SUMMARY"
+ if [[ "$filename" == *"musl"* ]]; then target="$target (musl)"
+ elif [[ "$filename" == *"gnu"* ]]; then target="$target (glibc)"
+ fi
+
+ echo "| $type | $target | \`$filename\` | $size |" >>
"$GITHUB_STEP_SUMMARY"
done
- echo "" >> "$GITHUB_STEP_SUMMARY"
- echo "**Server version:** ${{ steps.meta.outputs.server_version }}"
>> "$GITHUB_STEP_SUMMARY"
- echo "" >> "$GITHUB_STEP_SUMMARY"
- echo "**Binaries included:** ${{ inputs.binaries }}" >>
"$GITHUB_STEP_SUMMARY"
+ {
+ echo ""
+ echo "**Server version:** ${{ steps.meta.outputs.server_version }}"
+ echo "**Binaries:** ${{ inputs.binaries }}"
+ } >> "$GITHUB_STEP_SUMMARY"
- name: Upload combined artifact
uses: actions/upload-artifact@v4
with:
- name: rust-binaries-all
+ name: rust-artifacts-all
path: dist
retention-days: 30
- id: output
- run: echo "artifact_name=rust-binaries-all" >> $GITHUB_OUTPUT
+ run: echo "artifact_name=rust-artifacts-all" >> "$GITHUB_OUTPUT"
diff --git a/.github/workflows/_test_bdd.yml b/.github/workflows/_test_bdd.yml
index 06f93ad63..907868913 100644
--- a/.github/workflows/_test_bdd.yml
+++ b/.github/workflows/_test_bdd.yml
@@ -39,6 +39,14 @@ jobs:
env:
IGGY_CI_BUILD: true
steps:
+ - name: Cleanup disk space
+ run: |
+ echo "Disk space before cleanup:"
+ df -h
+ sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
/opt/hostedtoolcache/CodeQL
+ echo "Disk space after cleanup:"
+ df -h
+
- name: Checkout code
uses: actions/checkout@v4
diff --git a/.github/workflows/post-merge.yml b/.github/workflows/post-merge.yml
index 0bdc2f508..84a2bc9ed 100644
--- a/.github/workflows/post-merge.yml
+++ b/.github/workflows/post-merge.yml
@@ -95,9 +95,9 @@ jobs:
version: edge
dry_run: ${{ github.event.repository.fork }} # forks: always dry-run
- build-rust-binaries:
- name: Build Rust binaries
- uses: ./.github/workflows/_build_rust_binaries.yml
+ build-artifacts:
+ name: Build artifacts
+ uses: ./.github/workflows/_build_rust_artifacts.yml
with:
version: edge
upload_artifacts: true
@@ -105,8 +105,8 @@ jobs:
create-prerelease:
name: Create edge pre-release
runs-on: ubuntu-latest
- needs: build-rust-binaries
- if: needs.build-rust-binaries.result == 'success' &&
!github.event.repository.fork
+ needs: build-artifacts
+ if: needs.build-artifacts.result == 'success' &&
!github.event.repository.fork
permissions:
contents: write
steps:
@@ -119,38 +119,32 @@ jobs:
server_version=$(scripts/extract-version.sh rust-server)
echo "server_version=${server_version}" >> "$GITHUB_OUTPUT"
- - name: Download edge artifacts
+ - name: Download all artifacts
uses: actions/download-artifact@v4
with:
- name: rust-binaries-all
+ name: rust-artifacts-all
path: ./artifacts
- - name: Delete existing edge release
+ - name: Delete existing edge release and tag
env:
GH_TOKEN: ${{ github.token }}
- shell: bash
run: |
- set -euo pipefail
if gh release view edge &>/dev/null; then
- echo "Deleting existing edge release..."
- if ! gh release delete edge --yes; then
- echo "Release delete failed (likely already deleted by
concurrent run), continuing."
- fi
- else
- echo "No existing edge release to delete"
+ echo "Deleting existing edge release and tag..."
+ gh release delete edge --cleanup-tag --yes || echo "Delete failed,
continuing..."
fi
- name: Create edge pre-release
uses: softprops/action-gh-release@v2
with:
tag_name: edge
- name: Edge (latest)
+ name: edge
draft: false
prerelease: true
make_latest: false
- files: artifacts/**/*.tar.gz
+ files: artifacts/*.tar.gz
body: |
- Rolling edge build of Apache Iggy binaries.
+ Rolling edge build of Apache Iggy binaries and connector plugins.
**This release is automatically updated on every push to master.**
@@ -158,13 +152,32 @@ jobs:
- `iggy-server` - The server binary
- `iggy` - The command-line interface
- `iggy-bench` - The benchmarking tool
+ - `iggy-connectors` - The connectors runtime
+
+ ## Connector plugins included (.so)
+ - `iggy_connector_elasticsearch_sink`
+ - `iggy_connector_elasticsearch_source`
+ - `iggy_connector_iceberg_sink`
+ - `iggy_connector_postgres_sink`
+ - `iggy_connector_postgres_source`
+ - `iggy_connector_quickwit_sink`
+ - `iggy_connector_random_source`
+ - `iggy_connector_stdout_sink`
## Downloads
- - `iggy-x86_64-unknown-linux-gnu-edge.tar.gz` - Linux (glibc)
- - `iggy-x86_64-unknown-linux-musl-edge.tar.gz` - Linux (musl,
static)
+
+ ### Binaries
+ - `iggy-x86_64-unknown-linux-gnu-edge.tar.gz` - Linux x86_64
(glibc)
+ - `iggy-x86_64-unknown-linux-musl-edge.tar.gz` - Linux x86_64
(musl, static)
+ - `iggy-aarch64-unknown-linux-gnu-edge.tar.gz` - Linux ARM64
(glibc)
+ - `iggy-aarch64-unknown-linux-musl-edge.tar.gz` - Linux ARM64
(musl, static)
+
+ ### Connector plugins
+ - `iggy-connectors-x86_64-unknown-linux-gnu-edge.tar.gz` - Linux
x86_64 (glibc)
+ - `iggy-connectors-aarch64-unknown-linux-gnu-edge.tar.gz` - Linux
ARM64 (glibc)
## Build info
- Server version: ${{ steps.meta.outputs.server_version }}
- Commit: ${{ github.sha }}
- ⚠️ **Not an official ASF release** - for development/testing only.
+ **Not an official ASF release** - for development/testing only.