39 Commits

Author SHA1 Message Date
Bill
409363bf80 Merge remote-tracking branch 'origin/main' 2026-02-09 16:25:35 -07:00
Bill
6d3a7f0b48 updated markdown 2026-02-09 16:25:23 -07:00
BillTheMaker
bb4bc1ec57 Enhance publish workflow for multi-OS support
Updated GitHub Actions workflow to support multiple OS builds and simplified wheel upload process.
2025-12-12 15:09:11 -07:00
Bill
a9ff2f1e76 readme move to parent folder 2025-12-12 14:32:22 -07:00
Bill
7c394c012d pyproject.toml update 2025-12-12 14:26:27 -07:00
Bill
d690b08486 readme name update 2025-12-12 14:21:27 -07:00
Bill
4088471885 pyproject.toml version issues 2025-12-12 14:15:11 -07:00
BillTheMaker
f085e977e6 Refactor GitHub Actions for wheel publishing
Updated GitHub Actions workflow to build and publish Python wheels. Removed unnecessary jobs and streamlined the process for better efficiency.
2025-12-12 13:51:47 -07:00
333f8f0f26 Update pyproject.toml 2025-12-11 17:39:59 -07:00
9845e81194 Create publish2.yml 2025-12-11 17:39:15 -07:00
BillTheMaker
ed40391f93 Fix token variable for PyPI upload in workflow 2025-12-06 20:17:38 -07:00
BillTheMaker
e76d7a0a5b Refactor wheel copying and upload process in CI 2025-12-06 20:11:44 -07:00
BillTheMaker
feff63fb36 Modify publish.yml to flatten wheel uploads
Updated the publish workflow to create a flattened directory for wheels before copying them.
2025-12-06 20:06:43 -07:00
BillTheMaker
0994b6656e Clarify wheel flattening in publish.yml
Added comments to clarify the wheel flattening process.
2025-12-06 20:00:44 -07:00
BillTheMaker
e5f1dcf7b9 Refactor GitHub Actions workflow for building wheels 2025-12-06 19:52:07 -07:00
BillTheMaker
4fb0b78a5f Refactor publish job in GitHub Actions workflow
Removed conditional checks and dependencies in the publish job.
2025-12-06 19:35:49 -07:00
BillTheMaker
15da5eb1c2 Refactor publish step in GitHub Actions workflow 2025-12-06 19:32:08 -07:00
BillTheMaker
f9ecbae6a4 Refactor publish workflow for PyPI 2025-12-06 19:30:14 -07:00
BillTheMaker
000a2fad3a Update publish.yml 2025-12-06 19:25:47 -07:00
BillTheMaker
14b0481d7c Fix Python version and clean up publish workflow
Updated Python version to 3.12 and removed invalid input for python in the build step.
2025-12-06 19:12:47 -07:00
BillTheMaker
bd8e07fe9c Fix indentation in publish.yml workflow steps 2025-12-06 18:52:39 -07:00
BillTheMaker
9016b9213e Update publish.yml 2025-12-06 18:48:02 -07:00
BillTheMaker
b25a070d5e Add step to publish package to PyPI 2025-12-06 18:28:52 -07:00
BillTheMaker
8e6b120e76 Update publish workflow with debugging steps 2025-12-06 18:07:01 -07:00
BillTheMaker
ebea27b62e Change pypi-token to token in publish.yml 2025-12-06 17:52:20 -07:00
BillTheMaker
09b4eb4510 Enhance publish workflow with wheel verification
Added steps to verify and flatten wheels before publishing.
2025-12-06 17:30:54 -07:00
BillTheMaker
30d741b418 Update publish workflow to allow manual triggering 2025-12-06 16:19:02 -07:00
BillTheMaker
7b5e615c00 Refactor publish.yml for matrix configuration
updating and fixing pypy documentation
2025-12-06 16:05:36 -07:00
BillTheMaker
056fbbb6e1 Update artifact name to include OS and target 2025-12-06 16:00:32 -07:00
BillTheMaker
c408c483d0 disable manylinux
disabled manylinux because it was defaulting to python 3.8 which was breaking Pypi build
2025-12-06 15:38:47 -07:00
BillTheMaker
c97f5e6e6e Merge pull request #10 from BillTheMaker/feature
feature
2025-11-25 13:15:10 -07:00
BillTheMaker
9cacb95b0f Merge pull request #9 from BillTheMaker/feature
add doc file
2025-11-24 20:18:09 -07:00
Bill
0b0f3677b1 version update to publish to Pypi 7
Some checks failed
Publish to PyPI / Build wheels on macos-latest (push) Has been cancelled
Publish to PyPI / Build wheels on ubuntu-latest (push) Has been cancelled
Publish to PyPI / Build wheels on windows-latest (push) Has been cancelled
Publish to PyPI / Publish to PyPI (push) Has been cancelled
2025-11-23 13:46:17 -07:00
Bill
5313f5f4ef version update to publish to Pypi 6
Some checks failed
Publish to PyPI / Build wheels on macos-latest (push) Has been cancelled
Publish to PyPI / Build wheels on ubuntu-latest (push) Has been cancelled
Publish to PyPI / Build wheels on windows-latest (push) Has been cancelled
Publish to PyPI / Publish to PyPI (push) Has been cancelled
2025-11-23 13:34:19 -07:00
Bill
72974a9658 version update to publish to Pypi 5
Some checks failed
Publish to PyPI / Build wheels on macos-latest (push) Has been cancelled
Publish to PyPI / Build wheels on ubuntu-latest (push) Has been cancelled
Publish to PyPI / Build wheels on windows-latest (push) Has been cancelled
Publish to PyPI / Publish to PyPI (push) Has been cancelled
2025-11-23 13:27:58 -07:00
Bill
8981b3038d version update to publish to Pypi 5 2025-11-23 13:27:22 -07:00
Bill
751b95a123 version update to publish to Pypi 4
Some checks failed
Publish to PyPI / Build wheels on macos-latest (push) Has been cancelled
Publish to PyPI / Build wheels on ubuntu-latest (push) Has been cancelled
Publish to PyPI / Build wheels on windows-latest (push) Has been cancelled
Publish to PyPI / Publish to PyPI (push) Has been cancelled
2025-11-23 13:07:02 -07:00
Bill
26d1eb631e version update to publish to Pypi 2
Some checks failed
Publish to PyPI / Build wheels on macos-latest (push) Has been cancelled
Publish to PyPI / Build wheels on ubuntu-latest (push) Has been cancelled
Publish to PyPI / Build wheels on windows-latest (push) Has been cancelled
Publish to PyPI / Publish to PyPI (push) Has been cancelled
2025-11-23 12:53:54 -07:00
Bill
d6bd2eee00 version update to publish to Pypi
Some checks failed
Publish to PyPI / Build wheels on macos-latest (push) Has been cancelled
Publish to PyPI / Build wheels on ubuntu-latest (push) Has been cancelled
Publish to PyPI / Build wheels on windows-latest (push) Has been cancelled
Publish to PyPI / Publish to PyPI (push) Has been cancelled
2025-11-23 12:45:31 -07:00
7 changed files with 161 additions and 54 deletions

