Skip to content
This repository was archived by the owner on May 7, 2026. It is now read-only.

fix(ci): disable PyPI attestations for reusable workflow - #1570

Closed
goldmedal wants to merge 9 commits into
Canner:mainfrom
goldmedal:fix/pypi-attestation
Closed

fix(ci): disable PyPI attestations for reusable workflow#1570
goldmedal wants to merge 9 commits into
Canner:mainfrom
goldmedal:fix/pypi-attestation

Conversation

@goldmedal

@goldmedal goldmedal commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

Summary

  • PyPI attestation verification fails when publishing via a reusable workflow (publish-wren-core-py.yml called from release-please.yml). The attestation certificate embeds the parent workflow ref but PyPI validates it against the trusted publisher's workflow, causing a mismatch.
  • Disables attestations in the publish step as a workaround until PyPI officially supports reusable workflows.

Ref: pypa/gh-action-pypi-publish#166

Test plan

  • After merge, re-run the wren-core-py 0.3.0 publish job and verify it succeeds

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Introduced WASM SDK for browser-based semantic SQL execution with Parquet/JSON data registration.
    • Added DataFusion connector for local file querying.
    • Enhanced Python bindings with query execution, data registration, and MDL loading APIs.
  • Documentation

    • Marked Ibis Server Module as deprecated.
  • Chores

    • Updated release automation to support WASM SDK publishing to npm.
    • Upgraded DataFusion from development branch to v53 release.

goldmedal and others added 9 commits April 16, 2026 14:30
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…er#1541)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… C-2 Phase 2) (Canner#1542)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…entifier (Canner#1557)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…anner#1559)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…flow (Canner#1562)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
table_reference() now returns Option<&str> after wren-core-base
changes, causing WASM build failures. Use unwrap_or_default() to
maintain the same behavior (empty string fallback).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ease docs

- Change with_explicit_nulls(false) to true so nullable columns
  serialize as {"amount": null} instead of being silently dropped
- Add wren-core-wasm to RELEASING.md publish workflow list

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PyPI attestation verification fails when publishing from a reusable
workflow because the attestation certificate contains the parent
workflow (release-please.yml) while the trusted publisher is configured
with the reusable workflow (publish-wren-core-py.yml).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added documentation Improvements or additions to documentation core ibis dependencies Pull requests that update a dependency file rust Pull requests that update Rust code python Pull requests that update Python code ci labels Apr 16, 2026
@coderabbitai

coderabbitai Bot commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a51751fa-fa18-4688-a55c-64fb47d8cb98

📥 Commits

Reviewing files that changed from the base of the PR and between 0384931 and f1f1388.

⛔ Files ignored due to path filters (5)
  • ibis-server/poetry.lock is excluded by !**/*.lock
  • wren-core-py/Cargo.lock is excluded by !**/*.lock
  • wren-core-wasm/Cargo.lock is excluded by !**/*.lock
  • wren-core-wasm/examples/data/orders.parquet is excluded by !**/*.parquet
  • wren/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (63)
  • .github/workflows/publish-wren-core-py.yml
  • .github/workflows/publish-wren-core-wasm.yml
  • .github/workflows/rc-release.yml
  • .github/workflows/release-please.yml
  • .github/workflows/wasm-ci.yml
  • .release-please-manifest.json
  • RELEASING.md
  • ibis-server/README.md
  • ibis-server/justfile
  • ibis-server/pyproject.toml
  • release-please-config.json
  • wren-core-py/Cargo.toml
  • wren-core-py/src/context.rs
  • wren-core-py/src/extractor.rs
  • wren-core-py/tests/test_modeling_core.py
  • wren-core-wasm/.claude/CLAUDE.md
  • wren-core-wasm/.gitignore
  • wren-core-wasm/AGENT_GUIDE.md
  • wren-core-wasm/Cargo.toml
  • wren-core-wasm/LICENSE
  • wren-core-wasm/README.md
  • wren-core-wasm/examples/inline.html
  • wren-core-wasm/examples/serve.mjs
  • wren-core-wasm/examples/test-cdn.html
  • wren-core-wasm/examples/url-mode.html
  • wren-core-wasm/justfile
  • wren-core-wasm/package.json
  • wren-core-wasm/scripts/build.mjs
  • wren-core-wasm/sdk/src/index.ts
  • wren-core-wasm/sdk/src/wren_core_wasm.d.ts
  • wren-core-wasm/sdk/tests/index.test.mjs
  • wren-core-wasm/sdk/tsconfig.json
  • wren-core-wasm/src/lib.rs
  • wren-core/Cargo.toml
  • wren-core/benchmarks/Cargo.toml
  • wren-core/core/Cargo.toml
  • wren-core/core/src/logical_plan/analyze/access_control.rs
  • wren-core/core/src/logical_plan/analyze/model_anlayze.rs
  • wren-core/core/src/logical_plan/optimize/simplify_timestamp.rs
  • wren-core/core/src/logical_plan/optimize/type_coercion.rs
  • wren-core/core/src/logical_plan/utils.rs
  • wren-core/core/src/mdl/context.rs
  • wren-core/core/src/mdl/dataset.rs
  • wren-core/core/src/mdl/dialect/inner_dialect.rs
  • wren-core/core/src/mdl/dialect/wren_dialect.rs
  • wren-core/core/src/mdl/function/dialect/bigquery/mod.rs
  • wren-core/core/src/mdl/function/dialect/bigquery/scalar.rs
  • wren-core/core/src/mdl/function/remote_function.rs
  • wren-core/core/src/mdl/function/scalar/mod.rs
  • wren-core/core/src/mdl/function/scalar/to_char.rs
  • wren-core/core/src/mdl/mod.rs
  • wren-core/core/src/mdl/utils.rs
  • wren-core/wren-example/Cargo.toml
  • wren/justfile
  • wren/pyproject.toml
  • wren/src/wren/connector/datafusion.py
  • wren/src/wren/connector/factory.py
  • wren/src/wren/mdl/cte_rewriter.py
  • wren/src/wren/model/__init__.py
  • wren/src/wren/model/data_source.py
  • wren/src/wren/model/field_registry.py
  • wren/tests/conftest.py
  • wren/tests/connectors/test_datafusion.py

