Skip to content

feat(api-gateway): Async native query results transformations #8239

feat(api-gateway): Async native query results transformations

feat(api-gateway): Async native query results transformations #8239

name: Rust
on:
push:
paths:
- '.github/workflows/rust-cubestore.yml'
- 'rust/cubestore/**'
branches-ignore:
- master
pull_request:
paths:
- '.github/workflows/rust-cubestore.yml'
- 'rust/cubestore/**'
env:
CARGO_INCREMENTAL: 0
CARGO_NET_RETRY: 10
RUSTUP_MAX_RETRIES: 10
jobs:
debian:
name: Debian Rust ${{ matrix.rust }}
# 22.04 has gcc 11, new binutils (ld)
runs-on: ubuntu-22.04
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
rust: [nightly-2024-01-29]
env:
RUST: ${{ matrix.rust }}
steps:
- name: Maximize build space (disk space limitations)
run: |
echo "Before"
df -h
sudo apt-get remove -y 'php.*'
sudo apt-get remove -y '^mongodb-.*'
sudo apt-get remove -y '^mysql-.*'
sudo apt-get autoremove -y
sudo apt-get clean
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf /opt/ghc
sudo rm -rf /opt/hostedtoolcache/CodeQL
echo "After"
df -h
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ matrix.rust }}
# override: true # this is by default on
rustflags: ""
components: rustfmt
- uses: Swatinem/rust-cache@v2
with:
workspaces: ./rust/cubestore -> target
# We should use a separate key for testing to pass disk space limitations
shared-key: cubestore-testing
key: ubuntu-22.04
- name: Run cargo fmt cubestore
run: |
cargo fmt --manifest-path rust/cubestore/cubestore/Cargo.toml -- --check
- name: Run cargo fmt cubehll
run: |
cargo fmt --manifest-path rust/cubestore/cubehll/Cargo.toml -- --check
- name: Run cargo build
run: |
cargo build --manifest-path rust/cubestore/Cargo.toml -j 4
- name: Run cargo test
run: |
cargo test --manifest-path rust/cubestore/Cargo.toml -j 1
docker-image-latest:
name: Build only :latest image
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
target: x86_64-unknown-linux-gnu
platforms: linux/amd64
build-args: WITH_AVX2=1
- os: self-hosted
target: aarch64-unknown-linux-gnu
platforms: linux/arm64
build-args: WITH_AVX2=0
timeout-minutes: 60
if: github.ref != 'refs/heads/master'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build only
uses: docker/build-push-action@v6
with:
context: ./rust/
file: ./rust/cubestore/Dockerfile
platforms: ${{ matrix.platforms }}
build-args: ${{ matrix.build-args }}
push: false
cache-from: type=gha
cache-to: type=gha,mode=max
cubestore:
runs-on: ${{ matrix.os }}
timeout-minutes: 90
env:
RUSTFLAGS: '-Ctarget-feature=+crt-static'
OPENSSL_STATIC: 1
strategy:
matrix:
target:
- x86_64-pc-windows-msvc
- x86_64-apple-darwin
- aarch64-apple-darwin
include:
- os: windows-2019
target: x86_64-pc-windows-msvc
executable_name: cubestored.exe
strip: true
# cubestored.exe: CantPackException: superfluous data between sections
compress: false
# Please use minimal possible version of macOS, because it produces constraint on libstdc++
- os: macos-13
target: x86_64-apple-darwin
executable_name: cubestored
# upx has been disabled because it is crashing for macOS Ventura or above! It was disabled on 2024-09-05.
strip: false
compress: false
- os: macos-14
target: aarch64-apple-darwin
executable_name: cubestored
# upx has been disabled because it is crashing for macOS Ventura or above! It was disabled on 2024-09-05.
strip: false
compress: false
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Disable rustup update (issue workaround for Windows)
run: rustup set auto-self-update disable
if: contains(runner.os, 'windows')
shell: bash
- uses: Swatinem/rust-cache@v2
with:
workspaces: ./rust/cubestore -> target
prefix-key: v0-rust-cubestore-cross
key: target-${{ matrix.target }}
- uses: ilammy/msvc-dev-cmd@v1
if: ${{ startsWith(matrix.os, 'windows') }}
- name: Install OpenSSL for Windows
if: ${{ startsWith(matrix.os, 'windows') }}
run: vcpkg integrate install; vcpkg install openssl:x64-windows
- name: Instal LLVM for Windows
if: ${{ startsWith(matrix.os, 'windows') }}
run: choco install -y --force llvm --version 18.1.6
- name: Set Env Variables for Windows
uses: allenevans/[email protected]
if: ${{ startsWith(matrix.os, 'windows') }}
with:
OPENSSL_DIR: 'C:/vcpkg/packages/openssl_x64-windows'
# This paths are required to work with static linking
OPENSSL_LIB_DIR: 'C:/vcpkg/packages/openssl_x64-windows/lib'
OPENSSL_INCLUDE_DIR: 'C:/vcpkg/packages/openssl_x64-windows/include'
LIBCLANG_PATH: 'C:\Program Files\LLVM\bin'
- name: Build with Cargo
run: |
cd rust/cubestore && cargo build --release --target=${{ matrix.target }} -p cubestore
- name: Compress binaries
uses: svenstaro/upx-action@v2
if: ${{ matrix.compress }}
with:
file: rust/cubestore/target/${{ matrix.target }}/release/${{ matrix.executable_name }}
args: --lzma
strip: ${{ matrix.strip }}
- name: Create folder for archive
run: |
mkdir cubestore-archive
mkdir cubestore-archive/bin
- name: Copy/paste OpenSSL to Archive (hotfix for Windows)
if: ${{ startsWith(matrix.os, 'windows') }}
run: cp C:/vcpkg/packages/openssl_x64-windows/bin/*.dll cubestore-archive/bin
- name: Create archive for release
run: |
mv rust/cubestore/target/${{ matrix.target }}/release/${{ matrix.executable_name }} cubestore-archive/bin/${{ matrix.executable_name }}
cd cubestore-archive
tar -cvzf cubestored-${{ matrix.target }}.tar.gz ./*
- uses: actions/upload-artifact@v4
with:
path: cubestore-archive/cubestored-${{ matrix.target }}.tar.gz
name: cubestored-${{ matrix.target }}.tar.gz
retention-days: 1
cubestore_linux:
runs-on: ${{ matrix.os }}
timeout-minutes: 90
env:
OPENSSL_STATIC: 1
strategy:
matrix:
target:
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-gnu
include:
- os: ubuntu-20.04
target: x86_64-unknown-linux-gnu
executable_name: cubestored
strip: true
compress: false
- os: ubuntu-20.04
target: x86_64-unknown-linux-musl
executable_name: cubestored
strip: true
# cubestored: CantPackException: bad DT_HASH nbucket=0x344 len=0x1890
compress: false
- os: ubuntu-20.04
target: aarch64-unknown-linux-gnu
executable_name: cubestored
# Unable to recognise the format of the input file `rust/cubestore/target/aarch64-unknown-linux-gnu/release/cubestored'
strip: false
# UPX is broken, issue https://github.com/cube-js/cube/issues/4474
compress: false
fail-fast: false
container:
image: cubejs/rust-cross:${{ matrix.target }}-15082024
steps:
- uses: actions/checkout@v4
- name: Setup Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: nightly-2024-01-29
target: ${{ matrix.target }}
# override: true # this is by default on
rustflags: ""
components: rustfmt
- uses: Swatinem/rust-cache@v2
with:
workspaces: ./rust/cubestore -> target
prefix-key: v0-rust-cubestore-cross
key: target-${{ matrix.target }}
- name: Build with Cargo
run: |
cd rust/cubestore && cargo build --release --target=${{ matrix.target }} -p cubestore
- name: Compress binaries
uses: svenstaro/upx-action@v2
if: ${{ matrix.compress }}
with:
file: rust/cubestore/target/${{ matrix.target }}/release/${{ matrix.executable_name }}
args: --lzma
strip: ${{ matrix.strip }}
- name: Create folder for archive
run: |
mkdir cubestore-archive
mkdir cubestore-archive/bin
- name: Create archive for release
run: |
mv rust/cubestore/target/${{ matrix.target }}/release/${{ matrix.executable_name }} cubestore-archive/bin/${{ matrix.executable_name }}
cd cubestore-archive
tar -cvzf cubestored-${{ matrix.target }}.tar.gz ./*
- uses: actions/upload-artifact@v4
with:
path: cubestore-archive/cubestored-${{ matrix.target }}.tar.gz
name: cubestored-${{ matrix.target }}.tar.gz
retention-days: 1