View File

@@ -1,75 +1,76 @@
name: Publish to PyPI
# This workflow is triggered when you push a new version tag (e.g., v0.1.0, v1.2.3)
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+*' # Matches v0.1.0 or v1.0.0-rc1, etc.
# Allows manual triggering from the GitHub Actions UI
- 'v[0-9]+.[0-9]+.[0-9]+*'
workflow_dispatch:
jobs:
build_wheels:
name: Build wheels on ${{ matrix.os }}
build_and_publish:
name: Build and Publish All Wheels
runs-on: ${{ matrix.os }}
# Define a matrix to build for common operating systems and architectures
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64
- os: macos-latest
target: x86_64
- os: windows-latest
target: x86_64
os: [ubuntu-latest, macos-latest, windows-latest]
target: [x86_64]
steps:
- uses: actions/checkout@v4
# Only setup python for non-linux, or let maturin handle linux via docker
- name: Set up Python
if: runner.os != 'Linux'
uses: actions/setup-python@v5
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
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: Build wheels with Maturin
- name: Build wheel
uses: PyO3/maturin-action@v1
with:
# Use the target from the matrix (x86_64)
target: ${{ matrix.target }}
# Build a manylinux-compatible wheel for Linux/Colab users
manylinux: auto
manylinux: auto # This triggers the Docker container on Linux for multi-python builds
command: build
args: --release --out dist --find-interpreter
- name: Upload built wheels as Artifact
- name: Upload wheel artifact
uses: actions/upload-artifact@v4
with:
name: wheels
path: dist
name: wheel-${{ matrix.os }}-${{ matrix.target }}
path: dist/*.whl
publish:
name: Publish to PyPI
needs: [build_wheels]
name: Publish All Wheels
needs: [build_and_publish]
runs-on: ubuntu-latest
# This step will only run if the 'build_wheels' job completed successfully
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/download-artifact@v4
with:
name: wheels
path: dist
- name: Publish to PyPI
uses: PyO3/maturin-action@v1
with:
# Use the secret we configured on GitHub
pypi-token: ${{ secrets.PYPI_API_TOKEN }}
# Command to upload all wheels in the 'dist' directory
command: upload
args: --skip-existing --non-interactive
- name: Install maturin
run: pip install maturin
# FIX: Use merge-multiple to flatten everything into 'dist' automatically
- name: Download ALL wheels
uses: actions/download-artifact@v4
with:
path: dist
pattern: wheel-*
merge-multiple: true
- name: List Files (Debug)
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
View 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
View File

@@ -1200,9 +1200,9 @@ dependencies = [
[[package]]
name = "pyo3"
version = "0.27.1"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37a6df7eab65fc7bee654a421404947e10a0f7085b6951bf2ea395f4659fb0cf"
checksum = "fa8e48c12afdeb26aa4be4e5c49fb5e11c3efa0878db783a960eea2b9ac6dd19"
dependencies = [
"chrono",
"chrono-tz",
@@ -1241,18 +1241,18 @@ dependencies = [
[[package]]
name = "pyo3-build-config"
version = "0.27.1"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f77d387774f6f6eec64a004eac0ed525aab7fa1966d94b42f743797b3e395afb"
checksum = "bc1989dbf2b60852e0782c7487ebf0b4c7f43161ffe820849b56cf05f945cee1"
dependencies = [
"target-lexicon",
]
[[package]]
name = "pyo3-ffi"
version = "0.27.1"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dd13844a4242793e02df3e2ec093f540d948299a6a77ea9ce7afd8623f542be"
checksum = "c808286da7500385148930152e54fb6883452033085bf1f857d85d4e82ca905c"
dependencies = [
"libc",
"pyo3-build-config",
@@ -1260,9 +1260,9 @@ dependencies = [
[[package]]
name = "pyo3-macros"
version = "0.27.1"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eaf8f9f1108270b90d3676b8679586385430e5c0bb78bb5f043f95499c821a71"
checksum = "83a0543c16be0d86cf0dbf2e2b636ece9fd38f20406bb43c255e0bc368095f92"
dependencies = [
"proc-macro2",
"pyo3-macros-backend",
@@ -1272,9 +1272,9 @@ dependencies = [
[[package]]
name = "pyo3-macros-backend"
version = "0.27.1"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70a3b2274450ba5288bc9b8c1b69ff569d1d61189d4bff38f8d22e03d17f932b"
checksum = "2a00da2ce064dcd582448ea24a5a26fa9527e0483103019b741ebcbe632dcd29"
dependencies = [
"heck",
"proc-macro2",
@@ -1815,7 +1815,7 @@ checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
[[package]]
name = "unchecked-io"
version = "0.1.0"
version = "0.1.7"
dependencies = [
"anyhow",
"arrow",

View File

@@ -1,6 +1,6 @@
[package]
name = "unchecked-io"
version = "0.1.0"
version = "0.1.7"
authors = ["Billthemaker"] # Replace with your name or alias
license = "Apache-2.0" # Good practice for open-source
edition = "2024"
@@ -11,8 +11,8 @@ crate-type = ["cdylib", "rlib"]
[dependencies]
# 1. Python Bindings for FFI
pyo3 = { version = "0.27.1", features = ["extension-module"] }
chrono-tz = "0.10"
pyo3 = { version = "=0.27.0", features = ["extension-module", "chrono-tz", "chrono"] }
# 2. Configuration Parsing (YAML)
serde = { version = "1.0", features = ["derive"] }
@@ -44,6 +44,7 @@ byteorder = "1.5"
# 10. Timestamp Handling (NEW)
chrono = "0.4"
chrono-tz = "=0.10.4"
# 11. UUID Handling (NEW)
uuid = { version = "1.8", features = ["serde", "v4"] }

0
docs/adaptive_config.md Normal file
View File

View File

@@ -4,8 +4,33 @@ build-backend = "maturin"
[project]
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 = [
"Programming Language :: Rust",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"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"]