diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7cee1bf..b6b6176 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,42 +1,34 @@ name: Tests + on: push: - branches: - - main pull_request: - branches: - - main + release: + types: + - published schedule: # At 12:00 on every day-of-month - cron: "0 12 */1 * *" + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + env: COMDB2_DBNAME: mattdb TIMEOUT: 30 + jobs: - test: - name: Test suite + build_bloomberg_comdb2: + name: Build bloomberg-comdb2 from source runs-on: ubuntu-latest - strategy: - matrix: - python-version: - - '3.12' - - '3.11' - - '3.10' - - '3.9' - - '3.8' steps: - - name: Install dependencies - run: ' - sudo apt-get install -qy - pkg-config - ' # libcdb2api-dev is installed from source below - - uses: actions/checkout@v3 - - name: Checkout comdb2 dependency - uses: actions/checkout@v3 + - name: Checkout bloomberg-comdb2 repository + uses: actions/checkout@v4 with: repository: bloomberg/comdb2 - path: original_comdb2 - - name: Build comdb2 from source + path: bloomberg-comdb2 + - name: Install build dependencies run: ' sudo apt-get update && sudo apt-get install -qy @@ -55,15 +47,96 @@ jobs: protobuf-c-compiler tcl uuid-dev - zlib1g-dev && + zlib1g-dev + ' + - name: Build from source + run: ' ( - mkdir original_comdb2/build && - cd original_comdb2/build && + mkdir bloomberg-comdb2/build && + cd bloomberg-comdb2/build && cmake .. && - make && - sudo make install + make ) ' + - name: Archive bloomberg-comdb2 repo with build artifacts + run: 'tar czvf bloomberg-comdb2.tar.gz bloomberg-comdb2/' + - name: Upload bloomberg-comdb2 repo with build artifacts + uses: actions/upload-artifact@v3 + with: + name: bloomberg-comdb2 + path: ./bloomberg-comdb2.tar.gz + + build_sdist: + name: Build python-comdb2 source distribution + runs-on: ubuntu-latest + needs: [build_bloomberg_comdb2] + steps: + - name: Download bloomberg-comdb2 with build artifacts + uses: actions/download-artifact@v3 + with: + name: bloomberg-comdb2 + path: . + - name: Install bloomberg-comdb2 + run: ' + sudo apt-get install -qy + libevent-dev + liblz4-dev + libprotobuf-c-dev + libsqlite3-dev + libssl-dev + libunwind-dev + zlib1g-dev && + tar xvf bloomberg-comdb2.tar.gz && + (cd bloomberg-comdb2/build && sudo make install) + ' + - uses: actions/checkout@v4 + - name: 'Set up Python 3.8' + uses: actions/setup-python@v4 # note that this step overwrites the PKG_CONFIG_PATH variable + with: + python-version: '3.8' # the lowest version that we support in CI + - name: Build sdist + run: ' + sudo apt-get install -qy pkg-config && + PKG_CONFIG_PATH=/opt/bb/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH + pipx run build --sdist + ' + - name: Upload sdist + uses: actions/upload-artifact@v3 + with: + name: python-comdb2-sdist + path: dist/*.tar.gz + + test: + name: Test suite + runs-on: ubuntu-latest + needs: [build_sdist] + strategy: + matrix: + python-version: + - '3.12' + - '3.11' + - '3.10' + - '3.9' + - '3.8' + steps: + - name: Download comdb2 repo with build artifacts + uses: actions/download-artifact@v3 + with: + name: bloomberg-comdb2 + path: . + - name: Install bloomberg-comdb2 + run: ' + sudo apt-get install -qy + libevent-dev + liblz4-dev + libprotobuf-c-dev + libsqlite3-dev + libssl-dev + libunwind-dev + zlib1g-dev && + tar xvf bloomberg-comdb2.tar.gz && + (cd bloomberg-comdb2/build && sudo make install) + ' - name: Start local comdb2 instance run: ' sudo mkdir -p /opt/bb/share/schemas/$COMDB2_DBNAME && @@ -84,22 +157,36 @@ jobs: fi; done ' - - name: Creating tables + - name: Download python-comdb2 sdist + uses: actions/download-artifact@v3 + with: + name: python-comdb2-sdist + path: dist + - name: Extract python-comdb2 sdist + run: ' + (cd dist/ && tar xvf comdb2-*.tar.gz && rm comdb2-*.tar.gz) && + mv dist/comdb2-* python-comdb2-sdist && rmdir dist + ' + - name: Create tables run: | - tables="$(cat tests/schemas/$COMDB2_DBNAME/table_constraint_order.txt)" + tables="$(cat python-comdb2-sdist/tests/schemas/$COMDB2_DBNAME/table_constraint_order.txt)" for table_name in $tables do - table_file="tests/schemas/$COMDB2_DBNAME/$table_name.csc2" + table_file="python-comdb2-sdist/tests/schemas/$COMDB2_DBNAME/$table_name.csc2" echo "Creating $table_name from $table_file" /opt/bb/bin/cdb2sql "$COMDB2_DBNAME" local "create table $table_name { $(cat $table_file) }" done - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 # note that this step overwrites the PKG_CONFIG_PATH variable + - name: Set up Python ${{matrix.python_version}} + uses: actions/setup-python@v4 # note that this step overwrites the PKG_CONFIG_PATH variable with: - python-version: ${{ matrix.python-version }} - - name: Install python dependencies - run: | - python -m pip install --upgrade pip - PKG_CONFIG_PATH=/opt/bb/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig LDFLAGS="-Wl,-rpath,/opt/bb/lib" python -m pip install .[tests] + python-version: "${{matrix.python_version}}" + - name: Install python-comdb2 from the sdist + run: ' + sudo apt-get install -qy pkg-config && + python -m pip install --upgrade pip && + PKG_CONFIG_PATH=/opt/bb/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH + LDFLAGS="-Wl,-rpath,/opt/bb/lib" + python -m pip install ./python-comdb2-sdist[tests] + ' - name: Run Tests - run: (cd tests && python -m pytest -vvv) + run: (cd python-comdb2-sdist/tests && python -m pytest -vvv)