Skip to content

Commit

Permalink
Rust remove tokio (#76)
Browse files Browse the repository at this point in the history
Co-authored-by: James <[email protected]>
Co-authored-by: tsunyoku <[email protected]>
Co-authored-by: Caeden <[email protected]>
Co-authored-by: Jirapong Pansak <[email protected]>
Co-authored-by: Tobie Morgan Hitchcock <[email protected]>
Co-authored-by: Fábio Tramasoli <[email protected]>
Co-authored-by: Joel <[email protected]>
Co-authored-by: Tudor Andrei Dumitrascu <[email protected]>
Co-authored-by: Sam Kenney <[email protected]>
Co-authored-by: FrostyTheSouthernSnowman <[email protected]>
Co-authored-by: Grzegorz Koperwas <[email protected]>
Co-authored-by: Cellan Hall <[email protected]>
Co-authored-by: Alexander <[email protected]>
Co-authored-by: Tobie Morgan Hitchcock <[email protected]>
Co-authored-by: Alexander <[email protected]>
Co-authored-by: Dimension <[email protected]>
Co-authored-by: Hitesh <[email protected]>
Co-authored-by: Tudor Andrei Dumitrascu <[email protected]>
  • Loading branch information
19 people authored Mar 4, 2024
1 parent 89bdd36 commit 7de2c20
Show file tree
Hide file tree
Showing 98 changed files with 6,120 additions and 226 deletions.
11 changes: 11 additions & 0 deletions .cargo/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[target.x86_64-apple-darwin]
rustflags = [
"-C", "link-arg=-undefined",
"-C", "link-arg=dynamic_lookup",
]

[target.aarch64-apple-darwin]
rustflags = [
"-C", "link-arg=-undefined",
"-C", "link-arg=dynamic_lookup",
]
187 changes: 187 additions & 0 deletions .github/workflows/cross_build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
name: cross-build

on:
pull_request:
types: [closed]
branches:
- main

env:
CARGO_TERM_COLOR: always

jobs:

wait-for-other-workflow:
name: Wait for Other Workflow
runs-on: ubuntu-latest
steps:
- name: Wait for Other Workflow to Complete
run: "echo 'Waiting for other workflow to complete...'"

build: # Workflow credit to https://github.com/samuelcolvin/rtoml/blob/main/.github/workflows/ci.yml
if: github.event.pull_request.merged == true
name: >
build ${{ matrix.python-version }} on ${{ matrix.platform || matrix.os }}
(${{ matrix.alt_arch_name || matrix.arch }})
strategy:
fail-fast: false
matrix:
os: [ubuntu, macos, windows]
python-version: ["cp310", "pp37", "pp38", "pp39"]
arch: [main, alt]
include:
- os: ubuntu
platform: linux
- os: windows
ls: dir
- os: macos
arch: alt
alt_arch_name: "arm64 universal2"
exclude:
- os: macos
python-version: "pp37"
arch: alt
- os: macos
python-version: "pp38"
arch: alt
- os: macos
python-version: "pp39"
arch: alt
runs-on: ${{ format('{0}-latest', matrix.os) }}
steps:
- uses: actions/checkout@v3

- name: set up python
uses: actions/setup-python@v4
with:
python-version: "3.9"

- name: set up rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable

- name: update pip version
run: |
pip install requests
python get_latest_version.py
- name: Setup Rust cache
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.alt_arch_name }}

- run: rustup target add aarch64-apple-darwin
if: matrix.os == 'macos'

- run: rustup toolchain install stable-i686-pc-windows-msvc
if: matrix.os == 'windows'

- run: rustup target add i686-pc-windows-msvc
if: matrix.os == 'windows'

- name: Get pip cache dir
id: pip-cache
if: matrix.os != 'windows'
run: |
echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT
- name: Get pip cache dir
id: pip-cache-win
if: matrix.os == 'windows'
run: |
"dir=$(pip cache dir)" >> $env:GITHUB_OUTPUT
- name: Cache python dependencies
uses: actions/cache@v3
with:
path: ${{ steps.pip-cache.outputs.dir || steps.pip-cache-win.outputs.dir }}
key: ${{ runner.os }}-pip-${{ matrix.python-version }}

- name: install python dependencies
run: pip install -U setuptools wheel twine cibuildwheel platformdirs

- name: Display cibuildwheel cache dir
id: cibuildwheel-cache
run: |
from platformdirs import user_cache_path
import os
with open(os.getenv('GITHUB_OUTPUT'), 'w') as f:
f.write(f"dir={str(user_cache_path(appname='cibuildwheel', appauthor='pypa'))}")
shell: python

- name: Cache cibuildwheel tools
uses: actions/cache@v3
with:
path: ${{ steps.cibuildwheel-cache.outputs.dir }}
key: ${{ runner.os }}-cibuildwheel-${{ matrix.python-version }}

- name: Install LLVM and Clang # required for bindgen to work, see https://github.com/rust-lang/rust-bindgen/issues/1797
uses: KyleMayes/install-llvm-action@v1
if: runner.os == 'Windows'
with:
version: "11.0"
directory: ${{ runner.temp }}/llvm

- name: Set LIBCLANG_PATH
run: echo "LIBCLANG_PATH=$((gcm clang).source -replace "clang.exe")" >> $env:GITHUB_ENV
if: runner.os == 'Windows'

