Skip to content

chore(main): release 0.4.0#388

Draft
spur-release-bot[bot] wants to merge 2 commits into
mainfrom
release-please--branches--main--components--spur
Draft

chore(main): release 0.4.0#388
spur-release-bot[bot] wants to merge 2 commits into
mainfrom
release-please--branches--main--components--spur

Conversation

@spur-release-bot

@spur-release-bot spur-release-bot Bot commented Jul 6, 2026

Copy link
Copy Markdown

🤖 I have created a release beep boop

0.4.0 (2026-07-08)

Features

  • admission: token-based dynamic node admission (#318) (91ade8a)
  • e2e: migrate K8s E2E to pytest and bundle CI test assets (#247) (9dc99b9)
  • e2e: migrate native-host E2E tests from Rust to Python/pytest (#238) (a9ef480)
  • hooks: implement Slurm-compatible prolog/epilog hook framework (#219) (84b7e78)
  • metrics: add controller RPC handler statistics (#350) (4f080f7)
  • metrics: add node metrics collection and /metrics/nodes export (#237) (7b74464)
  • metrics: export job OpenMetrics from spurctld on :6822 (#217) (6f939d7)
  • node labels and dual-path partition matching (#276) (7448e0e)
  • reservations: persist CRUD via raft WAL and enforce scheduling parity (#385) (285a098)
  • scheduler: implement event-driven scheduler wake (#293) (1358222)
  • spur-cli: add -w/--nodelist and -x/--exclude to srun and salloc (#380) (ac0e4c9)
  • spur-cli: add sbatch --wrap for inline command submission (#381) (8d65736)
  • spur-client: add client-side controller failover with endpoint rotation (#384) (2f3b9df)
  • spur-cli: read SBATCH_* env vars as sbatch flag defaults (#374) (c74166d)
  • spur-core: add ALL/COUNT and proto-backed JobState and NodeState conversion (03770de)
  • spur-core: centralize env vars with SpurEnv, add SLURM_* twins (#311) (64ddf60)
  • spur-devices: CDI-based vendor-agnostic GPU device management (#262) (d5c819e)
  • spur-metrics: add job metrics collection in spurctld (40a3deb)
  • spur-metrics: add partition, job and more metrics (#394) (cf126da)
  • spur-metrics: add scheduler cycle and lifecycle statistics (#359) (a6e7cc0)
  • spur: add burst-buffer staging subsystem with capacity pool and pending reasons (#327) (fca5df6)
  • spur: add Completing (CG) job state with per-node completion (#234) (7c0457c)
  • spur: add DEADLINE job state and DeadLine reason for --deadline parity (#263) (0c585bd)
  • spur: add job suspend/resume functionality (#275) (87977b1)
  • spur: add OUT_OF_MEMORY job state from cgroup OOM detection (#310) (9c1e146)
  • spur: close exit-code reporting gap — exit:signal, DerivedExitCode, reasons (#274) (3d89351)
  • spurctld: enforce real QoS limits via controller-side QosCache (#325) (672ad43)
  • spurctld: serve REST API directly, remove standalone spurrestd (#319) (06215d2)
  • spurdbd: persist exit_signal and derived_exit_code for sacct (#324) (8556358)
  • spurdbd: wire fairshare integration between accounting and scheduler (8d1bcce)
  • spur: emit PartitionConfig/PartitionInactive pending reasons (#326) (422925d)
  • spur: expand pending-reason vocabulary and surface reservation/license/QoS reasons (#301) (d5ecb3f)
  • spur: node deregistration, drain, and job eviction (#354) (8fab7a9)
  • use controller computed metrics in sdiag (#332) (5eac544)

Bug Fixes

  • ci: add node connectivity check and cross-node DNS injection (61e632e)
  • ci: add node connectivity check and cross-node DNS injection (6e03055)
  • ci: add pre-cleanup step to native-host E2E workflow (#330) (cb65fda)
  • ci: add statuses permission and clean up E2E status reporting (8b96c89)
  • ci: add statuses permission and clean up E2E status reporting (7467851)
  • ci: construct image tag directly instead of relying on job outputs (1f34859)
  • ci: construct image tag directly instead of relying on job outputs (5a7d032)
  • ci: harden Trivy scan workflow configuration (#334) (f51299c)
  • ci: kill orphaned spur processes on BM nodes during cleanup (e23f94f)
  • ci: kill orphaned spur processes on BM nodes during cleanup (c74ebdf)
  • ci: move E2E assets to /tmp to prevent stale file contamination (#264) (a9ec2ce)
  • ci: remove stray -- from bare-metal test binary invocations (f879421)
  • ci: remove stray -- from bare-metal test binary invocations (7f8dc12)
  • ci: use recursive glob for Dockerfile pathspecs in license checks (#249) (5d5bdc6)
  • ci: use venv for Python E2E test deps (#239) (effe210)
  • clippy: replace sort_by with sort_by_key using Reverse (fff918b)
  • deploy: pin container tests to controller node and poll for remote inference output (520dcf4)
  • deploy: pin container tests to mi300 and poll for remote inference output (1916712)
  • deploy: read log files instead of journalctl in cluster_test debug (0e83613)
  • deploy: resolve releases without the GitHub API in install.sh (#383) (bc3ac1c)
  • deploy: unpin container tests and poll for remote inference output (ca3b3d5)
  • deploy: upgrade runtime base to Ubuntu 24.04 and run as non-root (#331) (b76a80c)
  • deploy: use correct field name for accounting host in K8s configmap (d8511a1)
  • e2e: resolve deploy paths via SPUR_DEPLOY_DIR (#248) (7a80263)
  • ffi: allow not_unsafe_ptr_arg_deref on C FFI boundary functions (ab4df8f)
  • install: avoid pipefail+SIGPIPE breaking glibc version check (#266) (beee80b)
  • resolve dead code and unused import warnings across 9 crates (#155) (1364191)
  • resolve trivial clippy warnings across workspace (9e1bc4e)
  • Resolve working dir against rootfs in non-root container fallback (fa017a2)
  • Resolve working dir against rootfs in non-root container fallback (0f2c447)
  • sbatch: CLI args override #SBATCH directives (#144) (8c152fa)
  • spur-cli: log gRPC errors in try_stream_output polling loop (c538602)
  • spur-cli: parse composite keys in sshare usage display (71f444c)
  • spur-cli: replace useless vec! with array literals in sinfo tests (383ae5e)
  • spur-cli: restore SIGPIPE default to prevent broken-pipe panic (#370) (fdeaf3a), closes #365
  • spur-cli: use .ok() instead of manual match in sbatch script read (ce16236)
  • spur-cli: warn once on unrecognized job state in srun polling loops (1b0aaea)
  • spur-core: box JobSpec in WalOperation::JobSubmit to fix large_enum_variant (c73f67e)
  • spur-core: derive Default for NodeSource instead of manual impl (6adb88e)
  • spur-core: serialize hook tests to avoid ETXTBSY flakiness (#265) (c96fa5f)
  • spur-core: set priority 0 for jobs submitted with hold flag (4c6b047)
  • spur-k8s: handle 409 AlreadyExists in launch_job as success (e2c3f80)
  • spur-k8s: handle 409 AlreadyExists in launch_job as success (0869c9e)
  • spur-k8s: use shorthand field init for labels in test helper (762a3db)
  • spur-metrics: use workspace publishable setting for the crate (#216) (0cd4a07)
  • spur-net: collapse consecutive str::replace calls in sanitize_name (9077939)
  • spur-net: replace is_some + unwrap with reference pattern matching in netrc parser (db233d3)
  • spur-sched: iterate over map values directly in het group pre-check (9164d2c)
  • spur-tests: remove unused imports and variables (548d706)
  • spur-tests: remove unused imports and variables (374344a)
  • spur-tests: replace useless vec! with array literals in test code (d7db28a)
  • spur-update: simplify boolean expression in semver test (d9feef3)
  • spurctld: exclusive jobs allocate full node resources (#150) (e38005e)
  • spurctld: free node resources on dispatch-failure requeue (#137) (41ffc57)
  • spurctld: honor node filters and match Slurm pending reasons (#402) (100e23b)
  • spurctld: initialize next_job_id from first_job_id on cold start (#371) (ed610f4)
  • spurctld: make preemption terminate and requeue jobs correctly (#403) (476b40a)
  • spurctld: persist last_purged to survive restart after log compaction (#373) (c2b23e9)
  • spurctld: remove clone on Copy types in raft vote storage (fe83d90)
  • spurctld: remove dead code and wire leader-forwarding fallback (#156) (c220cd8)
  • spurctld: replace redundant pattern matching with is_err() (e8c7921)
  • spurd: Added controller info in log message (#328) (727af25)
  • spurdbd: cast SUM aggregates to BIGINT in get_usage query (9546ec3)
  • spurdbd: normalize fairshare weights and harden refresh loop (91753d1)
  • spurd: improve container init error reporting (ca1d0ad)
  • spurd: improve container init error reporting (d3cff08)
  • spurd: non-root container uses container's dynamic loader (#151) (e2f9beb)
  • spurd: prevent resource leak on force-kill cancel path (46af47e)
  • spurd: prevent resource leak on force-kill cancel path (2099ea5)
  • spurd: remove dead code and wire cgroup cleanup (b96af21)
  • spurd: remove dead code and wire cgroup cleanup (178046e)
  • spurd: resolve stdout/stderr paths after work_dir fallback (#342) (84ae6c1)
  • spurd: search job user's personal image store during resolution (#138) (75f4b53)
  • spurd: shell-escape argv when building job script (#360) (d78b1bb)
  • spurd: use touch for file bind mounts and auto-mount DNS files i… (#142) (c2ce3ef)
  • spur: resolve dependency-engine gaps against array parents (#271) (f65a029)
  • spur: resolve semantic merge conflict between #262 and #263 (#272) (5781872)
  • srun: step dispatch routes to allocated node, not controller (#153) (bfa1c07)

Performance

  • deploy: use cargo-chef to cache dependency builds in Docker (af96542)
  • spur-sched: speed up backfill timeline queries (#348) (c7f56e4)
  • spur-tests: skip GPU venv provisioning when pre-existing venv available (efdeafc)
  • spur-tests: skip GPU venv provisioning when pre-existing venv available (0dc1f7a)

This PR was generated with Release Please. See documentation.

@spur-release-bot spur-release-bot Bot force-pushed the release-please--branches--main--components--spur branch from 29f690c to 36acc8e Compare July 7, 2026 01:59
@codecov-commenter

codecov-commenter commented Jul 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #388   +/-   ##
=======================================
  Coverage   70.55%   70.55%           
=======================================
  Files         139      139           
  Lines       39881    39881           
=======================================
  Hits        28135    28135           
  Misses      11746    11746           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@spur-release-bot spur-release-bot Bot force-pushed the release-please--branches--main--components--spur branch 7 times, most recently from 9898ea1 to f1c4882 Compare July 8, 2026 08:15
@spur-release-bot spur-release-bot Bot force-pushed the release-please--branches--main--components--spur branch from 95b2907 to 9f0f42c Compare July 8, 2026 12:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

spur-cli: panics with "Broken pipe (os error 32)" when output is piped to head/less and the reader closes early

1 participant