Build and Test - macOS #201
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and Test - macOS | |
on: | |
schedule: | |
- cron: '0 0 * * 1' | |
push: | |
branches: [ master ] | |
pull_request: | |
branches: [ master ] | |
release: | |
types: | |
- created | |
concurrency: | |
group: macos-${{ github.head_ref }} | |
cancel-in-progress: true | |
env: | |
CLICKHOUSE_SERVER_IMAGE: "yandex/clickhouse-server:20.3" | |
defaults: | |
run: | |
shell: bash | |
working-directory: run | |
jobs: | |
build_and_test: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-11] | |
odbc_provider: [UnixODBC, iODBC] | |
# Once folly supports new clang (libcpp) add Clang to compilers: | |
compiler: [AppleClang, GCC] | |
build_type: [Debug, Release] | |
architecture: [x86_64] | |
runtime_link: [dynamic-runtime] | |
third_parties: [bundled-third-parties] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Create directories | |
working-directory: ${{ github.workspace }} | |
run: | | |
mkdir -p ${{ github.workspace }}/run | |
mkdir -p ${{ github.workspace }}/build | |
mkdir -p ${{ github.workspace }}/prefix | |
mkdir -p ${{ github.workspace }}/install | |
mkdir -p ${{ github.workspace }}/package | |
- name: Clone the repo | |
uses: actions/checkout@v2 | |
with: | |
path: source | |
submodules: true | |
- name: Install dependencies - Common | |
run: | | |
cd "$(brew --repo)" && git fetch && git reset --hard origin/master && cd - | |
brew update | |
brew remove -f --ignore-dependencies -q libiodbc unixodbc freetds php node composer | |
brew upgrade | |
brew install git cmake perl python openssl poco icu4c binutils | |
pip3 install --user 'testflows==1.6.56' | |
# - name: Install dependencies - Docker | |
# run: | | |
# brew install --cask docker | |
# open /Applications/Docker.app | |
- name: Install dependencies - UnixODBC | |
if: ${{ matrix.odbc_provider == 'UnixODBC' }} | |
run: | | |
brew install unixodbc | |
pip3 install --user pyodbc | |
- name: Install dependencies - iODBC | |
if: ${{ matrix.odbc_provider == 'iODBC' }} | |
run: brew install libiodbc | |
# Right now folly fails to compile and link against brew's clang & libcpp versions 11-14 | |
# Since Clang is removed from list of compilers in matrix, this will not be executed. | |
# - name: Install dependencies - Clang | |
# if: ${{ matrix.compiler == 'Clang' }} | |
# run: brew install llvm | |
- name: Install dependencies - GCC | |
if: ${{ matrix.compiler == 'GCC' }} | |
run: | | |
brew install gcc gdb | |
export COMPILER_PATH=$(brew prefix gcc)/bin | |
- name: Configure | |
run: > | |
CC=${{ fromJSON('{"AppleClang": "cc", "Clang": "/usr/local/opt/llvm/bin/clang", "GCC": "$COMPILER_PATH/gcc-11"}')[matrix.compiler] }} | |
CXX=${{ fromJSON('{"AppleClang": "c++", "Clang": "/usr/local/opt/llvm/bin/clang++", "GCC": "$COMPILER_PATH/g++-11"}')[matrix.compiler] }} | |
cmake -S ${{ github.workspace }}/source -B ${{ github.workspace }}/build | |
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | |
-DODBC_PROVIDER=${{ matrix.odbc_provider }} | |
-DICU_ROOT=/usr/local/opt/icu4c | |
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl | |
-DCH_ODBC_RUNTIME_LINK_STATIC=${{ fromJSON('{"static-runtime": "ON", "dynamic-runtime": "OFF"}')[matrix.runtime_link] }} | |
-DCH_ODBC_PREFER_BUNDLED_THIRD_PARTIES=${{ fromJSON('{"bundled-third-parties": "ON", "system-third-parties": "OFF"}')[matrix.third_parties] }} | |
-DTEST_DSN_LIST="ClickHouse DSN (ANSI);ClickHouse DSN (Unicode);ClickHouse DSN (ANSI, RBWNAT)" | |
- name: Build | |
run: cmake --build ${{ github.workspace }}/build --config ${{ matrix.build_type }} | |
- name: Package | |
run: cmake --build ${{ github.workspace }}/build --config ${{ matrix.build_type }} --target package | |
- name: List artifacts | |
run: | | |
echo REF: ${{ github.ref }} | |
ls -lahR ${{ github.workspace }}/build | |
- name: Upload the artifacts | |
# if: ${{ matrix.compiler == 'AppleClang' && matrix.odbc_provider == 'iODBC' && matrix.build_type == 'Release' }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: clickhouse-odbc-macos-${{ matrix.compiler }}-${{ matrix.odbc_provider }}-${{ matrix.build_type }} | |
path: ${{ github.workspace }}/build/clickhouse-odbc-* | |
- name: Test - Run unit tests | |
working-directory: ${{ github.workspace }}/build | |
run: ctest --output-on-failure --build-config ${{ matrix.build_type }} -R '.*-ut.*' | |
# - name: Test - Start ClickHouse server in background | |
# run: | | |
# docker pull ${CLICKHOUSE_SERVER_IMAGE} | |
# docker run -d --name clickhouse ${CLICKHOUSE_SERVER_IMAGE} | |
# docker ps -a | |
# docker stats -a --no-stream | |
# - name: Test - Run integration tests | |
# working-directory: ${{ github.workspace }}/build | |
# run: | | |
# export CLICKHOUSE_SERVER_IP=$(docker inspect -f '{{ .NetworkSettings.IPAddress }}' clickhouse) | |
# export ODBCSYSINI=${{ github.workspace }}/run | |
# export ODBCINSTINI=.odbcinst.ini | |
# export ODBCINI=$ODBCSYSINI/.odbc.ini | |
# if [[ "${{ matrix.odbc_provider }}" == "iODBC" ]]; then | |
# # Full path to a custom odbcinst.ini in ODBCINSTINI for iODBC. | |
# export ODBCINSTINI=$ODBCSYSINI/$ODBCINSTINI | |
# fi | |
# cat > $ODBCSYSINI/.odbcinst.ini <<-EOF | |
# [ODBC] | |
# Trace = 1 | |
# TraceFile = ${{ github.workspace }}/run/odbc-driver-manager-trace.log | |
# Debug = 1 | |
# DebugFile = ${{ github.workspace }}/run/odbc-driver-manager-debug.log | |
# [ODBC Drivers] | |
# ClickHouse ODBC Driver (ANSI) = Installed | |
# ClickHouse ODBC Driver (Unicode) = Installed | |
# [ClickHouse ODBC Driver (ANSI)] | |
# Driver = ${{ github.workspace }}/build/driver/libclickhouseodbc.so | |
# Setup = ${{ github.workspace }}/build/driver/libclickhouseodbc.so | |
# UsageCount = 1 | |
# [ClickHouse ODBC Driver (Unicode)] | |
# Driver = ${{ github.workspace }}/build/driver/libclickhouseodbcw.so | |
# Setup = ${{ github.workspace }}/build/driver/libclickhouseodbcw.so | |
# UsageCount = 1 | |
# EOF | |
# cat > $ODBCSYSINI/.odbc.ini <<-EOF | |
# [ODBC] | |
# Trace = 1 | |
# TraceFile = ${{ github.workspace }}/run/odbc-driver-manager-trace.log | |
# Debug = 1 | |
# DebugFile = ${{ github.workspace }}/run/odbc-driver-manager-debug.log | |
# [ODBC Data Sources] | |
# ClickHouse DSN (ANSI) = ClickHouse ODBC Driver (ANSI) | |
# ClickHouse DSN (Unicode) = ClickHouse ODBC Driver (Unicode) | |
# ClickHouse DSN (ANSI, RBWNAT) = ClickHouse ODBC Driver (ANSI) | |
# [ClickHouse DSN (ANSI)] | |
# Driver = ClickHouse ODBC Driver (ANSI) | |
# Description = Test DSN for ClickHouse ODBC Driver (ANSI) | |
# Url = http://${CLICKHOUSE_SERVER_IP} | |
# DriverLog = yes | |
# DriverLogFile = ${{ github.workspace }}/run/clickhouse-odbc-driver.log | |
# [ClickHouse DSN (Unicode)] | |
# Driver = ClickHouse ODBC Driver (Unicode) | |
# Description = Test DSN for ClickHouse ODBC Driver (Unicode) | |
# Url = http://${CLICKHOUSE_SERVER_IP} | |
# DriverLog = yes | |
# DriverLogFile = ${{ github.workspace }}/run/clickhouse-odbc-driver-w.log | |
# [ClickHouse DSN (ANSI, RBWNAT)] | |
# Driver = ClickHouse ODBC Driver (ANSI) | |
# Description = Test DSN for ClickHouse ODBC Driver (ANSI) that uses RowBinaryWithNamesAndTypes as data source communication default format | |
# Url = http://${CLICKHOUSE_SERVER_IP}/query?default_format=RowBinaryWithNamesAndTypes | |
# DriverLog = yes | |
# DriverLogFile = ${{ github.workspace }}/run/clickhouse-odbc-driver.log | |
# EOF | |
# if [[ "${{ matrix.odbc_provider }}" == "iODBC" ]]; then | |
# export GTEST_FILTER="-PerformanceTest.*" | |
# fi | |
# # Run all tests except those that were run in "Test - unit tests" step. | |
# ctest --output-on-failure --build-config ${{ matrix.build_type }} -E '.*-ut.*' | |
- name: Upload artifacts as release assets | |
if: ${{ github.event_name == 'release' && matrix.build_type == 'Release' }} | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: ${{ github.workspace }}/build/clickhouse-odbc-* | |
overwrite: true | |
tag: ${{ github.ref }} | |
file_glob: true |