- name: build_sdist
if: matrix.os == 'ubuntu' && matrix.python-version == 'cp310'
run: |
pip install maturin build
python -m build --sdist -o wheelhouse
- name: build ${{ matrix.platform || matrix.os }} binaries
run: cibuildwheel --output-dir wheelhouse
env:
CIBW_BUILD: "${{ matrix.python-version }}-*"
# rust doesn't seem to be available for musl linux on i686
CIBW_SKIP: "*-musllinux_i686"
# we build for "alt_arch_name" if it exists, else 'auto'
CIBW_ARCHS: ${{ matrix.alt_arch_name || 'auto' }}
CIBW_ENVIRONMENT: 'PATH="$HOME/.cargo/bin:$PATH" CARGO_TERM_COLOR="always"'
CIBW_ENVIRONMENT_WINDOWS: 'PATH="$UserProfile\.cargo\bin;$PATH"'
CIBW_BEFORE_BUILD: rustup show
CIBW_BEFORE_BUILD_LINUX: >
curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain=stable --profile=minimal -y &&
rustup show
CIBW_BUILD_VERBOSITY: 1

- run: ${{ matrix.ls || 'ls -lh' }} wheelhouse/

- uses: actions/upload-artifact@v3
with:
name: wheels
path: wheelhouse

release:
if: github.event.pull_request.merged == true
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v2
with:
name: wheels
path: wheelhouse

- name: Install twine
run: python -m pip install --upgrade twine

- name: Create pypirc file
run: |
echo "[distutils]" > ~/.pypirc
echo "index-servers =" >> ~/.pypirc
echo " pypi" >> ~/.pypirc
echo "" >> ~/.pypirc
echo "[pypi]" >> ~/.pypirc
echo "username: __token__" >> ~/.pypirc
echo "password: \${{ secrets.PYPI_TOKEN }}" >> ~/.pypirc
env:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}

- name: Publish to PyPI
run: twine upload wheelhouse/*
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
12 changes: 12 additions & 0 deletions .github/workflows/stability.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,17 @@ jobs:

- id: ruff
if: always()
<<<<<<< HEAD
run: poetry run ruff --format=github python_package/surrealdb/

- id: Black
if: always()
run: poetry run black python_package/surrealdb/ --check --verbose --diff --color

- id: mypy
if: always()
run: poetry run mypy python_package/surrealdb/
=======
run: poetry run ruff check surrealdb/

- id: Black
Expand All @@ -36,3 +47,4 @@ jobs:
- id: mypy
if: always()
run: poetry run mypy surrealdb/
>>>>>>> 89bdd361d0a92f69deff137958279ab21161f00c
47 changes: 47 additions & 0 deletions .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: unit-tests

on:
pull_request:
# push:
branches:
- "*"

jobs:
run-unit-tests:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ "3.7", "3.8", "3.9", "3.10" ]

steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Build for tests
run: |
python tests/scripts/local_build_ci.py
pip install docker
pip install requests
# docker-compose build
# docker-compose up -d
# sleep 2

- name: Run Tests
run: sh scripts/run_tests.sh

run-rust-unit-tests:
needs: run-unit-tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Set up Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable

- name: Build and Run Unit Tests
run: cargo test
20 changes: 20 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,28 @@ cover/
.vscode/
__pycache__/
dist/
build/

# -----------------------------------
# IDE
# -----------------------------------
.idea/
# -----------------------------------
# Rust
# -----------------------------------
/target/
Cargo.lock
# -----------------------------------
# Packaging
# -----------------------------------
*.egg-info/
*.egg
.eggs/
*.so
/build/
# -----------------------------------
# server tests
# -----------------------------------
integration_tests/flask/app/surreal.py/
integration_tests/package-lock.json
integration_tests/node_modules/
39 changes: 39 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
[package]
name = "surrealdb"
version = "0.1.0"
authors = ["Maxwell Flitton <[email protected]>"]
edition = "2018"

[dependencies]
surrealdb = { version = "1.2.0", features = ["protocol-ws", "protocol-http", "kv-mem"] }
serde = "^1.0.164"
futures = { version="0.3.30", features = ["executor"] }
once_cell = "1.19.0"
serde_json = "^1.0.97"
crossbeam-channel = "^0.5"
thiserror = "^1.0.43"

[dev-dependencies]
tokio = { version = "1.36.0", features = ["full"] }
bollard = "*"
futures-util-preview = "0.2.2"

[lib]
name = "rust_surrealdb"
crate-type=["cdylib"]

[dependencies.pyo3]
version = "0.20.0"
features = ["extension-module"]

[dependencies.pyo3-asyncio]
version = "0.20"
features = ["unstable-streams", "attributes", "tokio-runtime"]

[dependencies.uuid]
version = "1.3.4"
features = [
"v4", # Lets you generate random UUIDs
"fast-rng", # Use a faster (but still sufficiently random) RNG
"macro-diagnostics", # Enable better diagnostics for compile-time UUIDs
]
42 changes: 42 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
FROM ubuntu:latest

# Set the working directory
WORKDIR /app

# Copy the source code
COPY src /app/src

# Copy the .cargo directory
COPY .cargo /app/.cargo

# Copy the surrealdb directory
COPY surrealdb /app/surrealdb

# Copy the Cargo.toml file
COPY Cargo.toml /app/Cargo.toml

# Copy the pyproject.toml file
COPY pyproject.toml /app/pyproject.toml

# Copy the setup.py file
COPY setup.py /app/setup.py

RUN apt update
RUN apt install -y clang
RUN apt-get install -y libclang-dev
RUN apt install -y python3
RUN apt install -y python3-pip
RUN apt install -y curl
RUN apt install -y vim
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
RUN export PATH="$HOME/.cargo/bin:$PATH"
RUN pip3 install setuptools_rust
RUN python3 setup.py bdist_wheel

# docker build . -t package-test
# docker run -d -p 18000:18000 package-test

EXPOSE 18000

CMD ["bash", "-c", "trap : TERM INT; sleep infinity & wait"]

2 changes: 2 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
recursive-include surrealdb *.so
recursive-include surrealdb *.txt
Loading

0 comments on commit 7de2c20

Please sign in to comment.