Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
a03f5fb
Fix Windows CI build failures for Node and Python bindings (#2)
Copilot Jan 31, 2026
86a0fd1
feat(ci): use prebuilt BoringSSL binaries on Windows
jaredboynton Jan 31, 2026
b791b5f
fix(ci): build specific ssl and crypto targets in BoringSSL job
jaredboynton Jan 31, 2026
af2e507
fix(ci): use Ninja generator for BoringSSL Windows build
jaredboynton Jan 31, 2026
394a1b4
fix(ci): use GitHub release for prebuilt BoringSSL instead of buildin…
jaredboynton Jan 31, 2026
639ada1
Add prebuilt BoringSSL, justfile, and cross-compilation support
jaredboynton Feb 1, 2026
2d87c89
fix(ci): add missing prebuilt BoringSSL libs and fix workflow paths
jaredboynton Feb 1, 2026
813bd81
fix(ci): add BORING_BSSL_PATH for Windows builds, rename FingerprintP…
jaredboynton Feb 1, 2026
7e93322
fix(ci): use native Windows runner, remove musl from CI
jaredboynton Feb 2, 2026
9770ca2
fix(ci): restore Windows cross-compilation with LLVM
jaredboynton Feb 2, 2026
7492d46
fix(ci): fix CI builds - install just, fix LLVM PATH, add aarch64-musl
jaredboynton Feb 2, 2026
73d1a6e
chore: bump version to 1.4.1
jaredboynton Feb 2, 2026
74ab972
feat: reqwest-like API
jaredboynton Feb 5, 2026
96cc4cd
chore: bump version to 2.0.0
jaredboynton Feb 5, 2026
c60d70b
ci: fix release workflows for libclang and musl
jaredboynton Feb 5, 2026
45b5c92
ci: run release builds on macos only
jaredboynton Feb 5, 2026
419a9f8
ci: fix publish prerequisites and python sdist readme
jaredboynton Feb 5, 2026
69ac312
ci: fix release workflows for Python and Node (#3)
jaredboynton Feb 5, 2026
ca1e765
fix: remove nested workspace definition for parent workspace compatib…
jaredboynton Feb 8, 2026
37d24b0
Test suite overhaul: cleanup, new coverage, CI hardening
jaredboynton Mar 23, 2026
f278732
chore: rename package to specters for crates.io publish
jaredboynton Mar 23, 2026
9b1e0cf
chore: exclude prebuilt libs from crates.io package
jaredboynton Mar 23, 2026
720bad7
feat: add Chrome 143-146 fingerprint profiles
jaredboynton Mar 30, 2026
10bf9fd
chore: update Cargo.lock for v2.1.0
jaredboynton Mar 30, 2026
235dd08
fix: revert default to Chrome142 for SemVer compat, add test coverage
jaredboynton Mar 30, 2026
7cd6aaa
chore: bump to v2.1.1 with default fix
jaredboynton Mar 30, 2026
fdb8c29
docs: update binding READMEs, PyPI readme, and CHANGELOG for Chrome 1…
jaredboynton Mar 30, 2026
095b0c4
chore: bump to v2.1.2 with complete documentation
jaredboynton Mar 30, 2026
432d291
Fix native npm installs across platforms
jaredboynton Apr 24, 2026
bf81b7f
feat: SOCKS5 + HTTP CONNECT proxy integration
gfhfyjbr Apr 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Cargo configuration for specter
# Uses prebuilt BoringSSL libraries from lib/boringssl/

# Note: Environment variables for boring-sys are set via:
# - Local dev: source scripts/env.sh
# - CI: Set BORING_BSSL_PATH and BORING_BSSL_INCLUDE_PATH in workflow

[build]
# Uncomment to use prebuilt BoringSSL by default
# rustflags = []

[env]
# These are relative to the manifest directory (where Cargo.toml lives)
# Unfortunately Cargo doesn't support relative paths in [env], so we use scripts instead

# Target-specific linker settings for cross-compilation
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"

[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
4 changes: 2 additions & 2 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ retries = 1
slow-timeout = { period = "60s", terminate-after = 2 }

[profile.ci]
# CI profile with stricter settings
retries = 0
# CI profile -- retry once to handle transient flakes
retries = 1
failure-output = "final"
success-output = "never"

Expand Down
94 changes: 94 additions & 0 deletions .github/workflows/boringssl-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: BoringSSL Prebuilt Release

on:
workflow_dispatch:
inputs:
version:
description: 'Version tag (e.g., boringssl-prebuilt-v1)'
required: true
default: 'boringssl-prebuilt-v1'

permissions:
contents: write

jobs:
package:
name: Package prebuilt BoringSSL
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Verify libraries exist
run: |
echo "Checking for prebuilt libraries..."
ls -la lib/boringssl/

# Verify all expected targets
for target in aarch64-apple-darwin x86_64-apple-darwin \
x86_64-unknown-linux-gnu x86_64-unknown-linux-musl \
aarch64-unknown-linux-gnu \
x86_64-pc-windows-msvc aarch64-pc-windows-msvc; do
if [[ -d "lib/boringssl/$target" ]]; then
echo "✓ $target"
ls -lh "lib/boringssl/$target/"
else
echo "✗ $target (missing)"
fi
done

- name: Package archives
run: |
cd lib/boringssl

# Create per-target archives
for target in */; do
target=${target%/}
[[ "$target" == "include" ]] && continue

echo "Packaging $target..."
tar -czf "boringssl-${target}.tar.gz" include/ "$target/"

# Also create zip for Windows
if [[ "$target" == *windows* ]]; then
zip -r "boringssl-${target}.zip" include/ "$target/"
fi
done

# Create all-in-one archive
tar -czf boringssl-all-targets.tar.gz include/ */

ls -lh *.tar.gz *.zip 2>/dev/null || true

- name: Create Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ inputs.version }}
name: BoringSSL Prebuilt Libraries ${{ inputs.version }}
body: |
Prebuilt BoringSSL static libraries for use with `boring-sys` crate.

## Targets
- `aarch64-apple-darwin` - macOS ARM64 (Apple Silicon)
- `x86_64-apple-darwin` - macOS x86_64
- `x86_64-unknown-linux-gnu` - Linux x86_64 (glibc)
- `x86_64-unknown-linux-musl` - Linux x86_64 (musl)
- `aarch64-unknown-linux-gnu` - Linux ARM64 (glibc)
- `x86_64-pc-windows-msvc` - Windows x86_64
- `aarch64-pc-windows-msvc` - Windows ARM64

## Usage

Download the archive for your target and set environment variables:

```bash
export BORING_BSSL_PATH=/path/to/boringssl/<target>/build
export BORING_BSSL_INCLUDE_PATH=/path/to/boringssl/include
cargo build
```

Or download `boringssl-all-targets.tar.gz` for all platforms.
files: |
lib/boringssl/*.tar.gz
lib/boringssl/*.zip
draft: false
prerelease: false
119 changes: 84 additions & 35 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,72 +8,121 @@ on:
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
# Disable incremental compilation in CI (sccache handles caching)
CARGO_INCREMENTAL: 0
# RUSTC_WRAPPER set after sccache is initialized (see step below)
SCCACHE_GHA_ENABLED: "true"

jobs:
ci:
name: CI
runs-on: macos-latest
test:
name: Test (macOS)
runs-on: macos-14
timeout-minutes: 20
steps:
- name: Checkout code
uses: actions/checkout@v4
- uses: actions/checkout@v4

- name: Install Rust toolchain
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt

- name: Setup sccache
uses: mozilla-actions/sccache-action@v0.0.9
- uses: mozilla-actions/sccache-action@v0.0.9
- run: echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV

- name: Configure sccache for Rust
run: echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV

- name: Cache cargo registry
uses: actions/cache@v4
- uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

- name: Install cargo-nextest
uses: taiki-e/install-action@v2
- uses: taiki-e/install-action@v2
with:
tool: cargo-nextest

- name: Check formatting
run: cargo fmt -- --check
- name: Configure prebuilt BoringSSL
run: |
if [[ "$(uname -m)" == "arm64" ]]; then
echo "BORING_BSSL_PATH=${{ github.workspace }}/lib/boringssl/aarch64-apple-darwin/build" >> $GITHUB_ENV
else
echo "BORING_BSSL_PATH=${{ github.workspace }}/lib/boringssl/x86_64-apple-darwin/build" >> $GITHUB_ENV
fi
echo "BORING_BSSL_INCLUDE_PATH=${{ github.workspace }}/lib/boringssl/include" >> $GITHUB_ENV

- name: Run tests
run: cargo nextest run --all-features --profile ci
- run: cargo fmt -- --check
- run: cargo nextest run --all-features --profile ci

- name: Archive test results
- uses: actions/upload-artifact@v4
if: always()
uses: actions/upload-artifact@v4
with:
name: nextest-results
path: target/nextest/ci/junit.xml
if-no-files-found: ignore

- name: Run fingerprint_validation example
- name: Run examples
uses: nick-fields/retry@v3
with:
timeout_minutes: 2
timeout_minutes: 3
max_attempts: 3
retry_wait_seconds: 10
command: cargo run --example fingerprint_validation
command: |
cargo run --example fingerprint_validation
cargo run --example protocol_test

- name: Run protocol_test example
uses: nick-fields/retry@v3
build-linux:
name: Build Linux (${{ matrix.target }})
runs-on: macos-14
strategy:
matrix:
target:
- aarch64-unknown-linux-gnu
- x86_64-unknown-linux-gnu
steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
timeout_minutes: 3
max_attempts: 3
retry_wait_seconds: 10
command: cargo run --example protocol_test
targets: ${{ matrix.target }}

- uses: taiki-e/install-action@v2
with:
tool: just,cargo-zigbuild

- name: Install zig
run: brew install zig

- name: Build
run: |
chmod +x scripts/zig-cc-* scripts/zig-cxx-*
just zigbuild ${{ matrix.target }}

build-windows:
name: Build Windows (${{ matrix.target }})
runs-on: macos-14
strategy:
matrix:
target:
- x86_64-pc-windows-msvc
- aarch64-pc-windows-msvc
steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}

- name: Install LLVM
run: brew install llvm

- name: Add LLVM to PATH
run: echo "$(brew --prefix llvm)/bin" >> "$GITHUB_PATH"

- uses: taiki-e/install-action@v2
with:
tool: cargo-xwin

- name: Build
run: cargo xwin build --release --target ${{ matrix.target }} --lib
env:
BORING_BSSL_PATH: ${{ github.workspace }}/lib/boringssl/${{ matrix.target }}/build
BORING_BSSL_INCLUDE_PATH: ${{ github.workspace }}/lib/boringssl/include
Loading