Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
409363bf80 | ||
|
|
6d3a7f0b48 | ||
|
|
bb4bc1ec57 | ||
|
|
a9ff2f1e76 | ||
|
|
7c394c012d | ||
|
|
d690b08486 | ||
|
|
4088471885 | ||
|
|
f085e977e6 | ||
| 333f8f0f26 | |||
| 9845e81194 | |||
|
|
ed40391f93 | ||
|
|
e76d7a0a5b | ||
|
|
feff63fb36 | ||
|
|
0994b6656e | ||
|
|
e5f1dcf7b9 | ||
|
|
4fb0b78a5f | ||
|
|
15da5eb1c2 | ||
|
|
f9ecbae6a4 | ||
|
|
000a2fad3a | ||
|
|
14b0481d7c | ||
|
|
bd8e07fe9c | ||
|
|
9016b9213e | ||
|
|
b25a070d5e | ||
|
|
8e6b120e76 | ||
|
|
ebea27b62e | ||
|
|
09b4eb4510 | ||
|
|
30d741b418 | ||
|
|
7b5e615c00 | ||
|
|
056fbbb6e1 | ||
|
|
c408c483d0 | ||
|
|
c97f5e6e6e | ||
|
|
9cacb95b0f | ||
|
|
0b0f3677b1 | ||
|
|
5313f5f4ef | ||
|
|
72974a9658 | ||
|
|
8981b3038d | ||
|
|
751b95a123 | ||
|
|
26d1eb631e | ||
|
|
d6bd2eee00 |
77
.github/workflows/publish.yml
vendored
77
.github/workflows/publish.yml
vendored
@@ -1,75 +1,76 @@
|
|||||||
name: Publish to PyPI
|
name: Publish to PyPI
|
||||||
|
|
||||||
# This workflow is triggered when you push a new version tag (e.g., v0.1.0, v1.2.3)
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- 'v[0-9]+.[0-9]+.[0-9]+*' # Matches v0.1.0 or v1.0.0-rc1, etc.
|
- 'v[0-9]+.[0-9]+.[0-9]+*'
|
||||||
# Allows manual triggering from the GitHub Actions UI
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build_wheels:
|
build_and_publish:
|
||||||
name: Build wheels on ${{ matrix.os }}
|
name: Build and Publish All Wheels
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
# Define a matrix to build for common operating systems and architectures
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
- os: ubuntu-latest
|
target: [x86_64]
|
||||||
target: x86_64
|
|
||||||
- os: macos-latest
|
|
||||||
target: x86_64
|
|
||||||
- os: windows-latest
|
|
||||||
target: x86_64
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# Only setup python for non-linux, or let maturin handle linux via docker
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
|
if: runner.os != 'Linux'
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.12' # Target a modern Python version
|
python-version: '3.12'
|
||||||
|
# Note: On Windows/Mac, to build for multiple python versions,
|
||||||
|
# you usually need multiple setup-python steps or a matrix of python versions.
|
||||||
|
# But for now, let's at least get the artifacts downloading correctly.
|
||||||
|
# Ideally, you remove this and let maturin find python, but GitHub runners
|
||||||
|
# might only have one default.
|
||||||
|
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: stable
|
||||||
|
|
||||||
- name: Build wheels with Maturin
|
- name: Build wheel
|
||||||
uses: PyO3/maturin-action@v1
|
uses: PyO3/maturin-action@v1
|
||||||
with:
|
with:
|
||||||
# Use the target from the matrix (x86_64)
|
|
||||||
target: ${{ matrix.target }}
|
target: ${{ matrix.target }}
|
||||||
# Build a manylinux-compatible wheel for Linux/Colab users
|
manylinux: auto # This triggers the Docker container on Linux for multi-python builds
|
||||||
manylinux: auto
|
|
||||||
command: build
|
command: build
|
||||||
args: --release --out dist --find-interpreter
|
args: --release --out dist --find-interpreter
|
||||||
|
|
||||||
- name: Upload built wheels as Artifact
|
- name: Upload wheel artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: wheels
|
name: wheel-${{ matrix.os }}-${{ matrix.target }}
|
||||||
path: dist
|
path: dist/*.whl
|
||||||
|
|
||||||
publish:
|
publish:
|
||||||
name: Publish to PyPI
|
name: Publish All Wheels
|
||||||
needs: [build_wheels]
|
needs: [build_and_publish]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
# This step will only run if the 'build_wheels' job completed successfully
|
|
||||||
if: startsWith(github.ref, 'refs/tags/')
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/download-artifact@v4
|
- name: Install maturin
|
||||||
with:
|
run: pip install maturin
|
||||||
name: wheels
|
|
||||||
path: dist
|
# FIX: Use merge-multiple to flatten everything into 'dist' automatically
|
||||||
|
- name: Download ALL wheels
|
||||||
- name: Publish to PyPI
|
uses: actions/download-artifact@v4
|
||||||
uses: PyO3/maturin-action@v1
|
with:
|
||||||
with:
|
path: dist
|
||||||
# Use the secret we configured on GitHub
|
pattern: wheel-*
|
||||||
pypi-token: ${{ secrets.PYPI_API_TOKEN }}
|
merge-multiple: true
|
||||||
# Command to upload all wheels in the 'dist' directory
|
|
||||||
command: upload
|
- name: List Files (Debug)
|
||||||
args: --skip-existing --non-interactive
|
run: ls -la dist
|
||||||
|
|
||||||
|
- name: Upload to PyPI
|
||||||
|
env:
|
||||||
|
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
|
||||||
|
run: |
|
||||||
|
maturin upload --skip-existing --non-interactive dist/*
|
||||||
|
|||||||
80
.github/workflows/publish2.yml
vendored
Normal file
80
.github/workflows/publish2.yml
vendored
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
name: Publish to PyPI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v[0-9]+.[0-9]+.[0-9]+*'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_and_publish:
|
||||||
|
name: Build and Publish All Wheels
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
|
target: [x86_64]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.12'
|
||||||
|
|
||||||
|
- name: Install Rust
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
|
||||||
|
- name: Build wheel
|
||||||
|
uses: PyO3/maturin-action@v1
|
||||||
|
with:
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
command: build
|
||||||
|
args: --release --out dist --find-interpreter
|
||||||
|
|
||||||
|
- name: Upload wheel artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: wheel-${{ matrix.os }}-${{ matrix.target }}
|
||||||
|
path: dist/*.whl
|
||||||
|
|
||||||
|
publish:
|
||||||
|
name: Publish All Wheels
|
||||||
|
needs: [build_and_publish]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Install maturin
|
||||||
|
run: pip install maturin
|
||||||
|
|
||||||
|
- name: Download ALL wheels
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
path: dist
|
||||||
|
|
||||||
|
- name: Flatten and upload
|
||||||
|
env:
|
||||||
|
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} # ← CORRECT TOKEN VAR
|
||||||
|
run: |
|
||||||
|
mkdir -p dist/flattened
|
||||||
|
rm -rf dist/flattened/*
|
||||||
|
|
||||||
|
# Copy EVERY wheel
|
||||||
|
find dist -name "*.whl" | while read wheel; do
|
||||||
|
cp "$wheel" dist/flattened/
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "=== TOTAL WHEELS ==="
|
||||||
|
ls -la dist/flattened/*.whl | wc -l
|
||||||
|
|
||||||
|
cd dist/flattened
|
||||||
|
echo "=== UPLOADING $(ls *.whl | wc -l) WHEELS ==="
|
||||||
|
ls -la *.whl | head -5
|
||||||
|
|
||||||
|
# TWINE fallback (double protection)
|
||||||
|
export TWINE_USERNAME=__token__
|
||||||
|
export TWINE_PASSWORD=${{ secrets.PYPI_API_TOKEN }}
|
||||||
|
maturin upload --skip-existing --non-interactive *.whl
|
||||||
22
Cargo.lock
generated
22
Cargo.lock
generated
@@ -1200,9 +1200,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyo3"
|
name = "pyo3"
|
||||||
version = "0.27.1"
|
version = "0.27.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "37a6df7eab65fc7bee654a421404947e10a0f7085b6951bf2ea395f4659fb0cf"
|
checksum = "fa8e48c12afdeb26aa4be4e5c49fb5e11c3efa0878db783a960eea2b9ac6dd19"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"chrono-tz",
|
"chrono-tz",
|
||||||
@@ -1241,18 +1241,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyo3-build-config"
|
name = "pyo3-build-config"
|
||||||
version = "0.27.1"
|
version = "0.27.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f77d387774f6f6eec64a004eac0ed525aab7fa1966d94b42f743797b3e395afb"
|
checksum = "bc1989dbf2b60852e0782c7487ebf0b4c7f43161ffe820849b56cf05f945cee1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyo3-ffi"
|
name = "pyo3-ffi"
|
||||||
version = "0.27.1"
|
version = "0.27.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2dd13844a4242793e02df3e2ec093f540d948299a6a77ea9ce7afd8623f542be"
|
checksum = "c808286da7500385148930152e54fb6883452033085bf1f857d85d4e82ca905c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"pyo3-build-config",
|
"pyo3-build-config",
|
||||||
@@ -1260,9 +1260,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyo3-macros"
|
name = "pyo3-macros"
|
||||||
version = "0.27.1"
|
version = "0.27.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "eaf8f9f1108270b90d3676b8679586385430e5c0bb78bb5f043f95499c821a71"
|
checksum = "83a0543c16be0d86cf0dbf2e2b636ece9fd38f20406bb43c255e0bc368095f92"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"pyo3-macros-backend",
|
"pyo3-macros-backend",
|
||||||
@@ -1272,9 +1272,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyo3-macros-backend"
|
name = "pyo3-macros-backend"
|
||||||
version = "0.27.1"
|
version = "0.27.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "70a3b2274450ba5288bc9b8c1b69ff569d1d61189d4bff38f8d22e03d17f932b"
|
checksum = "2a00da2ce064dcd582448ea24a5a26fa9527e0483103019b741ebcbe632dcd29"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck",
|
"heck",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -1815,7 +1815,7 @@ checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unchecked-io"
|
name = "unchecked-io"
|
||||||
version = "0.1.0"
|
version = "0.1.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arrow",
|
"arrow",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "unchecked-io"
|
name = "unchecked-io"
|
||||||
version = "0.1.0"
|
version = "0.1.7"
|
||||||
authors = ["Billthemaker"] # Replace with your name or alias
|
authors = ["Billthemaker"] # Replace with your name or alias
|
||||||
license = "Apache-2.0" # Good practice for open-source
|
license = "Apache-2.0" # Good practice for open-source
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
@@ -11,8 +11,8 @@ crate-type = ["cdylib", "rlib"]
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
# 1. Python Bindings for FFI
|
# 1. Python Bindings for FFI
|
||||||
pyo3 = { version = "0.27.1", features = ["extension-module"] }
|
pyo3 = { version = "=0.27.0", features = ["extension-module", "chrono-tz", "chrono"] }
|
||||||
chrono-tz = "0.10"
|
|
||||||
|
|
||||||
# 2. Configuration Parsing (YAML)
|
# 2. Configuration Parsing (YAML)
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
@@ -44,6 +44,7 @@ byteorder = "1.5"
|
|||||||
|
|
||||||
# 10. Timestamp Handling (NEW)
|
# 10. Timestamp Handling (NEW)
|
||||||
chrono = "0.4"
|
chrono = "0.4"
|
||||||
|
chrono-tz = "=0.10.4"
|
||||||
|
|
||||||
# 11. UUID Handling (NEW)
|
# 11. UUID Handling (NEW)
|
||||||
uuid = { version = "1.8", features = ["serde", "v4"] }
|
uuid = { version = "1.8", features = ["serde", "v4"] }
|
||||||
|
|||||||
0
docs/adaptive_config.md
Normal file
0
docs/adaptive_config.md
Normal file
@@ -4,8 +4,33 @@ build-backend = "maturin"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "unchecked-io"
|
name = "unchecked-io"
|
||||||
version = "0.1.0"
|
# Dynamic versioning allows maturin to read version from Cargo.toml
|
||||||
|
dynamic = ["version"]
|
||||||
|
description = "The world's fastest, most dangerous PostgreSQL-to-Arrow loader."
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.9"
|
||||||
|
license = {text = "BSL-1.1"}
|
||||||
|
authors = [{name = "Billthemaker"}]
|
||||||
|
keywords = ["rust", "postgresql", "arrow", "etl", "fast", "copy", "database"]
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Programming Language :: Rust",
|
"Programming Language :: Rust",
|
||||||
|
"Programming Language :: Python :: Implementation :: CPython",
|
||||||
|
"Programming Language :: Python :: Implementation :: PyPy",
|
||||||
"Programming Language :: Python :: 3",
|
"Programming Language :: Python :: 3",
|
||||||
]
|
"Programming Language :: Python :: 3.9",
|
||||||
|
"Programming Language :: Python :: 3.10",
|
||||||
|
"Programming Language :: Python :: 3.11",
|
||||||
|
"Programming Language :: Python :: 3.12",
|
||||||
|
"Programming Language :: Python :: 3.13",
|
||||||
|
"Topic :: Database",
|
||||||
|
"Topic :: Scientific/Engineering :: Information Analysis",
|
||||||
|
"Operating System :: POSIX :: Linux",
|
||||||
|
"Operating System :: Microsoft :: Windows",
|
||||||
|
"Operating System :: MacOS :: MacOS X",
|
||||||
|
]
|
||||||
|
dependencies = [
|
||||||
|
"arro3-core>=0.1.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.maturin]
|
||||||
|
features = ["pyo3/extension-module"]
|
||||||
Reference in New Issue
Block a user