📝 Walkthrough

Walkthrough

This PR introduces a new WebAssembly crate (wren-core-wasm) for browser-based Wren engine execution, upgrades DataFusion to v53, adds supporting npm publishing workflows, extends wren-core-py with new SessionContext methods, and implements a DataFusion connector for local file analysis.

Changes

Cohort / File(s) Summary
CI/Release Workflows
.github/workflows/publish-wren-core-py.yml, .github/workflows/publish-wren-core-wasm.yml, .github/workflows/rc-release.yml, .github/workflows/release-please.yml, .github/workflows/wasm-ci.yml, .release-please-manifest.json, release-please-config.json
Added new npm publishing workflow for wren-core-wasm, integrated into rc-release and release-please jobs. Added WASM CI pipeline with concurrency control, artifact caching, WASM size gating (15 MB gzip limit), and integration tests. Disabled attestations in PyPI publish step. Updated release manifests and configs to include wren-core-wasm package with node release-type.
wren-core-wasm Crate (Rust)
wren-core-wasm/Cargo.toml, wren-core-wasm/src/lib.rs
New WebAssembly crate with DataFusion v53, wasm-bindgen bindings, and single-threaded tokio. Implements WrenEngine struct with new(), registerJson(), registerParquet(), loadMDL(), and query() methods. Supports URL mode (HTTP range requests for Parquet), local mode (pre-registered tables), and fallback mode for MDL semantic layer application.
wren-core-wasm SDK (TypeScript)
wren-core-wasm/sdk/src/index.ts, wren-core-wasm/sdk/src/wren_core_wasm.d.ts, wren-core-wasm/sdk/tsconfig.json, wren-core-wasm/package.json, wren-core-wasm/scripts/build.mjs
TypeScript wrapper for WASM engine with async initialization, type-safe interfaces (WrenProfile, WrenEngineOptions). Build script copies wasm-pack artifacts and compiles TypeScript. Package exports ES modules with type declarations.
wren-core-wasm Examples & Tests
wren-core-wasm/examples/inline.html, wren-core-wasm/examples/url-mode.html, wren-core-wasm/examples/test-cdn.html, wren-core-wasm/examples/serve.mjs, wren-core-wasm/sdk/tests/index.test.mjs, wren-core-wasm/justfile
Standalone HTML examples demonstrating inline data registration and URL-based Parquet loading. Node.js HTTP server with CORS/Range request support. Integration tests covering WrenEngine API, MDL loading modes, error handling, and Parquet registration. Just recipes for build, test, serve, size checks, and clean.
wren-core-wasm Documentation
wren-core-wasm/README.md, wren-core-wasm/AGENT_GUIDE.md, wren-core-wasm/.claude/CLAUDE.md, wren-core-wasm/.gitignore, wren-core-wasm/LICENSE
Comprehensive documentation covering installation, API usage, URL mode vs inline mode workflows, quick start examples, and build instructions. Agent guide with CDN setup, data-loading patterns, MDL structure, and common pitfalls. Architecture/design rationale in CLAUDE.md.
wren-core-py SessionContext Enhancements
wren-core-py/src/context.rs, wren-core-py/src/extractor.rs
Added base_ctx field to PySessionContext for shared base context. New public methods: query() (executes SQL via Arrow IPC), register_parquet()/register_csv() (register data sources), list_tables() (enumerate tables), dry_run() (EXPLAIN formatted), load_mdl() (two-phase MDL init with semantic rules). Updated pushdown_limit to use LimitClause::LimitOffset structure. Updated dialect handling in extractor.
DataFusion v53 Dependency Upgrade
wren-core/Cargo.toml, wren-core/core/Cargo.toml, wren-core/benchmarks/Cargo.toml, wren-core/wren-example/Cargo.toml, wren-core-py/Cargo.toml
Upgraded DataFusion from git branch to v53 with selective features (nested/crypto/datetime/encoding/regex/unicode expressions, parquet, sql). Added datafusion-session v53 dependency. Adjusted tokio features: removed rt-multi-thread from base, added feature-gated multi-thread flag in core crate. Updated supporting dependencies (env_logger, hashbrown, serde_json, serde_with).
DataFusion UDF & Function Updates
wren-core/core/src/mdl/function/dialect/bigquery/mod.rs, wren-core/core/src/mdl/function/dialect/bigquery/scalar.rs, wren-core/core/src/mdl/function/scalar/mod.rs, wren-core/core/src/mdl/function/scalar/to_char.rs, wren-core/core/src/mdl/function/remote_function.rs
Updated BigQuery function imports and module paths. Added date_diff scalar UDF for BigQuery. Updated timestamp conversion UDFs to accept ConfigOptions parameter. Added PartialEq, Eq, Hash derives to ReturnType and bypass UDF types. Removed bypass UDF planning tests.
MDL Analysis & Optimization
wren-core/core/src/logical_plan/analyze/access_control.rs, wren-core/core/src/logical_plan/analyze/model_anlayze.rs, wren-core/core/src/logical_plan/optimize/simplify_timestamp.rs, wren-core/core/src/logical_plan/optimize/type_coercion.rs, wren-core/core/src/logical_plan/utils.rs, wren-core/core/src/mdl/dialect/inner_dialect.rs, wren-core/core/src/mdl/dialect/wren_dialect.rs
Updated DataFusion parser invocations to use dialect objects instead of string literals. Preserved null_aware field in Join reconstruction. Refactored SimplifyContext initialization and ExprSimplifier typing. Updated type coercion UDF handling and window frame type extraction. Removed obsolete InnerDialect extension methods for unicode literals and unnest table factors. Added dequote_identifier() utility.
MDL Context & Dataset Changes
wren-core/core/src/mdl/context.rs, wren-core/core/src/mdl/dataset.rs, wren-core/core/src/mdl/mod.rs, wren-core/core/src/mdl/utils.rs
Removed EliminateOneUnion rule from Unparse optimizer. New analyze_with_url_tables() API for building ListingTables from URL-based Parquet sources. Validates file-backed datasources only, rejects non-file backends. Sets session timezone to UTC when unset. Gated transform_sql() behind multi-thread feature with WASM documentation. Updated dialect argument passing from string to references.
DataFusion Connector (Python)
wren/src/wren/connector/datafusion.py, wren/src/wren/connector/factory.py, wren/src/wren/model/__init__.py, wren/src/wren/model/data_source.py, wren/src/wren/model/field_registry.py, wren/tests/connectors/test_datafusion.py
New DataFusionConnector for querying local Parquet/CSV files via wren_core.SessionContext. Registers tables from directory patterns, executes SQL, returns PyArrow tables. Added DataFusionConnectionInfo model with source and format fields. Extended factory and field registry to support datafusion datasource. Added comprehensive TPCH test suite.
Python SDK Testing & Configuration
wren/tests/conftest.py, wren/pyproject.toml, wren/justfile, wren/src/wren/mdl/cte_rewriter.py
Registered datafusion pytest marker for non-Docker tests. Added duckdb>=1.5.0 dev dependency. Added test-datafusion recipe to justfile. Added DataFusion to sqlglot dialect map.
Deprecation & Documentation
ibis-server/README.md, ibis-server/pyproject.toml, ibis-server/justfile, RELEASING.md, wren-core-py/tests/test_modeling_core.py
Marked ibis-server as deprecated. Renamed package from wren-engine to wren-engine-server with explicit wren-engine = 0.1.0 dependency. Removed install-core step from install recipe. Updated RELEASING.md with wren-core-wasm component and npm publishing docs. Adjusted test expectations for SQL schema quoting and function count changes.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

Suggested reviewers

  • douenergy

Poem

🐰 Hops excitedly in the browser...
WASM bindings leap to life,
DataFusion dances through the web,
Sessions sprouting from fresh Rust—
A rabbit's dream of semantic SQL, now compiled to pure sand! ✨

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@goldmedal goldmedal closed this Apr 16, 2026
@goldmedal
goldmedal deleted the fix/pypi-attestation branch April 16, 2026 07:58
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

ci core dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation ibis python Pull requests that update Python code rust Pull requests that update Rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant