Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
bc6bf9b
feat: add label-based conditional execution for integration tests (#270)
AndreaBozzo Nov 27, 2025
c0777c1
feat: eliminate redundant builds in integration tests (#270)
AndreaBozzo Nov 27, 2025
3c3d7e1
feat: add Docker layer caching to integration tests (#270)
AndreaBozzo Nov 27, 2025
6a3881f
fix: resolve CI issues in integration test optimization
AndreaBozzo Nov 27, 2025
63f87fd
fix: resolve CI issues in integration test optimization
AndreaBozzo Nov 29, 2025
1be66e1
Merge branch 'main' into optimize-ci-integration-tests-270
AndreaBozzo Dec 7, 2025
cf5d9ea
fix: update CI workflow to use actions/checkout@v6 and improve cachin…
AndreaBozzo Dec 7, 2025
47a0e98
fix: CI workflow improvements and cleanup
AndreaBozzo Dec 7, 2025
ff18878
fix: resolve CI failures and remove labeler per maintainer request
AndreaBozzo Dec 7, 2025
43db981
fix: resolve permission denied error in CI integration tests
AndreaBozzo Dec 21, 2025
6825364
fix: build mc image in cached mode and add cache dirs to gitignore
AndreaBozzo Dec 21, 2025
b987965
reverted .gitignore, reverted mistakenly downgraded action
AndreaBozzo Dec 21, 2025
feb4992
reverted pr.yml
AndreaBozzo Dec 21, 2025
be137a1
use pre-built Docker Hub image for integration tests
AndreaBozzo Dec 29, 2025
ae235b1
Merge remote-tracking branch 'origin/main' into optimize-ci-integrati…
AndreaBozzo Jan 2, 2026
b0539de
Merge branch 'main' into optimize-ci-integration-tests-270
AndreaBozzo Jan 2, 2026
1418911
checkout action to v6
AndreaBozzo Jan 2, 2026
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
19 changes: 15 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -152,21 +152,29 @@ jobs:

integration-tests:
strategy:
fail-fast: false
matrix:
app-path: [ 'datafusion', 'hudi-file-group-api/cpp', 'hudi-table-api/rust' , 'hudi-table-api/python' ]
fail-fast: false
matrix:
app-path: [ 'datafusion', 'hudi-file-group-api/cpp', 'hudi-table-api/rust', 'hudi-table-api/python' ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Pull pre-built runner image
run: |
docker pull andreab92/hudi-demo-runner:latest
docker tag andreab92/hudi-demo-runner:latest demo-runner:latest

- name: Pre-pull base images
run: |
docker pull quay.io/minio/minio:latest

- name: Prepare cache directories with correct permissions
run: |
mkdir -p .cargo/registry .cargo/git target python/target .uv-cache
sudo chown -R $(id -u):$(id -g) .cargo target python/target .uv-cache

- name: Cache integration build artifacts (cargo/target/uv)
uses: actions/cache@v5
with:
Expand All @@ -176,13 +184,16 @@ jobs:
.cargo/git
python/target
.uv-cache
key: integration-${{ runner.os }}-${{ hashFiles('**/Cargo.lock', 'python/Cargo.toml', 'demo/infra/runner/Dockerfile') }}
key: integration-${{ runner.os }}-${{ matrix.app-path }}-${{ hashFiles('**/Cargo.lock', 'python/Cargo.toml', 'demo/infra/runner/Dockerfile') }}
restore-keys: |
integration-${{ runner.os }}-${{ matrix.app-path }}-
integration-${{ runner.os }}-

- name: Integration test - ${{ matrix.app-path }}
run: |
cd demo
./ci_run.sh ${{ matrix.app-path }}

- name: Fix cache ownership before save
if: always()
run: |
Expand Down
1 change: 1 addition & 0 deletions demo/compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,4 @@ services:
networks:
demo_network:
driver: bridge

13 changes: 9 additions & 4 deletions demo/infra/runner/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ FROM rust:1.87

RUN apt-get update && apt-get install -y cmake curl ca-certificates

# Install uv to a globally accessible location (not /root/.local/bin)
# This allows the container to run as any user (HOST_UID:HOST_GID)
ADD https://astral.sh/uv/install.sh /uv-installer.sh
RUN UV_INSTALL_DIR=/usr/local/bin sh /uv-installer.sh && rm /uv-installer.sh

RUN sh /uv-installer.sh && rm /uv-installer.sh

ENV PATH="/root/.local/bin/:$PATH"

# Install Python to a shared location accessible by any user
ENV UV_PYTHON_INSTALL_DIR=/opt/python
RUN uv python install 3.13

RUN uv python list
Expand All @@ -36,6 +37,10 @@ ENV PATH="/opt/.venv/bin:$PATH"

RUN uv pip install --only-binary=all 'pyarrow==20.0.0'

# Make Python installation and venv accessible to any user (needed for HOST_UID:HOST_GID mapping)
# Python needs read+execute, venv needs read+write+execute for pip install
RUN chmod -R a+rX /opt/python && chmod -R a+rwX /opt/.venv
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you pre-build this docker image and publish it in docker hub so it can be pulled directly during CI? once everything passed, I can re-publish the same image under Hudi's official docker hub

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm going to try do that before Christmas, thats actually neat solution

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sounds good


WORKDIR /opt

CMD tail -f /dev/null
Loading