Skip to content

feat (cli): initialize the CLI of GraphAr and support baseETL functions #1104

feat (cli): initialize the CLI of GraphAr and support baseETL functions

feat (cli): initialize the CLI of GraphAr and support baseETL functions #1104

Workflow file for this run

# 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: GraphAr C++ CI
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- main
paths:
- 'cpp/**'
- '.github/workflows/ci.yml'
pull_request:
branches:
- main
paths:
- 'cpp/**'
- '.github/workflows/ci.yml'
concurrency:
group: ${{ github.repository }}-${{ github.event.number || github.head_ref || github.sha }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
ubuntu:
name: Ubuntu 22.04 C++
runs-on: ubuntu-latest
if: ${{ !contains(github.event.pull_request.title, 'WIP') && !github.event.pull_request.draft }}
env:
GAR_TEST_DATA: ${{ github.workspace }}/graphar-testing/
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install dependencies
run: |
# install the latest arrow deb to test arrow
wget -c https://apache.jfrog.io/artifactory/arrow/"$(lsb_release --id --short | tr 'A-Z' 'a-z')"/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb \
-P /tmp/
sudo apt-get install -y /tmp/apache-arrow-apt-source-latest-"$(lsb_release --codename --short)".deb
sudo apt-get update -y
sudo apt install -y libarrow-dev=17.0.0-1 \
libarrow-dataset-dev=17.0.0-1 \
libarrow-acero-dev=17.0.0-1 \
libparquet-dev=17.0.0-1
sudo apt-get install -y libboost-graph-dev ccache libcurl4-openssl-dev doxygen lcov
# install benchmark
git clone --branch v1.8.3 https://github.com/google/benchmark.git --depth 1
pushd benchmark
cmake -DCMAKE_BUILD_TYPE=Release -DBENCHMARK_ENABLE_TESTING=OFF -DBENCHMARK_ENABLE_GTEST_TESTS=OFF .
sudo make install
popd
# install Catch2 v3
git clone --branch v3.6.0 https://github.com/catchorg/Catch2.git --depth 1
pushd Catch2
cmake -Bbuild -H. -DBUILD_TESTING=OFF
sudo cmake --build build/ --target install
popd
git clone https://github.com/apache/incubator-graphar-testing.git $GAR_TEST_DATA --depth 1
- name: CMake
working-directory: "cpp"
run: |
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON -DBUILD_BENCHMARKS=ON -DCMAKE_CXX_FLAGS="--coverage" -DCMAKE_C_FLAGS="--coverage"
- name: Cpp Format and lint
working-directory: "cpp/build"
run: |
# install clang-format
sudo curl -L https://github.com/muttleyxd/clang-tools-static-binaries/releases/download/master-22538c65/clang-format-8_linux-amd64 --output /usr/bin/clang-format
sudo chmod +x /usr/bin/clang-format
# validate format
function prepend() { while read line; do echo "${1}${line}"; done; }
make graphar-clformat
GIT_DIFF=$(git diff --ignore-submodules)
if [[ -n $GIT_DIFF ]]; then
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "| clang-format failures found!"
echo "|"
echo "$GIT_DIFF" | prepend "| "
echo "|"
echo "| Run: "
echo "|"
echo "| make graphar-clformat"
echo "|"
echo "| to fix this error."
echo "|"
echo "| Ensure you are working with clang-format-8, which can be obtained from"
echo "|"
echo "| https://github.com/muttleyxd/clang-tools-static-binaries/releases"
echo "|"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
exit -1
fi
function ec() { [[ "$1" == "-h" ]] && { shift && eval $* > /dev/null 2>&1; ec=$?; echo $ec; } || eval $*; ec=$?; }
ec make graphar-cpplint
if [[ "$ec" != "0" ]]; then
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "| cpplint failures found! Run: "
echo "|"
echo "| make graphar-cpplint"
echo "|"
echo "| to fix this error."
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
exit -1
fi
- name: Build Docs
working-directory: "cpp/build"
run: |
cmake -DENABLE_DOCS=ON ..
make docs
- name: Build GraphAr
working-directory: "cpp/build"
run: make -j$(nproc)
- name: Test
working-directory: "cpp/build"
run: |
export ASAN_OPTIONS=detect_leaks=0
ctest --output-on-failure
- name: Generate coverage info
working-directory: "cpp/build"
run: |
lcov --capture --directory . --output-file coverage.info
lcov --remove coverage.info '/usr/*' --output-file coverage.info
lcov --list coverage.info
- name: Upload coverage reports to Codecov
uses: codecov/[email protected]
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Benchmark
working-directory: "cpp/build"
run: |
./graph_info_benchmark
./arrow_chunk_reader_benchmark
- name: Use Static Arrow
working-directory: "cpp"
run: |
mkdir build-static
pushd build-static
cmake .. -DUSE_STATIC_ARROW=ON -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON -DBUILD_BENCHMARKS=ON
make -j$(nproc)
export ASAN_OPTIONS=detect_leaks=0
ctest --output-on-failure
popd
- name: Upload libgraphar.a artifact
if: github.event_name == 'push'
uses: actions/upload-artifact@v3
with:
name: ubuntu-libgraphar.a
path: cpp/build-static/libgraphar.a
macos:
name: ${{ matrix.architecture }} macOS ${{ matrix.macos-version }} C++
runs-on: macos-${{ matrix.macos-version }}
if: ${{ !contains(github.event.pull_request.title, 'WIP') && github.event.pull_request.draft == false }}
env:
GAR_TEST_DATA: ${{ github.workspace }}/graphar-testing/
strategy:
fail-fast: false
matrix:
include:
- architecture: AMD64
macos-version: "13"
- architecture: ARM64
macos-version: "14"
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Install dependencies
run: |
brew bundle --file=cpp/Brewfile
git clone https://github.com/apache/incubator-graphar-testing.git $GAR_TEST_DATA --depth 1
- name: Build GraphAr
working-directory: "cpp"
run: |
mkdir build
pushd build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON -DBUILD_BENCHMARKS=ON
make -j$(nproc)
popd
- name: Running Test
working-directory: "cpp/build"
run: |
export ASAN_OPTIONS=detect_leaks=0
ctest --output-on-failure
- name: Use Static Arrow
working-directory: "cpp"
run: |
mkdir build-static
pushd build-static
cmake .. -DUSE_STATIC_ARROW=ON -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON -DBUILD_BENCHMARKS=ON
make -j$(nproc)
export ASAN_OPTIONS=detect_leaks=0
export ASAN_OPTIONS=detect_container_overflow=0
ctest --output-on-failure
popd
- name: Upload libgraphar.a artifact
if: github.event_name == 'push'
uses: actions/upload-artifact@v3
with:
name: macos-${{ matrix.macos-version }}-libgraphar.a
path: cpp/build-static/libgraphar.a