From a35a156a30820b54b6c63174d496bb6ed5de8c1a Mon Sep 17 00:00:00 2001 From: Kibae Shin Date: Wed, 1 Jan 2025 01:14:08 +0700 Subject: [PATCH] feat: support various pgsql version (#3) * fix: removed shared memory request * ci: split stages and pgsql version --- .github/workflows/cmake-macos.yml | 10 +- ...e-linux.yml => cmake-ubuntu22-pgsql14.yml} | 83 ++----------- .github/workflows/cmake-ubuntu24-pgsql16.yml | 111 ++++++++++++++++++ .github/workflows/prepare-asset.yml | 30 +++++ .github/workflows/prepare-linux.yml | 46 ++++++++ README.md | 2 +- onnxruntime-server | 2 +- pg_onnx/extension_state.cpp | 3 +- 8 files changed, 204 insertions(+), 83 deletions(-) rename .github/workflows/{cmake-linux.yml => cmake-ubuntu22-pgsql14.yml} (64%) create mode 100644 .github/workflows/cmake-ubuntu24-pgsql16.yml create mode 100644 .github/workflows/prepare-asset.yml create mode 100644 .github/workflows/prepare-linux.yml diff --git a/.github/workflows/cmake-macos.yml b/.github/workflows/cmake-macos.yml index 8b10d40..a24be60 100644 --- a/.github/workflows/cmake-macos.yml +++ b/.github/workflows/cmake-macos.yml @@ -1,11 +1,11 @@ -# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml name: CMake on MacOS on: - push: - branches: [ "*" ] - pull_request: - branches: [ "*" ] + workflow_run: + workflows: + - Prepare Asset + types: + - completed jobs: build: diff --git a/.github/workflows/cmake-linux.yml b/.github/workflows/cmake-ubuntu22-pgsql14.yml similarity index 64% rename from .github/workflows/cmake-linux.yml rename to .github/workflows/cmake-ubuntu22-pgsql14.yml index 2ca6105..0b36838 100644 --- a/.github/workflows/cmake-linux.yml +++ b/.github/workflows/cmake-ubuntu22-pgsql14.yml @@ -1,84 +1,21 @@ -# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml name: CMake on Linux on: - push: - branches: [ "*" ] - pull_request: - branches: [ "*" ] + workflow_run: + workflows: + - Prepare Asset + - Prepare Linux + types: + - completed jobs: - prepare-asset: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - lfs: false - submodules: true - - - name: Cache test fixtures - id: cache-test-fixtures - uses: actions/cache@v4 - with: - path: onnxruntime-server/test/fixture - key: test-fixtures-v1 - - - name: Download assets(models) - if: steps.cache-test-fixtures.outputs.cache-hit != 'true' - shell: bash - run: | - ./onnxruntime-server/test/fixture/download-test-fixtures.sh - - prepare-apt: - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-24.04 ] - build_type: [ Debug ] - include: - - os: ubuntu-20.04 - pg_server_dev_pkg: postgresql-server-dev-12 - - os: ubuntu-22.04 - pg_server_dev_pkg: postgresql-server-dev-14 - - os: ubuntu-24.04 - pg_server_dev_pkg: postgresql-server-dev-16 - - steps: - - uses: actions/checkout@v4 - with: - lfs: false - - - name: Cache dependencies(apt) - id: cache-dependencies-apt - uses: actions/cache@v4 - with: - path: .github/cache/dependencies-apt - key: ${{ matrix.os }}-dependencies-apt-v1 - - - name: Prepare container(apt download) - shell: bash - if: steps.cache-dependencies-apt.outputs.cache-hit != 'true' && (startsWith(matrix.os, 'debian-') || startsWith(matrix.os, 'ubuntu-')) - run: | - cat /etc/os-release - sudo apt-get update -qq - apt search postgresql-server-dev - sudo apt-get install -yqf --download-only build-essential clang cmake libboost-all-dev libpq-dev libgtest-dev ${{ matrix.pg_server_dev_pkg }} - cp /var/cache/apt/archives/*.deb .github/cache/dependencies-apt/ - - - - build: runs-on: ${{ matrix.os }} - needs: [ "prepare-asset", "prepare-apt" ] strategy: fail-fast: false matrix: - os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-24.04 ] + os: [ ubuntu-22.04 ] c_compiler: [ gcc, clang ] build_type: [ Debug ] include: @@ -86,12 +23,9 @@ jobs: cpp_compiler: g++ - c_compiler: clang cpp_compiler: clang++ - - os: ubuntu-20.04 - pg_server_dev_pkg: postgresql-server-dev-12 - os: ubuntu-22.04 pg_server_dev_pkg: postgresql-server-dev-14 - - os: ubuntu-24.04 - pg_server_dev_pkg: postgresql-server-dev-16 + display-name: Ubuntu 22.04, PostgreSQL 14 steps: - uses: actions/checkout@v4 @@ -118,6 +52,7 @@ jobs: shell: bash if: startsWith(matrix.os, 'debian-') || startsWith(matrix.os, 'ubuntu-') run: | + cat /etc/os-release sudo dpkg -i .github/cache/dependencies-apt/*.deb - name: Prepare container(onnxruntime) diff --git a/.github/workflows/cmake-ubuntu24-pgsql16.yml b/.github/workflows/cmake-ubuntu24-pgsql16.yml new file mode 100644 index 0000000..15fafa4 --- /dev/null +++ b/.github/workflows/cmake-ubuntu24-pgsql16.yml @@ -0,0 +1,111 @@ +name: CMake on Linux + +on: + workflow_run: + workflows: + - Prepare Asset + - Prepare Linux + types: + - completed + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + os: [ ubuntu-24.04 ] + c_compiler: [ gcc, clang ] + build_type: [ Debug ] + include: + - c_compiler: gcc + cpp_compiler: g++ + - c_compiler: clang + cpp_compiler: clang++ + - os: ubuntu-24.04 + pg_server_dev_pkg: postgresql-server-dev-16 + display-name: Ubuntu 24.04, PostgreSQL 16 + + steps: + - uses: actions/checkout@v4 + with: + lfs: false + submodules: true + + - name: Cache dependencies(apt) + id: cache-dependencies-apt + uses: actions/cache@v4 + with: + path: .github/cache/dependencies-apt + key: ${{ matrix.os }}-dependencies-apt-v1 + + - name: Prepare container(apt download) + shell: bash + if: steps.cache-dependencies-apt.outputs.cache-hit != 'true' && (startsWith(matrix.os, 'debian-') || startsWith(matrix.os, 'ubuntu-')) + run: | + sudo apt-get update -qq + sudo apt-get install -yqf --download-only build-essential clang cmake libboost-all-dev libpq-dev libgtest-dev ${{ matrix.pg_server_dev_pkg }} + cp /var/cache/apt/archives/*.deb .github/cache/dependencies-apt/ + + - name: Prepare container(apt) + shell: bash + if: startsWith(matrix.os, 'debian-') || startsWith(matrix.os, 'ubuntu-') + run: | + cat /etc/os-release + sudo dpkg -i .github/cache/dependencies-apt/*.deb + + - name: Prepare container(onnxruntime) + shell: bash + run: | + ./onnxruntime-server/.github/actions/download-onnxruntime-linux.sh + + - name: Set reusable strings + # Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file. + id: strings + shell: bash + run: | + echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: > + cmake -B ${{ steps.strings.outputs.build-output-dir }} + -DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} + -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} + -S ${{ github.workspace }} + + - name: Build + # Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). + run: | + cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} --parallel 4 + sudo cmake --install ${{ steps.strings.outputs.build-output-dir }}/pg_onnx + + - name: Cache test fixtures + id: cache-test-fixtures + uses: actions/cache@v4 + with: + path: onnxruntime-server/test/fixture + key: test-fixtures-v1 + + - name: Download assets(models) + if: steps.cache-test-fixtures.outputs.cache-hit != 'true' + shell: bash + run: | + ./onnxruntime-server/test/fixture/download-test-fixtures.sh + + - name: Test + working-directory: ${{ steps.strings.outputs.build-output-dir }} + # Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). + # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail + run: ctest --extra-verbose --build-config ${{ matrix.build_type }} + + - name: Upload artifact + if: failure() + uses: actions/upload-artifact@v3 + with: + name: output-artifact + path: ${{ steps.strings.outputs.build-output-dir }}/pg_onnx/regression.* + if-no-files-found: ignore diff --git a/.github/workflows/prepare-asset.yml b/.github/workflows/prepare-asset.yml new file mode 100644 index 0000000..8410ab6 --- /dev/null +++ b/.github/workflows/prepare-asset.yml @@ -0,0 +1,30 @@ +name: Prepare Asset + +on: + push: + branches: [ "*" ] + pull_request: + branches: [ "*" ] + +jobs: + prepare-asset: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + lfs: false + submodules: true + + - name: Cache test fixtures + id: cache-test-fixtures + uses: actions/cache@v4 + with: + path: onnxruntime-server/test/fixture + key: test-fixtures-v1 + + - name: Download assets(models) + if: steps.cache-test-fixtures.outputs.cache-hit != 'true' + shell: bash + run: | + ./onnxruntime-server/test/fixture/download-test-fixtures.sh diff --git a/.github/workflows/prepare-linux.yml b/.github/workflows/prepare-linux.yml new file mode 100644 index 0000000..18522fa --- /dev/null +++ b/.github/workflows/prepare-linux.yml @@ -0,0 +1,46 @@ +name: Prepare Linux + +on: + push: + branches: [ "*" ] + pull_request: + branches: [ "*" ] + +jobs: + prepare-apt: + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + os: [ ubuntu-22.04, ubuntu-24.04 ] + build_type: [ Debug ] + include: + - os: ubuntu-22.04 + pg_server_dev_pkg: postgresql-server-dev-14 + display-name: Ubuntu 22.04, PostgreSQL 14 + - os: ubuntu-24.04 + pg_server_dev_pkg: postgresql-server-dev-16 + display-name: Ubuntu 24.04, PostgreSQL 16 + + steps: + - uses: actions/checkout@v4 + with: + lfs: false + + - name: Cache dependencies(apt) + id: cache-dependencies-apt + uses: actions/cache@v4 + with: + path: .github/cache/dependencies-apt + key: ${{ matrix.os }}-dependencies-apt-v1 + + - name: Prepare container(apt download) + shell: bash + if: steps.cache-dependencies-apt.outputs.cache-hit != 'true' && (startsWith(matrix.os, 'debian-') || startsWith(matrix.os, 'ubuntu-')) + run: | + cat /etc/os-release + sudo apt-get update -qq + apt search postgresql-server-dev + sudo apt-get install -yqf --download-only build-essential clang cmake libboost-all-dev libpq-dev libgtest-dev ${{ matrix.pg_server_dev_pkg }} + cp /var/cache/apt/archives/*.deb .github/cache/dependencies-apt/ diff --git a/README.md b/README.md index 866f09f..b8d0eab 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # pg_onnx -[![ONNX Runtime](https://img.shields.io/github/v/release/microsoft/onnxruntime?filter=v1.20.0&label=ONNX%20Runtime)](https://github.com/microsoft/onnxruntime) +[![ONNX Runtime](https://img.shields.io/github/v/release/microsoft/onnxruntime?filter=v1.20.1&label=ONNX%20Runtime)](https://github.com/microsoft/onnxruntime) [![CMake on Linux](https://github.com/kibae/pg_onnx/actions/workflows/cmake-linux.yml/badge.svg)](https://github.com/kibae/pg_onnx/actions/workflows/cmake-linux.yml) [![CMake on MacOS](https://github.com/kibae/pg_onnx/actions/workflows/cmake-macos.yml/badge.svg)](https://github.com/kibae/pg_onnx/actions/workflows/cmake-macos.yml) [![License](https://img.shields.io/github/license/kibae/pg_onnx)](https://github.com/kibae/pg_onnx/blob/main/LICENSE) diff --git a/onnxruntime-server b/onnxruntime-server index 90b9662..838b06e 160000 --- a/onnxruntime-server +++ b/onnxruntime-server @@ -1 +1 @@ -Subproject commit 90b966295129d2df81ccdff39db5d657d3bc7c27 +Subproject commit 838b06ee8c5d05e8474141859e032543c7bcf6ca diff --git a/pg_onnx/extension_state.cpp b/pg_onnx/extension_state.cpp index 95414f7..d6aaecb 100644 --- a/pg_onnx/extension_state.cpp +++ b/pg_onnx/extension_state.cpp @@ -12,9 +12,8 @@ extension_state_t *extension_state() { return state; } bool found = false; - auto size = sizeof(extension_state_t); - RequestAddinShmemSpace(size); + // RequestAddinShmemSpace(size); state = (extension_state_t *)ShmemInitStruct("pg_onnx_state", size, &found); if (!found) { memset(state, 0, size);