Skip to content

Commit 7c1fd90

Browse files
committed
feat: expand platform support to include Windows x86_64 in CI/CD workflows and documentation
1 parent 628023e commit 7c1fd90

13 files changed

Lines changed: 83 additions & 62 deletions

.github/workflows/release-python-packages.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ jobs:
8181
secrets: inherit
8282

8383
publish:
84-
name: Publish arcadedb-embedded to PyPI (3 platforms)
84+
name: Publish arcadedb-embedded to PyPI (4 platforms)
8585
needs: [validate-version, test, test-examples]
8686
runs-on: ubuntu-latest
8787
continue-on-error: true # Don't block GitHub Release if PyPI upload fails (size limit)
@@ -102,15 +102,15 @@ jobs:
102102
echo "📦 Wheels for PyPI (current platforms):"
103103
ls dist/*.whl
104104
105-
# Count wheels (should be 15: 3 platforms x 5 Python versions)
105+
# Count wheels (should be 20: 4 platforms x 5 Python versions)
106106
WHEEL_COUNT=$(ls dist/*.whl | wc -l)
107-
echo "📊 Wheel count: $WHEEL_COUNT (expected: 15)"
107+
echo "📊 Wheel count: $WHEEL_COUNT (expected: 20)"
108108
109109
echo ""
110-
echo "ℹ️ Current PyPI platforms: linux x86_64, linux arm64, macOS Apple Silicon"
110+
echo "ℹ️ Current PyPI platforms: linux x86_64, linux arm64, macOS Apple Silicon, windows x86_64"
111111
112-
if [ "$WHEEL_COUNT" -ne 15 ]; then
113-
echo "❌ Expected 15 wheels (3 platforms x 5 Python versions), got $WHEEL_COUNT"
112+
if [ "$WHEEL_COUNT" -ne 20 ]; then
113+
echo "❌ Expected 20 wheels (4 platforms x 5 Python versions), got $WHEEL_COUNT"
114114
exit 1
115115
fi
116116
@@ -140,8 +140,8 @@ jobs:
140140
PLATFORM="darwin/arm64"
141141
# elif [[ "$WHEEL_NAME" == *"macosx"*"x86_64"* ]]; then
142142
# PLATFORM="darwin/amd64"
143-
# elif [[ "$WHEEL_NAME" == *"win_amd64"* ]]; then
144-
# PLATFORM="windows/amd64"
143+
elif [[ "$WHEEL_NAME" == *"win_amd64"* ]]; then
144+
PLATFORM="windows/amd64"
145145
else
146146
PLATFORM="unknown"
147147
fi

.github/workflows/test-python-bindings.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,23 +122,23 @@ jobs:
122122
fail-fast: false
123123
matrix:
124124
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
125-
# Temporarily limit to three platforms (skip macOS x86_64 and all Windows)
125+
# Temporarily limit to four platforms (skip macOS x86_64, Windows ARM64)
126126
# platform: ['linux/amd64', 'linux/arm64', 'darwin/amd64', 'darwin/arm64', 'windows/amd64', 'windows/arm64']
127-
platform: ['linux/amd64', 'linux/arm64', 'darwin/arm64']
127+
platform: ['linux/amd64', 'linux/arm64', 'darwin/arm64', 'windows/amd64']
128128
include:
129129
- platform: linux/amd64
130130
runs-on: ubuntu-24.04
131131
- platform: linux/arm64
132132
runs-on: ubuntu-24.04-arm
133133
- platform: darwin/arm64
134134
runs-on: macos-15
135+
- platform: windows/amd64
136+
runs-on: windows-2025
135137
# - platform: darwin/amd64
136138
# runs-on: macos-15-intel
137-
# - platform: windows/amd64
138-
# runs-on: windows-2025
139139
# - platform: windows/arm64
140140
# runs-on: windows-11-arm
141-
# macOS x86_64 and all Windows temporarily disabled
141+
# macOS x86_64 and Windows ARM64 temporarily disabled
142142

143143
steps:
144144
- name: Checkout code
@@ -180,7 +180,7 @@ jobs:
180180
run: |
181181
uv pip install --system build wheel setuptools
182182
183-
# Windows currently disabled, no symlink needed
183+
# Windows currently enabled, no symlink needed
184184
# - name: Create python3 symlink (Windows only)
185185
# if: matrix.platform == 'windows/amd64' || matrix.platform == 'windows/arm64'
186186
# shell: bash

.github/workflows/test-python-examples.yml

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ on:
1818
workflows: ["Release"]
1919
types: [completed]
2020

21-
# Run after release workflow completes
22-
workflow_run:
23-
workflows: ["Release"]
24-
types: [completed]
25-
2621
# Allow being called by other workflows (e.g., release workflow)
2722
workflow_call:
2823
inputs:
@@ -50,9 +45,6 @@ env:
5045
permissions:
5146
contents: read
5247

53-
permissions:
54-
contents: read
55-
5648
jobs:
5749
# First job: Download ArcadeDB JARs (platform-agnostic)
5850
download-jars:
@@ -139,23 +131,23 @@ jobs:
139131
fail-fast: false
140132
matrix:
141133
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
142-
# Temporarily limit to three platforms (skip macOS x86_64, all Windows)
134+
# Temporarily limit to four platforms (skip macOS x86_64, Windows ARM64)
143135
# platform: ['linux/amd64', 'linux/arm64', 'darwin/amd64', 'darwin/arm64', 'windows/amd64', 'windows/arm64']
144-
platform: ['linux/amd64', 'linux/arm64', 'darwin/arm64']
136+
platform: ['linux/amd64', 'linux/arm64', 'darwin/arm64', 'windows/amd64']
145137
include:
146138
- platform: linux/amd64
147139
runs-on: ubuntu-24.04
148140
- platform: linux/arm64
149141
runs-on: ubuntu-24.04-arm
150142
- platform: darwin/arm64
151143
runs-on: macos-15
144+
- platform: windows/amd64
145+
runs-on: windows-2025
152146
# - platform: darwin/amd64
153147
# runs-on: macos-15-intel
154-
# - platform: windows/amd64
155-
# runs-on: windows-2025
156148
# - platform: windows/arm64
157149
# runs-on: windows-11-arm
158-
# macOS x86_64 and all Windows temporarily disabled
150+
# macOS x86_64 and Windows ARM64 temporarily disabled
159151

160152
steps:
161153
- name: Checkout code
@@ -194,7 +186,7 @@ jobs:
194186
run: |
195187
uv pip install --system build wheel setuptools
196188
197-
# Windows currently disabled, no symlink needed
189+
# Windows currently enabled, no symlink needed
198190
# - name: Create python3 symlink (Windows only)
199191
# if: matrix.platform == 'windows/amd64' || matrix.platform == 'windows/arm64'
200192
# shell: bash
@@ -270,7 +262,7 @@ jobs:
270262
# macOS doesn't have timeout command by default, use coreutils
271263
brew install coreutils
272264
273-
# Windows currently disabled, no env override needed
265+
# Windows currently enabled, no env override needed
274266
# - name: Set UTF-8 encoding (Windows only)
275267
# if: matrix.platform == 'windows/amd64' || matrix.platform == 'windows/arm64'
276268
# shell: bash
@@ -494,7 +486,7 @@ jobs:
494486
echo "" >> $GITHUB_STEP_SUMMARY
495487
echo "All examples ran successfully across all enabled platforms." >> $GITHUB_STEP_SUMMARY
496488
echo "" >> $GITHUB_STEP_SUMMARY
497-
echo "**Platforms tested**: linux/amd64, linux/arm64, darwin/arm64" >> $GITHUB_STEP_SUMMARY
489+
echo "**Platforms tested**: linux/amd64, linux/arm64, darwin/arm64, windows/amd64" >> $GITHUB_STEP_SUMMARY
498490
else
499491
echo "❌ **Some platforms failed example testing**" >> $GITHUB_STEP_SUMMARY
500492
echo "" >> $GITHUB_STEP_SUMMARY

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Native Python bindings for ArcadeDB (forked from the official Java project).
1515
## ✨ What this repo provides
1616

1717
- Native Python bindings for ArcadeDB with a bundled JRE (no local Java required).
18-
- Wheels for Linux x86_64, Linux ARM64, and macOS Apple Silicon.
18+
- Wheels for Linux x86_64, Linux ARM64, macOS Apple Silicon, and Windows x86_64.
1919
- Embedded usage (in-process) with optional server mode.
2020
- Tests and examples validated in CI across supported platforms.
2121

bindings/python/README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Native Python bindings for ArcadeDB - the multi-model database that supports Graph, Document, Key/Value, Search Engine, Time Series, and Vector models.
44

5-
**Status**: ✅ Production Ready | **Tests**: 258 Passing | **Platforms**: 3 Supported
5+
**Status**: ✅ Production Ready | **Tests**: 258 Passing | **Platforms**: 4 Supported
66

77
---
88

@@ -23,9 +23,10 @@ uv pip install arcadedb-embedded
2323
**Requirements:**
2424

2525
- **Python 3.10–3.14** (packaged/tested on CPython 3.12) - No Java installation required!
26-
- **Supported Platforms**: Prebuilt wheels for **3 platforms**
26+
- **Supported Platforms**: Prebuilt wheels for **4 platforms**
2727
- Linux: x86_64, ARM64
2828
- macOS: Apple Silicon (ARM64)
29+
- Windows: x86_64
2930

3031
### 5-Minute Example
3132

@@ -59,7 +60,7 @@ with arcadedb.create_database("./mydb") as db:
5960
## ✨ Features
6061

6162
-**No Java Installation Required**: Bundled JRE (~249MB uncompressed)
62-
- 🌍 **3 Platforms Supported**: Linux (x86_64, ARM64), macOS (ARM64)
63+
- 🌍 **4 Platforms Supported**: Linux (x86_64, ARM64), macOS (ARM64), Windows (x86_64)
6364
- 🚀 **Embedded Mode**: Direct database access in Python process (no network)
6465
- 🌐 **Server Mode**: Optional HTTP server with Studio web interface
6566
- 📦 **Self-contained**: All dependencies bundled (~116MB wheel)
@@ -91,7 +92,7 @@ Import: `import arcadedb_embedded as arcadedb`
9192

9293
## 🧪 Testing
9394

94-
**Status**: 258 tests + example scripts passing on all 3 platforms
95+
**Status**: 258 tests + example scripts passing on all 4 platforms
9596

9697
```bash
9798
# Run all tests
@@ -107,7 +108,7 @@ See [testing documentation](https://docs.humem.ai/arcadedb/latest/development/te
107108

108109
## 🔧 Building from Source (Advanced)
109110

110-
Linux uses Docker. macOS uses a native Java 25+ JDK with jlink.
111+
Linux uses Docker. macOS and Windows use a native Java 25+ JDK with jlink.
111112

112113
```bash
113114
cd bindings/python/

bindings/python/build.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ print_usage() {
4444
echo " linux/amd64 Linux x86_64 (Docker build)"
4545
echo " linux/arm64 Linux ARM64 (Docker build, native ARM64 runner)"
4646
echo " darwin/arm64 macOS ARM64 Apple Silicon (native build on macOS)"
47+
echo " windows/amd64 Windows x86_64 (native build on Windows)"
4748
echo ""
4849
echo "PYTHON_VERSION:"
4950
echo " Python version for wheel (default: 3.12)"
@@ -75,7 +76,7 @@ print_usage() {
7576
echo "Package features:"
7677
echo " ✅ Bundled platform-specific JRE (no Java required)"
7778
echo " ✅ Optimized JAR selection (see jar_exclusions.txt)"
78-
echo " ✅ Multi-platform support (3 platforms)"
79+
echo " ✅ Multi-platform support (4 platforms)"
7980
echo " 📦 Size: ~215MB (compressed), ~289MB (installed)"
8081
echo ""
8182
}

bindings/python/build_and_install_locally.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ cp "${HEADLESS_LIB_DIR}"/*.jar "${LOCAL_JARS_DIR}/"
3636
log "Copied $(ls -1 "${LOCAL_JARS_DIR}" | wc -l) JARs into local stash"
3737

3838
# 3) Build the Python wheel (defaults to linux/amd64 + Python 3.12) using staged JARs
39+
# For Windows or macOS, run this script on that OS and update the platform accordingly.
3940
log "Building Python wheel with local JARs..."
4041
cd "${PY_BINDINGS_DIR}"
4142
./build.sh linux/amd64 3.12 "${LOCAL_JARS_DIR}"

bindings/python/docs/development/build-architecture.md

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ This document describes the build architecture for creating platform-specific Py
44

55
## Overview
66

7-
**Goal:** Distribute a single `arcadedb-embedded` package that works on 3 platforms with **zero Java installation required**.
7+
**Goal:** Distribute a single `arcadedb-embedded` package that works on 4 platforms with **zero Java installation required**.
88

9-
**Achievement:** 3 platform-specific wheels (~63–115MB compressed) with bundled platform-specific JRE, built and tested on GitHub Actions using native runners.
9+
**Achievement:** 4 platform-specific wheels (~63–115MB compressed) with bundled platform-specific JRE, built and tested on GitHub Actions using native runners.
1010

1111
## Supported Platforms
1212

@@ -15,6 +15,7 @@ This document describes the build architecture for creating platform-specific Py
1515
| **linux/amd64** | 115.2M | 249.0M | `ubuntu-24.04` | Docker native | Most common Linux platform |
1616
| **linux/arm64** | 114.1M | 249.6M | `ubuntu-24.04-arm` | Docker native | ARM64 servers, Raspberry Pi |
1717
| **darwin/arm64** | 63.1M | 55.1M | `macos-15` | Native build | Apple Silicon Macs (2020+) |
18+
| **windows/amd64** | ~115M | ~249M | `windows-2025` | Native build | Windows x86_64 |
1819

1920
**All supported platforms:**
2021

@@ -39,6 +40,11 @@ We use a **hybrid build approach** to create platform-specific wheels:
3940
- Native `jlink` creates correct JRE for the platform
4041
- Pre-filtered JARs from artifact (eliminates glob issues)
4142

43+
3. **Windows platform:** Native builds
44+
- Uses platform-specific GitHub Actions runner
45+
- Native `jlink` creates correct JRE for the platform
46+
- Pre-filtered JARs from artifact (eliminates glob issues)
47+
4248
**Critical:** All wheels are **platform-specific** (not `py3-none-any`). This is achieved by:
4349

4450
1. **setup.py with BinaryDistribution class**: Overrides default behavior
@@ -107,7 +113,7 @@ jobs:
107113
needs: download-jars
108114
strategy:
109115
matrix:
110-
platform: [linux/amd64, linux/arm64, darwin/arm64]
116+
platform: [linux/amd64, linux/arm64, darwin/arm64, windows/amd64]
111117
# Builds platform-specific wheel, runs tests
112118
```
113119

@@ -147,6 +153,15 @@ jobs:
147153
- Builds wheel with `python -m build`
148154
3. Run tests on native platform
149155

156+
#### Windows Platform (Native)
157+
158+
1. Download pre-filtered JARs artifact
159+
2. Run `build-native.sh`:
160+
- Uses system Java (GitHub runner provides Java 25)
161+
- Runs `jlink` natively → platform-specific JRE
162+
- Builds wheel with `python -m build`
163+
3. Run tests on native platform
164+
150165
## JAR Exclusion System
151166

152167
### Single Source of Truth: `jar_exclusions.txt`
@@ -321,7 +336,7 @@ bindings/python/
321336
- Uploads artifact for native builds
322337
323338
2. **test job matrix** (lines 91-364)
324-
- Builds 3 platforms
339+
- Builds 4 platforms
325340
- Platform-specific steps (native runners, artifact download, tests)
326341
327342
3. **Test parsing** (lines 200-237)

0 commit comments

Comments
 (0)