Skip to content

Releases: ROCm/spur

Spur nightly (20260809 · b81c26b7)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 09 Aug 07:46
2eac05d

Automated nightly build from main at 2026-08-09 07:46 UTC.

Commit: b81c26b7

1 commit(s) since previous nightly.

Install

curl -fsSL https://raw.githubusercontent.com/ROCm/spur/main/install.sh | bash -s -- nightly

Docker

docker pull rocm/spur:nightly

v0.7.0

v0.7.0 Pre-release
Pre-release

Choose a tag to compare

@spur-release-bot spur-release-bot released this 04 Aug 09:44
4fb4a38

0.7.0 (2026-08-04)

refactor

  • spurd: drop --comm-address alias and SPUR_COMM_ADDRESS (#562) (9f4506d)

Features

  • mpi: add single-node PMIx MPI via dlopen plugin (#505) (3fbc62a)
  • mpi: fix single-node PMIx modex and mpirun launch (#528) (83c8b4c)
  • quota: Kubernetes quota-enforcement — M1 (tenancy + hard quotas + scoped kubeconfig) (#475) (aeb21cd)
  • spur-cli: accept --ntasks-per-node in srun (#534) (b097540)
  • spur-net: normalize node comm addresses for agent reachability (#557) (8c53f3e)
  • spurctld: authorize k0s cluster ops and scope kubeconfigs per user (#560) (f9a28be)
  • spurctld: multi-control-plane HA for native k0s clusters (#529) (0e5262d)

Bug Fixes

  • accounting: preserve unset fields on sacctmgr modify (#527) (6275ea8)
  • auth: enforce job ownership on exec, attach, and output streaming (#551) (367838e)
  • build: sync Cargo.lock spur-mpi-pmix version to 0.6.0 (#523) (8d9522d)
  • dispatch: back off between launch retries and drain unusable nodes (#538) (c267377)
  • spur-cli: accept --qos and SALLOC_QOS in salloc (#540) (0221042)
  • spur-cli: accept multi-node hostlists in scontrol update NodeName (#549) (3120d5c)
  • spur-cli: apply sinfo --states filter to node query (#533) (a92bf5e)
  • spur-cli: default sbatch --ntasks to one task per node (#522) (316888d)
  • spur-cli: default srun and salloc --ntasks to one task per node (#532) (f478b20)
  • spur-cli: honor format= in sacctmgr show account (#519) (ff85e9b)
  • spur-cli: honor SPUR_* env-var twins in sbatch (#526) (bdc4367)
  • spur-cli: scale default sbatch --ntasks by --ntasks-per-node (#531) (b0ea620)
  • spur-cli: sort squeue output and honor -S/--sort (#524) (7a0b2c9)
  • spur-cli: target the -w node when attaching an interactive PTY (#516) (dd5f6e3)
  • spur-core: default JobSpec.pty so pre-0.6 Raft logs replay (#509) (d754118)
  • spurctld: confirm batch dispatch on every node before Running (#550) (222d0f4)
  • spurctld: delete sacctmgr users atomically (#451) (5c3ddce)
  • spurctld: distinguish missing vs unavailable QOS in validation errors (#508) (6a2b9bc)
  • spurctld: exclude k0s-reserved nodes from batch scheduling (#558) (d4767da)
  • spurctld: serve read RPCs from local state when no Raft leader (#506) (93621c7)
  • spurctld: unify pending job classification (#500) (96c37de)
  • spurd: run sbatch batch script once per node, not once per task (#552) (a1be3b7)

v0.6.0

v0.6.0 Pre-release
Pre-release

Choose a tag to compare

@spur-release-bot spur-release-bot released this 27 Jul 08:35
1be3693

0.6.0 (2026-07-27)

Features

  • cluster: SPUR-native k0s clusters via spur k8s up/down + mesh-native CNI (#432) (7c95efe)
  • spur-cli: accept --qos for srun (#481) (765f319)
  • spur-cli: interactive PTY sessions via srun --pty and sattach (#482) (a1b28fb)
  • spur-cli: persist and display account-level grp_tres allocation (#477) (b1fa1ee)
  • spur-cli: support exclusive srun allocations (#496) (c56b873)
  • spur-cli: support nodefile-based nodelists (#467) (9947815)
  • spur-core: explicit GPU request modeling with greedy distribution (#502) (996cb54)
  • spur-sched: make nodelist selection additive (#472) (a4a29e6)
  • spurctld: auto-derive raft node_id from controller.peers position (#459) (6967f29)
  • spurctld: report node-resolved job output path in scontrol (#488) (bb7e9f8)
  • spurctld: show valid accounts in association errors (#446) (db7bef1)

Bug Fixes

  • accounting: filter users by name (#447) (b3e16a1)
  • oci: key container images by canonical reference (#497) (5bc467c)
  • spur-cli: display node features in sinfo (#493) (f3ee133)
  • spur-cli: limit user cancellation to active jobs (#483) (42750ac)
  • spur-cli: skip terminal jobs in filter-based scancel (#462) (c615aa5)
  • spur-core: run hooks from /tmp when work_dir can't be entered to avoid draining nodes (#503) (ec97012)
  • spur-sched: spread equal-weight jobs across idle nodes (#453) (c41f188)
  • spurctld: drop stale completion reports from preempted-and-requeued runs (#474) (e4e3288)
  • spurctld: enforce ownership on reservation delete and update (#463) (d7fc6cd)
  • spurctld: prevent single scheduling pass from over-subscribing QOS/account aggregate limits (#478) (f656944)
  • spurctld: reject job QOS not authorized for the submitting association (#490) (59b7180)
  • spurctld: schedule jobs across partition OR-lists (#468) (90986b5)
  • spurctld: update upsert_account test call for grp_tres arity (#485) (1ed491a)
  • spurd: release GPU reservations stranded mid-launch (#489) (c5b52cd)
  • spur: reclaim node resources when completion and eviction desync (#498) (9c2098c)
  • srun: fan out tasks across nodes in standalone and step mode (#473) (c74abac)

v0.5.1

v0.5.1 Pre-release
Pre-release

Choose a tag to compare

@spur-release-bot spur-release-bot released this 17 Jul 08:30
85959ae

0.5.1 (2026-07-17)

Bug Fixes

  • spur-cli: hide unregistered nodes from sinfo (#465) (3052801)
  • spur-cli: wire format engine into sacctmgr show qos (#457) (a422f51)
  • spur-core: derive version from cargo version plus git sha (#458) (055336f)
  • spur-core: enforce node and memory limits in QOS per-user checks (#427) (7595e9e)
  • spurctld: close QOS enforcement bypass for jobs submitted without a QOS (#452) (deafb10)
  • spurctld: pass name filter to get_jobs in accounting reconcile (#464) (e970764)
  • spurctld: reset stale node features/weight when NodeConfig stops matching (#455) (ab88dc4)
  • spurctld: retry accounting writes and reconcile drift from job store (#428) (c7dad32)
  • spurd: release GPU allocation on completion and post-record launch failure (#450) (86cd880)

v0.5.0

v0.5.0 Pre-release
Pre-release

Choose a tag to compare

@spur-release-bot spur-release-bot released this 15 Jul 13:50
fd995b2

0.5.0 (2026-07-15)

Features

  • spur-cli: add -V/--version support across all binaries and CLI entry points (#437) (fa358b8)
  • spur-cli: honor SRUN_/SALLOC_/SLURM_ env-var defaults for srun … (#421) (ac53a26)
  • spur-cli: support slurm-buildkite bridge (comment readback, parsable, script args, format literals, squeue --name) (#443) (bd4abbc)

Bug Fixes

  • spur-spank: rename SPANK exports to Slurm-compatible symbols (#429) (3620047)
  • spurctld: evict job to nodefail on partial multi-node dispatch failure (#426) (0a08108)
  • spurctld: raise grpc message-size limits and cap job submission size (#442) (91ab393)
  • spurctld: stop counting preemption requeues against the failure-requeue hold limit (#431) (35485a2)
  • spurctld: wire QOS priority into scheduling and preemption (#430) (8923528)
  • spurd: raise RLIMIT_MEMLOCK for job steps (default unlimited) (#449) (d49634d)

v0.4.1

v0.4.1 Pre-release
Pre-release

Choose a tag to compare

@spur-release-bot spur-release-bot released this 10 Jul 18:49
4b85bd7

0.4.1 (2026-07-10)

Bug Fixes

  • spur-cli: use connect_channel for accounting CLI commands (#415) (1256ea2)
  • spurd: chown job stdout/stderr and output dirs to submitting user (#401) (ce7dcfd)

v0.4.0

v0.4.0 Pre-release
Pre-release

Choose a tag to compare

@spur-release-bot spur-release-bot released this 10 Jul 05:07
a023aab

0.4.0 (2026-07-10)

Features

  • accounting: default QOS on user/account associations (#409) (75bf755)
  • admission: token-based dynamic node admission (#318) (91ade8a)
  • config: enforce partition allow_accounts and deny_accounts at s… (#413) (ba19f78)
  • 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 -o/--output, -e/--error, -i/--input to srun (#407) (531b949)
  • 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 ve...
Read more

v0.3.0

v0.3.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Apr 20:38
41de8e2

What's Changed

  • CLAUDE.md: add don'ts for writing unit tests by @shiv-tyagi in #112
  • Fix test t50_106: test real RawModeGuard, not simulation (#111) by @powderluv in #114
  • GPU over-scheduling fix, cancel deallocation, K8s pending failure det… by @codetap-developer in #115
  • Add secretEnv field to SpurJob CRD (#117) by @powderluv in #118
  • Add auto-update: startup check + CLI self-update by @powderluv in #119
  • fix(spurd): deadlock in exec_in_job due to double mutex acquisition by @shiv-tyagi in #120
  • fix(spurctld): propagate Raft propose errors to RPC callers by @shiv-tyagi in #121
  • fix(spurctld): refactor submit_array_job to avoid deadlock by @shiv-tyagi in #122
  • chore: sync Cargo.lock after spur-update crate addition by @shiv-tyagi in #123
  • fix(spurctld): return error from snapshot_state instead of swallowing serde failures by @shiv-tyagi in #124
  • fix(spur-cli): group sinfo rows by node state within partition by @shiv-tyagi in #127
  • Wire spurctld accounting notifications to spurdbd by @shiv-tyagi in #129
  • fix(spurd): drop privilege inside unshare wrapper, not before exec by @powderluv in #130
  • chore: bump workspace version to 0.3.0 by @powderluv in #131

New Contributors

Full Changelog: v0.2.2...v0.3.0

v0.2.2

v0.2.2 Pre-release
Pre-release

Choose a tag to compare

@powderluv powderluv released this 19 Apr 18:29
1a2c61d

Changes since v0.2.1

  • #107/#108: Set supplementary groups (video, render) for non-root job processes — fixes GPU device access when running as non-root
  • #109: Replace GetNode heartbeat hack with proper Heartbeat RPC — cleaner separation of read/write paths, real telemetry in heartbeats
  • #110: Sync CLAUDE.md and README.md with current codebase

v0.2.1

v0.2.1 Pre-release
Pre-release

Choose a tag to compare

@powderluv powderluv released this 19 Apr 01:23
253423c

Hotfix: fix namespace wrapper mount ordering (PR #106). Removes private /tmp mount that broke job output file visibility.