Skip to content

feat(shuffle): CellShuffle columnar shuffle writer and reader #4252

feat(shuffle): CellShuffle columnar shuffle writer and reader

feat(shuffle): CellShuffle columnar shuffle writer and reader #4252

Workflow file for this run

# Copyright (c) ByteDance Ltd. and/or its affiliates.
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
name: Build and Test
on:
pull_request:
branches: [ main ]
merge_group:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
actions: read
contents: read
pull-requests: read
env:
PRE_COMMIT_HOME: /data/pre-commit-cache
CCACHE_DIR: /data/ccache-data
CCACHE_MAX_SIZE: '100G'
CI_NUM_THREADS: "16"
IN_CI: '1'
# Bump this when external CI images/tooling change without a tree change.
CI_REUSE_SALT: >-
bolt-ci:20260114|conan-server:latest|build-test-v2
CI_BASE_SHA: >-
${{ github.event_name == 'pull_request' &&
github.event.pull_request.base.sha ||
github.event.merge_group.base_sha }}
jobs:
reuse-check:
runs-on: ubuntu-latest
outputs:
hit: ${{ steps.reuse.outputs.hit }}
tree_sha: ${{ steps.fingerprint.outputs.tree_sha }}
base_sha: ${{ steps.fingerprint.outputs.base_sha }}
config_hash: ${{ steps.fingerprint.outputs.config_hash }}
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Compute CI fingerprint
id: fingerprint
run: |
python3 .github/scripts/merge_queue_ci.py fingerprint \
--salt "${CI_REUSE_SALT}" \
--base-sha "${CI_BASE_SHA}" \
--github-output "${GITHUB_OUTPUT}"
- name: Find reusable CI result
id: reuse
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
python3 .github/scripts/merge_queue_ci.py find-reuse \
--event "${{ github.event_name }}" \
--tree-sha "${{ steps.fingerprint.outputs.tree_sha }}" \
--base-sha "${{ steps.fingerprint.outputs.base_sha }}" \
--salt "${CI_REUSE_SALT}" \
--github-output "${GITHUB_OUTPUT}"
changes:
runs-on: ubuntu-latest
outputs:
source_code: ${{ steps.filter.outputs.source_code }}
steps:
- name: Checkout code
uses: actions/checkout@v6
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
# Keep the workflow itself unfiltered so required checks are always
# reported; only gate the self-hosted compilation jobs here.
source_code:
- 'bolt/**'
- '!bolt/**/*.md'
- 'Makefile'
- 'conanfile.py'
- 'CMakeLists.txt'
- 'scripts/conan/**'
- 'scripts/install-bolt-deps.sh'
- 'scripts/run-clang-tidy.py'
- '.clang-tidy'
- '.pre-commit-config.yaml'
- '.github/actions/bolt-build-base/**'
- '.github/workflows/build-test.yml'
build-test:
name: build-test (${{ matrix.build_type }})
needs: [reuse-check, changes]
if: >-
${{ needs.reuse-check.outputs.hit != 'true' &&
needs.changes.outputs.source_code == 'true' }}
runs-on: [ self-hosted, medium ]
container:
image: bolt-registry:5000/bolt-ci:20260114
options: --user root --init
volumes:
- /data/pre-commit-cache:/data/pre-commit-cache
- /data/ccache-data:/data/ccache-data
services:
conanserver:
image: bolt-registry:5000/conan-server:latest
volumes:
- /data/conan-server-data:/var/conan/data
strategy:
matrix:
include:
- build_type: release
build_target: benchmarks-build
- build_type: release_spark
build_target: release_spark_with_test
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- id: env-setup
uses: ./.github/actions/bolt-build-base
- name: Configure Conan profile for benchmarks
if: ${{ matrix.build_type == 'release' }}
run: |
echo 'tools.cmake.cmaketoolchain:extra_variables={"CMAKE_CXX_FLAGS_DEBUG": ""}' >> $(conan profile path default)
- name: Bolt build
run: |
make ${{ matrix.build_target }}
- name: Run clang-tidy
if: ${{ matrix.build_type == 'release_spark' }}
run: |
CLANG_TIDY_SKIP_MISSING=1 pre-commit run clang-tidy --all-files
- name: Run tests
run: |
make ctest_release
build-only:
needs: [reuse-check, changes]
if: >-
${{ needs.reuse-check.outputs.hit != 'true' &&
needs.changes.outputs.source_code == 'true' }}
runs-on: [ self-hosted, medium ]
container:
image: bolt-registry:5000/bolt-ci:20260114
volumes:
- /data/ccache-data:/data/ccache-data
options: --user root --init
services:
conanserver:
image: bolt-registry:5000/conan-server:latest
volumes:
- /data/conan-server-data:/var/conan/data
strategy:
matrix:
build_target: [ debug_spark_with_test ]
steps:
- name: Checkout code
uses: actions/checkout@v6
- id: env-setup
uses: ./.github/actions/bolt-build-base
- name: Bolt build
run: |
echo 'tools.cmake.cmaketoolchain:extra_variables={"CMAKE_CXX_FLAGS_DEBUG": ""}' >> $(conan profile path default)
make ${{ matrix.build_target }}
source-result:
needs: [reuse-check, changes, build-test, build-only]
if: >-
${{ always() &&
needs.reuse-check.result == 'success' &&
needs.changes.result == 'success' &&
(needs.build-test.result == 'success' ||
needs.build-test.result == 'skipped') &&
(needs.build-only.result == 'success' ||
needs.build-only.result == 'skipped') }}
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Record tested source
id: source
run: |
python3 .github/scripts/merge_queue_ci.py record-source \
--workflow build-test.yml \
--event "${{ github.event_name }}" \
--run-id "${GITHUB_RUN_ID}" \
--run-attempt "${GITHUB_RUN_ATTEMPT}" \
--merge-sha "${GITHUB_SHA}" \
--tree-sha "${{ needs.reuse-check.outputs.tree_sha }}" \
--base-sha "${{ needs.reuse-check.outputs.base_sha }}" \
--config-hash "${{ needs.reuse-check.outputs.config_hash }}" \
--output ci-source/result.json \
--github-output "${GITHUB_OUTPUT}"
- name: Upload tested source
uses: actions/upload-artifact@v4
with:
name: ${{ steps.source.outputs.artifact_name }}
path: ci-source/result.json
if-no-files-found: error
retention-days: 2