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
c96d3a8
ci, docs: drop the one-off nightly cron, RELEASING.md tag-fix section…
techgopal Nov 13, 2026
0e12de0
python, krishiv: PyPI and crates.io metadata for search: readme, keyw…
techgopal Nov 13, 2026
2069fc1
release: 0.2.1 (PyPI.md, crate READMEs, pyarrow required, version bum…
techgopal Nov 13, 2026
bdee35d
README: the 0.3 roadmap row and planned example say single-node (kris…
techgopal Nov 13, 2026
ba507a3
Merge origin/main into ci/s2-release-021
techgopal Nov 13, 2026
66552eb
release: 0.2.1 review fixes: CLI README, nightly gate accepts one .gi…
techgopal Nov 14, 2026
cb1e4ff
Merge origin/main into ci/s2-release-021
techgopal Nov 14, 2026
1677f77
changelog: 751 compat fragment (pyarrow required)
techgopal Nov 14, 2026
6c501a6
Cargo.toml: taplo alignment after the workspace keywords and categories
techgopal Nov 14, 2026
ab04ba9
docs: the home page carries a release note, not an alpha box; install…
techgopal Nov 14, 2026
373ccfd
RELEASING.md: the Docs step for a minor release (docs/0.X branch, ver…
techgopal Nov 14, 2026
25e87b6
Merge main into ci/s2-release-021
techgopal Nov 14, 2026
3913ecb
krishiv-udf-sandbox: pin krishiv-common to =0.2.1 with the workspace
techgopal Nov 14, 2026
3d7fed7
CHANGELOG: 0.2.1 also carries the acceptance-test fixes
techgopal Nov 14, 2026
43789d8
python, wheels, docs: every wheel includes cloud object stores (s3://…
techgopal Nov 14, 2026
891906d
ci: the free-threaded CI wheel builds with the cloud feature too
techgopal Nov 14, 2026
c105bcb
Merge remote-tracking branch 'origin/main' into ci/s2-release-021
techgopal Nov 14, 2026
e59aa45
Merge remote-tracking branch 'origin/main' into ci/s2-release-021
techgopal Nov 14, 2026
c92d5fb
ci: the wheel test installs the wheel with --no-deps so a target with…
techgopal Nov 14, 2026
b82d7f6
ci: the wheel test installs pytest with its dependencies; --no-deps i…
techgopal Nov 14, 2026
2ad9d1c
krishiv, cli: the telemetry-otlp feature forwards to krishiv-session …
techgopal Nov 14, 2026
b0f2081
python: the cloud-store wheel test also covers https:// and hf:// (PY…
techgopal Nov 14, 2026
888d741
packaging fixes: issue ids in the changelog fragments (PY-021, PY-031…
techgopal Nov 14, 2026
441d7e8
Merge remote-tracking branch 'origin/main' into ci/s2-release-021
techgopal Nov 14, 2026
bc83400
Merge remote-tracking branch 'origin/main' into ci/s2-release-021
techgopal Nov 14, 2026
b881e72
cli, session, python: telemetry-otlp in feature_states; session dev-d…
techgopal Nov 14, 2026
ec6f4a7
Merge remote-tracking branch 'origin/main' into ci/s2-release-021
techgopal Nov 15, 2026
4b209a0
cli: enabled_features derives from feature_states (one list, no uncov…
techgopal Nov 15, 2026
1685294
ci, python: the crate-upload retry falls back to ten minutes without …
techgopal Nov 15, 2026
bf65c89
Merge main into ci/s2-release-021 (runner disk fix, #776)
techgopal Nov 15, 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
12 changes: 10 additions & 2 deletions .github/scripts/require-green-nightly.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,15 @@ status=$(gh api "repos/$GITHUB_REPOSITORY/compare/$GITHUB_SHA...$run_sha" --jq .
case "$status" in
identical | ahead) echo "the scheduled run covers $GITHUB_SHA ($status)" ;;
*)
echo "::error::the latest green scheduled run ($run_sha) does not include $GITHUB_SHA ($status); wait for the next nightly run"
exit 1
# A publish tag (RELEASING.md "Publish tag"): exactly one commit that changes only files under .github/,
# directly on the commit the green run covers.
tag=$(gh api "repos/$GITHUB_REPOSITORY/compare/$run_sha...$GITHUB_SHA" --jq '[.status, .ahead_by, .behind_by, ([.files[].filename | select(startswith(".github/") | not)] | length)] | @tsv')
IFS=$'\t' read -r tag_status ahead behind outside <<<"$tag"
if [ "$tag_status" = ahead ] && [ "$ahead" = 1 ] && [ "$behind" = 0 ] && [ "$outside" = 0 ]; then
echo "$GITHUB_SHA is one .github-only commit on $run_sha, which the scheduled run covers"
else
echo "::error::the latest green scheduled run ($run_sha) does not include $GITHUB_SHA ($status); wait for the next nightly run"
exit 1
fi
;;
esac
5 changes: 4 additions & 1 deletion .github/scripts/wheel-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ work=$(mktemp -d)
"$python" -m venv "$work/venv"
py="$work/venv/bin/python"
"$py" -m pip install --quiet --upgrade pip
"$py" -m pip install --quiet "$dist"/*.whl pytest
# --no-deps: the wheel requires pyarrow, which has no musllinux wheel and would build from source (an hour);
# pyarrow comes from the binary-only loop below, and the smoke falls back to count() without it.
"$py" -m pip install --quiet --no-deps "$dist"/*.whl
"$py" -m pip install --quiet pytest
# Versions come from python/ci-interop-constraints.txt, the same pins ci.yml
# and nightly.yml use, so every wheel leg tests against one known set.
# pandas and numpy: the pandas_udf tests and the PySpark UDF conformance tests (T059 unit 3a); a missing wheel skips them.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -681,7 +681,7 @@ jobs:
coverage: true
- name: cp314t
python: "3.14t"
maturin_args: "--no-default-features --features mimalloc"
maturin_args: "--no-default-features --features mimalloc,cloud"
wheel_tag: cp314t
coverage: false
name: wheels (${{ matrix.name }})
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ on:
schedule:
# Off the hour: the top of the hour is when scheduled runs are delayed or dropped most.
- cron: "23 22 * * *"
# One-off extra runs on 2026-11-13 for the v0.2.0 release (binaries.yml and release.yml still need a green scheduled nightly; publishing no longer does); remove after.
- cron: "17 8,10 13 11 *"
workflow_dispatch:

permissions:
Expand Down
17 changes: 15 additions & 2 deletions .github/workflows/publish-crates.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
needs: ci
if: github.repository == 'KrishivAI/krishiv-engine' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
runs-on: ubuntu-latest
timeout-minutes: 120
timeout-minutes: 330
environment:
name: crates-io
url: https://crates.io/crates/krishiv
Expand Down Expand Up @@ -72,6 +72,19 @@ jobs:
continue
fi
echo "::group::$crate $version"
cargo publish -p "$crate" --locked # zizmor: ignore[use-trusted-publishing] scoped token in the gated crates-io environment
# crates.io limits how fast new crate names are created (429 "try again after <date>"): wait and retry.
for attempt in $(seq 1 40); do
log="$RUNNER_TEMP/publish-$crate.log"
if cargo publish -p "$crate" --locked >"$log" 2>&1; then cat "$log"; break; fi # zizmor: ignore[use-trusted-publishing] scoped token in the gated crates-io environment
cat "$log"
grep -q '429 Too Many Requests' "$log" || exit 1
[ "$attempt" -lt 40 ] || exit 1
after=$(grep -oE 'try again after [^.]+GMT' "$log" | head -1 | sed 's/try again after //')
# An empty or unparsable date (`date -d ""` is midnight today) falls back to ten minutes.
if [ -n "$after" ] && until=$(date -d "$after" +%s 2>/dev/null); then wait=$(( until - $(date +%s) + 20 )); else wait=600; fi
[ "$wait" -gt 20 ] || wait=60
echo "rate limited on $crate (attempt $attempt): waiting ${wait}s until $after"
sleep "$wait"
done
echo "::endgroup::"
done < .github/scripts/publish-crates.txt
11 changes: 10 additions & 1 deletion .github/workflows/wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ env:
CARGO_INCREMENTAL: 0
# maturin build flags per flavour; `dist` is the LTO + stripped profile of the workspace Cargo.toml.
ABI3_ARGS: --profile dist --locked
FT_ARGS: --profile dist --locked --no-default-features --features mimalloc
FT_ARGS: --profile dist --locked --no-default-features --features mimalloc,cloud
# The shipped CPU levels (see README.md, "Supported CPUs").
X86_RUSTFLAGS: -C target-cpu=x86-64-v3
ARM_RUSTFLAGS: -C target-cpu=neoverse-n1
Expand Down Expand Up @@ -86,6 +86,15 @@ jobs:
for w in dist/*.whl; do unzip -l "$w" | grep -q 'krishiv/_cpu_level$'; done
- uses: $/.github/actions/setup-uv
if: matrix.libc == 'manylinux'
# The cloud-store test reads and writes s3:// against MinIO: the bucket is a directory of its data dir.
- name: S3 emulator (MinIO)
if: matrix.libc == 'manylinux'
run: |
mkdir -p "$RUNNER_TEMP/minio/krishiv-test"
docker run -d --rm --name krishiv-wheel-minio -p 127.0.0.1:9000:9000 --user "$(id -u):$(id -g)" \
-v "$RUNNER_TEMP/minio:/data" cgr.dev/chainguard/minio server /data
for _ in $(seq 1 60); do curl -s -o /dev/null --max-time 2 http://127.0.0.1:9000/minio/health/live && break; sleep 1; done
echo "KRISHIV_TEST_S3_ENDPOINT=http://127.0.0.1:9000" >> "$GITHUB_ENV"
- name: Test (manylinux, on the runner)
if: matrix.libc == 'manylinux'
env:
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,20 @@ Later entries are generated by release-plz from Conventional Commits (`release-p

Nothing yet.

## 0.2.1

A patch release: packaging, documentation and the fixes found by acceptance testing of 0.2.0. The fixes are listed from their changelog fragments when the release is assembled (`cargo xtask changelog assemble 0.2.1`).

### Changed

- **`pyarrow>=16` is now a required dependency** of the Python package, so a bare `pip install krishiv` can `collect()` and
`show()`. `krishiv[pyarrow]` still works as an alias.
- The PyPI page (`krishiv` and `krishiv-compat`) now has a description (`python/PYPI.md`), keywords, classifiers and project URLs.
- The crates.io pages have READMEs: a full one for `krishiv` (its example runs as a doc test) and a short pointer to `krishiv`
for every internal crate; keywords and categories include `spark`.
- The crates.io publish workflow waits out the registry's 429 rate limit for new crate names and retries; the one-off
nightly cron is gone; `RELEASING.md` documents publishing from a tag.

## 0.2.0

The first release is the embedded core: the engine runs in your process, from Python or Rust.
Expand Down
Loading
Loading