Improve: Sparse intersection dependency chain (#251) #167
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
push: | |
branches: ["main"] | |
env: | |
BUILD_TYPE: Release | |
GH_TOKEN: ${{ secrets.SEMANTIC_RELEASE_TOKEN }} | |
PYTHONUTF8: 1 | |
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages | |
permissions: | |
contents: write | |
pages: write | |
id-token: write | |
jobs: | |
versioning: | |
name: Update Version | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Run TinySemVer | |
uses: ashvardanian/[email protected] | |
with: | |
verbose: "true" | |
version-file: "VERSION" | |
update-version-in: | | |
Cargo.toml:^version = "(\d+\.\d+\.\d+)" | |
Cargo.lock:name = "simsimd"\nversion = "(\d+\.\d+\.\d+)" | |
package.json:"version": "(\d+\.\d+\.\d+)" | |
CMakeLists.txt:VERSION (\d+\.\d+\.\d+) | |
update-major-version-in: | | |
include/simsimd/simsimd.h:^#define SIMSIMD_VERSION_MAJOR (\d+) | |
update-minor-version-in: | | |
include/simsimd/simsimd.h:^#define SIMSIMD_VERSION_MINOR (\d+) | |
update-patch-version-in: | | |
include/simsimd/simsimd.h:^#define SIMSIMD_VERSION_PATCH (\d+) | |
dry-run: "false" | |
push: "true" | |
create-release: "true" | |
github-token: ${{ secrets.SEMANTIC_RELEASE_TOKEN }} | |
rebase: | |
name: Rebase Dev. Branch | |
if: github.ref == 'refs/heads/main' | |
needs: versioning | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout the latest code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Perform rebase | |
run: | | |
git fetch origin main | |
git checkout main-dev | |
git rebase origin/main | |
- name: Push changes | |
uses: CasperWA/push-protected@v2 | |
with: | |
token: ${{ secrets.SEMANTIC_REBASE_TOKEN }} | |
branch: main-dev | |
unprotect_reviews: True | |
force: True | |
build_wheels_linux_x86: | |
name: Build Python Wheels (Linux x86) | |
runs-on: ubuntu-22.04 | |
needs: versioning | |
strategy: | |
matrix: | |
python-version: ["37", "38", "39", "310", "311", "312", "313"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: "main" | |
- name: Install Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Install cibuildwheel | |
run: | | |
python -m pip install cibuildwheel | |
cibuildwheel --output-dir wheelhouse | |
env: | |
CIBW_BUILD: cp${{ matrix.python-version }}-* | |
CIBW_PLATFORM: linux | |
CIBW_ARCHS: x86_64 | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-wheels-linux-x86 | |
path: wheelhouse/*.whl | |
overwrite: true | |
# These are maintained by Arm, not GitHub, so we need to include | |
# extra steps, like installing Docker and starting the service | |
build_wheels_linux_arm: | |
name: Build Python Wheels (Linux ARM) | |
runs-on: ubuntu-24.04-arm | |
needs: versioning | |
strategy: | |
matrix: | |
python-version: ["37", "38", "39", "310", "311", "312", "313"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: "main" | |
- name: Install Docker CE from Official Repository | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y ca-certificates curl gnupg lsb-release | |
sudo mkdir -p /etc/apt/keyrings | |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg | |
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null | |
sudo apt-get update | |
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin | |
sudo systemctl start docker | |
docker version | |
- name: Install Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Install cibuildwheel | |
run: | | |
python -m pip install cibuildwheel | |
cibuildwheel --output-dir wheelhouse | |
env: | |
CIBW_BUILD: cp${{ matrix.python-version }}-* | |
CIBW_PLATFORM: linux | |
CIBW_ARCHS: aarch64 | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-wheels-linux-arm | |
path: wheelhouse/*.whl | |
overwrite: true | |
build_wheels_macos_x86: | |
name: Build Python Wheels (macOS x86) | |
runs-on: macos-13 | |
needs: versioning | |
strategy: | |
matrix: | |
python-version: ["37", "38", "39", "310", "311", "312", "313"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: "main" | |
- name: Install Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Install cibuildwheel | |
run: | | |
python -m pip install cibuildwheel | |
cibuildwheel --output-dir wheelhouse | |
env: | |
CIBW_BUILD: cp${{ matrix.python-version }}-* | |
CIBW_PLATFORM: macos | |
CIBW_ARCHS: x86_64 | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-wheels-macos-x86 | |
path: wheelhouse/*.whl | |
overwrite: true | |
build_wheels_macos_arm: | |
name: Build Python Wheels (macOS ARM) | |
runs-on: macos-14 | |
needs: versioning | |
strategy: | |
matrix: | |
# 3.7 not supported on macOS ARM | |
python-version: ["38", "39", "310", "311", "312", "313"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: "main" | |
- name: Install Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Install cibuildwheel | |
run: | | |
python -m pip install cibuildwheel | |
cibuildwheel --output-dir wheelhouse | |
env: | |
CIBW_BUILD: cp${{ matrix.python-version }}-* | |
CIBW_PLATFORM: macos | |
CIBW_ARCHS: arm64 | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-wheels-macos-arm | |
path: wheelhouse/*.whl | |
overwrite: true | |
build_wheels_windows: | |
name: Build Python Wheels (Windows) | |
runs-on: windows-2022 | |
needs: versioning | |
strategy: | |
matrix: | |
python-version: ["37", "38", "39", "310", "311", "312", "313"] | |
architecture: [AMD64] | |
include: | |
- python-version: "39" | |
architecture: ARM64 | |
- python-version: "310" | |
architecture: ARM64 | |
- python-version: "311" | |
architecture: ARM64 | |
- python-version: "312" | |
architecture: ARM64 | |
- python-version: "313" | |
architecture: ARM64 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: "main" | |
- name: Install Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Setup MSVC | |
uses: microsoft/setup-msbuild@v2 | |
with: | |
vs-version: "17.10" | |
- name: Install cibuildwheel | |
run: | | |
python -m pip install cibuildwheel | |
cibuildwheel --output-dir wheelhouse | |
env: | |
CIBW_BUILD: cp${{ matrix.python-version }}-win_${{ matrix.architecture }} | |
CIBW_PLATFORM: windows | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-wheels-windows-${{ matrix.architecture }} | |
path: wheelhouse/*.whl | |
overwrite: true | |
build_wheels_other: | |
name: Build Python Wheels (Other Platforms) | |
runs-on: ubuntu-22.04 | |
needs: versioning | |
strategy: | |
matrix: | |
python-version: ["37", "38", "39", "310", "311", "312", "313"] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: "main" | |
- name: Install Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Setup QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Install cibuildwheel | |
run: | | |
python -m pip install cibuildwheel | |
cibuildwheel --output-dir wheelhouse | |
env: | |
# e.g. ppc64le, s390x, i686, etc. | |
CIBW_BUILD: cp${{ matrix.python-version }}-* | |
CIBW_PLATFORM: linux | |
CIBW_ARCHS: ppc64le s390x i686 | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cibw-wheels-other | |
path: wheelhouse/*.whl | |
overwrite: true | |
build_sdist: | |
name: Build Python Source Distribution | |
runs-on: ubuntu-latest | |
needs: versioning | |
steps: | |
- uses: actions/[email protected] | |
with: | |
ref: "main" | |
- name: Set up Python | |
uses: actions/[email protected] | |
with: | |
python-version: 3.9 | |
- name: Build source distribution | |
run: pip install build && | |
python -m build --sdist | |
- name: Upload source distribution | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sdist | |
path: dist/*.tar.gz | |
retention-days: 1 | |
publish_python: | |
name: Publish Python | |
needs: | |
- build_wheels_linux_x86 | |
- build_wheels_linux_arm | |
- build_wheels_macos_x86 | |
- build_wheels_macos_arm | |
- build_wheels_windows | |
- build_wheels_other | |
- build_sdist | |
runs-on: ubuntu-22.04 | |
environment: | |
name: pypi | |
url: https://pypi.org/p/simsimd | |
permissions: | |
id-token: write | |
steps: | |
- name: Download wheels | |
# unpacks all CIBW artifacts into dist/ | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: cibw-* | |
path: dist | |
merge-multiple: true | |
- name: Download source distribution | |
uses: actions/download-artifact@v4 | |
with: | |
name: sdist | |
path: dist | |
- name: Publish to PyPi | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
packages-dir: dist | |
verbose: true | |
print-hash: true | |
build_javascript: | |
name: Build JavaScript Native Modules | |
needs: versioning | |
strategy: | |
fail-fast: false | |
matrix: | |
arch: [x64, x86] | |
os: [macos-latest, ubuntu-22.04] | |
exclude: | |
- arch: x86 | |
os: macos-latest | |
- arch: x86 | |
os: ubuntu-22.04 | |
runs-on: ${{ matrix.os }} | |
env: | |
CC: gcc-12 | |
CXX: g++-12 | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
with: | |
ref: "main" | |
- name: Update Git Submodules | |
run: git submodule update --init --recursive | |
- name: Set Up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "20" | |
architecture: ${{ matrix.arch }} | |
- name: Update System Compilers (Ubuntu Only) | |
if: matrix.os == 'ubuntu-22.04' | |
run: | | |
echo "Updating compilers and installing build dependencies on Ubuntu" | |
sudo apt update | |
sudo apt install -y cmake build-essential libjemalloc-dev libomp-dev gcc-12 g++-12 | |
sudo apt install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu | |
- name: Install Node.js Dependencies | |
run: npm ci --ignore-scripts | |
- name: Prebuild Native Modules (Linux / Non-Darwin) | |
if: matrix.os != 'macos-latest' | |
run: npm run prebuild-single | |
- name: Prebuild Native Modules for macOS | |
if: matrix.os == 'macos-latest' | |
env: | |
CC: clang | |
CXX: clang++ | |
run: npm run prebuild-darwin-x64+arm64 | |
- name: Validate macOS Prebuild Artifacts | |
if: matrix.os == 'macos-latest' | |
run: file prebuilds/*/* | |
- name: Cross-Build for ARM64 on Ubuntu | |
if: matrix.os == 'ubuntu-22.04' | |
run: npm run prebuild-arm64 | |
- name: Upload Prebuild Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: prebuilds | |
path: prebuilds | |
retention-days: 1 | |
publish_javascript: | |
name: Publish JavaScript Package | |
needs: build_javascript | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
with: | |
ref: "main" | |
- name: Update Git Submodules | |
run: git submodule update --init --recursive | |
- name: Set Up Node.js Environment | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "20" | |
- name: Download Prebuild Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: prebuilds | |
path: prebuilds | |
- name: Verify File Hard Links (Optional) | |
run: find . -type f -links +1 | |
- name: Install Node.js Dependencies | |
run: npm ci --ignore-scripts | |
- name: Build JavaScript from TypeScript | |
run: npm run build-js | |
- name: Run Final Tests with Prebuild Artifacts | |
run: npm run test | |
- name: Dry Run Publish to NPM | |
if: github.ref != 'refs/heads/main' | |
run: npm publish --dry-run | |
- name: Publish to NPM | |
if: github.ref == 'refs/heads/main' | |
uses: JS-DevTools/npm-publish@v3 | |
with: | |
token: ${{ secrets.NPM_TOKEN }} | |
access: public | |
publish_rust: | |
name: Publish Rust Crate | |
needs: versioning | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
with: | |
ref: "main" | |
- name: Update Git Submodules | |
run: git submodule update --init --recursive | |
- name: Set Up Rust Toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
override: true | |
- name: Publish Rust Crate to Registry | |
uses: katyo/publish-crates@v2 | |
with: | |
registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }} |