Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
795cdae
[cuebot] Fix issue on getWhatDependsOn(Frame) (#2278)
DiegoTavares May 12, 2026
0ca6a10
[cuebot] Reformat DaoJdbc files (#2297)
DiegoTavares May 12, 2026
da882ec
[cuegui] Fix Temp bar overflow on stale hosts and split "Temp Free" c…
ramonfigueiredo May 12, 2026
be93550
[cuegui] Update tooltip to clarify percentage-based display and behav…
jesszhz May 13, 2026
1cd6fc6
[CICD] Cache Rust deps and add timeouts to rust-pipeline (#2321)
ramonfigueiredo May 14, 2026
21fc1af
[rqd] Fix sigkill masking bug (#2312)
DiegoTavares May 15, 2026
59800f6
[cuebot] Fix channel closing issue (#2274)
DiegoTavares May 15, 2026
043c07e
[cuebot/proto/pycue/cuegui/docs] Add eligibleTime() to Job, Layer, an…
ramonfigueiredo May 15, 2026
a28bdc5
[CI/CD] Fix Test Documentation Build: use `python -m pip` in build_sp…
ramonfigueiredo May 15, 2026
6605da1
[cueweb] Bump Next.js to 15.5.18 to patch CVE-2026-44578 (WebSocket S…
ramonfigueiredo May 15, 2026
3a6694a
[cueweb] Add per-job subscribe bell for completion notifications (#2335)
mvallido May 18, 2026
c723a23
[cuegui/pycue] Add "Take Ownership" action for hosts already owned by…
Olaiwonismail May 18, 2026
e388c1f
[cueweb] Add human-readable age column with smart formatting (#2336)
singhvishalkr May 18, 2026
203bb2c
Bump faraday from 2.13.4 to 2.14.2 in /docs (#2342)
dependabot[bot] May 18, 2026
f86f821
[cueweb] Add job progress tooltip (#2331)
MukundaKatta May 19, 2026
5d62865
[cueweb] Add frame state filter chips (#2330)
MukundaKatta May 19, 2026
e95697f
[cuebot] Fix bug preventing dispatching with a single active show (#2…
DiegoTavares May 19, 2026
cb8714d
[cuegui] Fix stray blue line over layer Name column on macOS (#2343)
ramonfigueiredo May 19, 2026
80ea035
[cueweb] Fix all high and critical npm vulnerabilities (#2346)
ramonfigueiredo May 19, 2026
c05dc57
[cueweb/docs] Document per-job completion notifications (#2348)
ramonfigueiredo May 19, 2026
b7b82c0
[cueweb/docs] Add job comments panel with CRUD and predefined macros …
ramonfigueiredo May 20, 2026
ab0d6b8
[cueweb] Add Apache 2.0 license header to CueWeb source files (#2350)
ramonfigueiredo May 20, 2026
bb6bd61
[cuebot/proto/pycue/cuegui/docs] Add submissionTime() to Frame (#2337)
ramonfigueiredo May 20, 2026
0d710d7
[cuebot] Make Satisfy depend adhere to depend config (#2352)
DiegoTavares May 20, 2026
0529c85
[cueweb] Use toast for job-finished notifications and harden poller (…
ramonfigueiredo May 20, 2026
b2b9e36
[scheduler] Handle threadable frames similar to cuebot (#2328)
DiegoTavares May 20, 2026
aa359d5
[cuebot/proto/pycue/cuegui/docs] Add startTime() and stopTime() to La…
ramonfigueiredo May 20, 2026
55eb54b
[cuegui/cuebot] Optimize CueMonitorTree (#2370)
DiegoTavares May 21, 2026
2a161c0
[cuegui] Fix QT's thread-affinity warning (#2371)
DiegoTavares May 21, 2026
06a2088
[cuegui] Revert a portion of #2370 (#2378)
DiegoTavares May 28, 2026
3d6d3fc
[cueweb/docs/sandbox/images] Complete Professional UI/UX Foundations …
ramonfigueiredo May 29, 2026
db0cbaa
[cueweb/docs] Add CueSubmit job-submission UI (CueSubmit CLI parity +…
ramonfigueiredo Jun 3, 2026
3d478bb
[cueweb/docs] Job menu actions: Part 1 - Unmonitor, View Job Details,…
ramonfigueiredo Jun 3, 2026
fb245dc
[cueweb/docs] Job menu actions: Part 3 - Implement Dependencies (Vie…
ramonfigueiredo Jun 3, 2026
a1a1518
[cuegui] Fix preview frames error (#2389)
ramonfigueiredo Jun 3, 2026
50a6044
[cueweb] Add job dependency graph: inline panel + Cuetopia toggle (#2…
rajaryan2007 Jun 3, 2026
7a1a25a
[cueweb/docs] Document the job dependency graph (inline panel + Cueto…
ramonfigueiredo Jun 4, 2026
e4546eb
[scheduler] Resource accounting on Redis (#2323)
DiegoTavares Jun 4, 2026
c1ad07c
[cuegui] Fix crash when closing preview dialog before images are read…
ramonfigueiredo Jun 4, 2026
c8618f6
[cuebot] Add memory stranded cores metric (#2394)
DiegoTavares Jun 4, 2026
94bc190
[cueweb/docs] Host and Allocation Management: Hosts monitor page - In…
ttpss930141011 Jun 6, 2026
e504bc9
[cueweb/docs] Host management actions: lock/unlock, reboot, detail pa…
ramonfigueiredo Jun 8, 2026
d5a2c25
[scheduler] Make b_scheduler_managed the single source of truth (#2401)
DiegoTavares Jun 10, 2026
2b4a304
[rqd] Improve logging on fs and caps errors (#2402)
DiegoTavares Jun 10, 2026
57ab286
[cuebot] Release procs on frame-complete for scheduler-managed shows …
DiegoTavares Jun 10, 2026
de826ac
[cueweb] Add Create Show modal (#2376)
Anadee11 Jun 11, 2026
4c2f72b
[cueweb/docs] Add Shows page: stats table, Show Properties, subscript…
ramonfigueiredo Jun 11, 2026
73a3aa7
[cuebot] Complete the gRPC response in ShowInterface.SetCommentEmail …
ramonfigueiredo Jun 11, 2026
4db710a
[cueweb/docs] Add Allocations page (CueCommander parity) (#2410)
ramonfigueiredo Jun 11, 2026
b71b0d3
[cueweb] Job Management actions: min/max cores, batch confirmation, u…
ttpss930141011 Jun 12, 2026
f8e6a0b
[cueweb] Add per-show group tree with drag-to-reparent (#2404)
mvallido Jun 12, 2026
f9acdd0
[scheduler] Add scheduling mode: E-PVM (#2398)
DiegoTavares Jun 12, 2026
ca5f70f
[scheduler] Optimization pass (#2411)
DiegoTavares Jun 12, 2026
e4aa9de
Add ASWF Governance document (#2436)
DiegoTavares Jun 18, 2026
be04c42
[cueweb/docs] Add Limits page (CueCommander parity) (#2412)
ramonfigueiredo Jun 19, 2026
88bd037
[cueweb/docs] Add Subscriptions page and Subscriptions Graph page (Cu…
ramonfigueiredo Jun 19, 2026
30199a8
[cueweb/docs] Add Services (Facility Service Defaults) page (CueComma…
ramonfigueiredo Jun 19, 2026
41d9ec9
[cueweb/docs] Add Stuck Frames page (CueCommander parity) (#2416)
ramonfigueiredo Jun 19, 2026
a62bed1
[cueweb/docs] Add Redirect page (CueCommander parity) (#2418)
ramonfigueiredo Jun 19, 2026
3bb1d91
[cuebot] Fix Silent frame double booking (#2441)
DiegoTavares Jun 19, 2026
aea8433
[cuegui] Fix blank Stuck Frame page when default show is missing (#2445)
ramonfigueiredo Jun 19, 2026
03dbe48
[cuegui] Fix blank Redirect page when default show is missing (#2443)
ramonfigueiredo Jun 19, 2026
00e9925
[cueweb/docs] Add Cuebot Facility switching (server-side gateway rout…
ramonfigueiredo Jun 19, 2026
a0c5f28
[cueweb/docs] Add "About CueWeb" dialog and version sourcing from VER…
ramonfigueiredo Jun 20, 2026
5db45ba
[cueweb] Add optional group-based authorization gate (#2431)
ramonfigueiredo Jun 21, 2026
3af9662
[cueweb/docs] Add plugin system: loader, settings, menu selection, an…
ramonfigueiredo Jun 21, 2026
5b117ef
[cueweb/docs] Add view presets, immersive mode, and split-view worksp…
ramonfigueiredo Jun 22, 2026
92f7ba7
[cueweb/docs] Add optional Loki backend for frame log viewing (#2447)
ramonfigueiredo Jun 22, 2026
6a17c7f
[cueweb/docs] Add per-facility connection health and runtime facility…
ramonfigueiredo Jun 22, 2026
648e4e2
[cueweb/docs] Monitor Hosts: Full CueCommander parity (#2421)
ramonfigueiredo Jun 22, 2026
7ca2045
Bump form-data from 4.0.5 to 4.0.6 in /cueweb (#2450)
dependabot[bot] Jun 22, 2026
5a6eade
Bump @babel/core from 7.25.2 to 7.29.6 in /cueweb (#2451)
dependabot[bot] Jun 22, 2026
ed3a35d
Bump concurrent-ruby from 1.3.5 to 1.3.7 in /docs (#2452)
dependabot[bot] Jun 22, 2026
afd01bf
Bump faraday from 2.14.2 to 2.14.3 in /docs (#2453)
dependabot[bot] Jun 22, 2026
e7a6f5c
[cueweb/docs] Job/Layer/Frame context-menu parity + frame log viewer …
ramonfigueiredo Jun 22, 2026
14bc5ae
[cueweb/docs] Add Monitor Cue page (CueCommander parity) (#2423)
ramonfigueiredo Jun 22, 2026
39d6abe
[cueweb/docs] Job graph: show layers, right-click layer menu, double-…
ramonfigueiredo Jun 23, 2026
7f22324
[cueweb/docs] Add per-user usage metrics (Prometheus) + Grafana dashb…
ramonfigueiredo Jun 23, 2026
66acc9c
[cueweb/docs] Add CueWeb Audit web action audit system (#2461)
ramonfigueiredo Jun 23, 2026
ae191e3
[cuebot/cuegui] Feature add layer dispatchorder control (#2354)
tifilipebr Jun 23, 2026
27385a3
[scheduler] Add end-to-end stress tests to scheduler (#2464)
DiegoTavares Jun 23, 2026
f29d581
[scheduler] Avoid starvation (#2463)
DiegoTavares Jun 24, 2026
e47e327
[scheduler] Gate cluster feed on an awake-set scan (#2465)
DiegoTavares Jun 25, 2026
77c9166
[rest_gateway] Raise REST gateway gRPC max receive message size above…
ramonfigueiredo Jun 25, 2026
77dd671
[cueweb] Gate full CueCommander and CueSubmit behind admin authorizat…
ramonfigueiredo Jun 25, 2026
dc5c0d0
[cuebot] Defer release proc when host non-accessible (#2471)
DiegoTavares Jun 26, 2026
aea9a96
[cueweb] Fix Monitor Cue job row height to match show/group rows (#2470)
ramonfigueiredo Jun 26, 2026
6d964b7
[cueweb] Request Okta groups scope for group memberships (#2475)
ramonfigueiredo Jul 7, 2026
9551bc5
[cueadmin/docs] Add lock-state filter and idle sort to host list (#2480)
ramonfigueiredo Jul 9, 2026
fdbe6bc
[cuegui/docs] Add search and scrolling to frame monitor Filter Layers…
ramonfigueiredo Jul 14, 2026
9091d36
[scheduler/cuebot] Replace Redis-backed accounting with in-memory sto…
DiegoTavares Jul 16, 2026
254013a
Bump ws from 8.20.1 to 8.21.1 in /cueweb (#2485)
dependabot[bot] Jul 16, 2026
7bd93cb
[pycue/cuegui/cuebot] Add Department wrapper and fix TasksDialog (#23…
ttpss930141011 Jul 16, 2026
383de7d
[cueweb/docs] Add CueWeb full-release news post and refresh news nav_…
ramonfigueiredo Jul 18, 2026
df8201f
[cueweb/docs] Rename CueWeb to OpenCueWeb across documentation (#2484)
ramonfigueiredo Jul 18, 2026
c7a8ed7
Add an in-process E-PVM scheduler with reservations, backfill and lot…
akheffache Jul 8, 2026
6a3f05b
Add a DB-backed scheduler simulator with graphs and a --verify self-test
akheffache Jul 8, 2026
2445adf
Apply spotless formatting to scheduler sources
akheffache Jul 22, 2026
465e667
Scheduler review fixes: clear stale plan state, drop dead stranded-co…
akheffache Jul 22, 2026
79f8f33
Fix simulator review findings: DB-stat graphs, drain_test crash, host…
akheffache Jul 23, 2026
9e236d8
Add per-host limits (floating licenses) to the scheduler, with a --ve…
akheffache Jul 26, 2026
78967f1
sim: add LOCALITY, DEPENDS and FAILOVER --verify scenarios (suite now…
akheffache Jul 26, 2026
3052bcd
sim: add TAGS_GPU --verify scenario -- mixed tag+GPU fragmentation (s…
akheffache Jul 26, 2026
ef4e8f9
Make scheduler leadership sticky; extra cuebots are backups
akheffache Jul 29, 2026
e97ca6e
Add live application licensing to the scheduler
akheffache Jul 30, 2026
ff5714a
sim: add POISON scenario reproducing the orphaned-proc planner wedge
akheffache Jul 31, 2026
126765e
cuebot: batch frame completions in the scheduler tick
akheffache Jul 31, 2026
8ba27d0
scheduler: cache-warmth window for the locality bonus
akheffache Jul 31, 2026
f912cfe
cuebot: move long inline comment blocks into function headers (commen…
akheffache Jul 31, 2026
8bcc417
scheduler: book like the legacy dispatcher on multi-OS hosts and acro…
akheffache Aug 11, 2026
ac126d5
scheduler: diagnostics for silent non-booking
akheffache Aug 11, 2026
ca52281
scheduler: survive a malformed layer tag regex
akheffache Aug 11, 2026
fc12313
cuebot: legacy-vs-scheduler parity tests on the fixture jobs
akheffache Aug 11, 2026
134b3dc
scheduler: honor host thread mode like the legacy dispatcher
akheffache Aug 11, 2026
103872b
Fix query issues on DispatchQuery
DiegoTavares Aug 12, 2026
097a7be
cuebot: comment and doc cleanup from review feedback
akheffache Aug 12, 2026
755ecaf
scheduler: Prometheus metrics and Grafana dashboard
akheffache Aug 14, 2026
12ce3f6
scheduler: dedup a layer across host-spec groups within a tick
akheffache Aug 13, 2026
efb0513
scheduler: refactor tick into named phase methods
akheffache Aug 14, 2026
1136d0d
Scheduler: tidy comments and names, sync Scheduler.md with the code
akheffache Aug 15, 2026
3af762d
Reservations: fix wide-job starvation
akheffache Aug 15, 2026
0538bca
Scheduler stats: Prometheus waitlist metrics
akheffache Aug 19, 2026
a6647aa
Scheduler: keep resource mirrors correct when a cap drops under load
akheffache Aug 19, 2026
a9fa37b
Simulator: PRODENV chaos scenario, shows renamed to showA..showE
akheffache Aug 19, 2026
dd23e60
Scheduler: per-host layer cap, one layer cannot blanket a machine
akheffache Aug 19, 2026
588ef6a
Stats: farm health in Prometheus by spec group and hardware shape
akheffache Aug 21, 2026
db43d78
Scheduler: size layers from observed rss instead of trusting declarat…
claude Aug 24, 2026
6f6e211
Scheduler: fence stale releases and kill swept renders
claude Aug 26, 2026
e7975bb
Scheduler: the per-host layer cap is now soft
claude Aug 26, 2026
704b677
Stats: add the locality dial and the stranded cores gauge
claude Aug 26, 2026
71f6962
Scheduler: release the tick latch when pool startup fails
akheffache Aug 29, 2026
e37e21e
Scheduler: count show cores against the subscription
akheffache Aug 29, 2026
4bbea75
Scheduler: commit resource accounting with the booking
akheffache Aug 29, 2026
6f8e9ec
Scheduler: book at reduced cores inside the placement score
akheffache Aug 29, 2026
b3f5b51
Simulator: OVERDECLARE, SQUEEZE_FLAT, UNDERDECLARE, and repairs
akheffache Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
95 changes: 87 additions & 8 deletions .github/workflows/rust-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,47 +8,98 @@ on:

env:
CARGO_TERM_COLOR: always
# Incremental compilation hurts CI clean builds (extra disk I/O, larger
# target dirs, no benefit since each runner is ephemeral) — turn it off.
CARGO_INCREMENTAL: 0
# Be more tolerant of registry hiccups on Windows.
CARGO_NET_RETRY: 10
RUSTUP_MAX_RETRIES: 10
# CI never runs a debugger, so full debug symbols (`debug=2`) are wasted
# compile + link time. `line-tables-only` keeps panic backtraces (file:line)
# so test failures stay readable, while cutting most debuginfo generation.
# Set via env (CI-only) rather than Cargo.toml so local dev keeps full symbols.
# Applies to every job, Windows included. `test` inherits from `dev`, but we
# set both explicitly so the override sticks regardless of inheritance.
CARGO_PROFILE_DEV_DEBUG: line-tables-only
CARGO_PROFILE_TEST_DEBUG: line-tables-only

jobs:
build:
runs-on: ubuntu-22.04
timeout-minutes: 45

steps:
- uses: actions/checkout@v4
- name: Install X11 dev libs
run: |
sudo apt-get update && sudo apt-get install -y libx11-dev protobuf-compiler libcurl4-openssl-dev
# `mold` is a fast linker — cuts a large slice off Rust link time
# (609 deps to link). Invoked below via `mold -run`, which redirects
# the linker through LD_PRELOAD, so it needs no .cargo/config.toml
# (which would force mold on every local dev too) and works with the
# runner's default gcc regardless of version.
sudo apt-get update && sudo apt-get install -y libx11-dev protobuf-compiler libcurl4-openssl-dev mold
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rust-install.sh
bash ./rust-install.sh -y
- name: Build
- name: Cache cargo deps
uses: Swatinem/rust-cache@v2
with:
workspaces: rust
cache-on-failure: true
# Build + test share a SINGLE (debug) profile so artifacts are reused —
# previously `cargo build --release` then `cargo test` compiled the whole
# workspace + all deps twice (release then debug), roughly doubling the
# job. CI only needs to prove it compiles and passes tests, which debug
# does. `--no-run` splits compile-vs-run timing; `--verbose` dropped to
# cut log I/O.
- name: Build tests
run: |
cd rust
cargo build --release --verbose
mold -run cargo test --no-run
- name: Run tests
run: |
cd rust
cargo test --verbose
cargo test

clippy:
runs-on: ubuntu-22.04
timeout-minutes: 30

steps:
- uses: actions/checkout@v4
- name: Install X11 dev libs
run: |
sudo apt-get update && sudo apt-get install -y libx11-dev protobuf-compiler libcurl4-openssl-dev
sudo apt-get update && sudo apt-get install -y libx11-dev protobuf-compiler libcurl4-openssl-dev mold
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rust-install.sh
bash ./rust-install.sh -y
- name: Cache cargo deps
uses: Swatinem/rust-cache@v2
with:
workspaces: rust
cache-on-failure: true
- name: Run Clippy
run: |
cd rust
cargo clippy --verbose
mold -run cargo clippy --verbose

windows-clippy:
runs-on: windows-latest
timeout-minutes: 45

steps:
- uses: actions/checkout@v4
- name: Speed up Windows build (exclude build dirs from Defender)
shell: pwsh
run: |
# Real-time AV scanning of every compiler artifact (rustc writes
# thousands of .rlib/.o/.exe files) is the dominant hidden cost on
# Windows Rust CI. Exclude the workspace + cargo dirs and disable
# realtime monitoring outright — typically a 30-50% speedup. All
# calls are best-effort (Tamper Protection may block some).
Set-MpPreference -DisableRealtimeMonitoring $true -ErrorAction SilentlyContinue
Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE" -ErrorAction SilentlyContinue
Add-MpPreference -ExclusionPath "$env:USERPROFILE\.cargo" -ErrorAction SilentlyContinue
Add-MpPreference -ExclusionProcess "cargo.exe" -ErrorAction SilentlyContinue
Add-MpPreference -ExclusionProcess "rustc.exe" -ErrorAction SilentlyContinue
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
Expand All @@ -57,21 +108,49 @@ jobs:
run: choco install protoc -y
- name: Export PROTOC path
run: echo "PROTOC=C:\ProgramData\chocolatey\bin\protoc.exe" >> $env:GITHUB_ENV
- name: Cache cargo deps
uses: Swatinem/rust-cache@v2
with:
workspaces: rust
cache-on-failure: true
- name: Run Clippy
working-directory: rust
run: cargo clippy -p rqd --verbose
run: cargo clippy -p rqd

windows-tests:
runs-on: windows-latest
timeout-minutes: 60

steps:
- uses: actions/checkout@v4
- name: Speed up Windows build (exclude build dirs from Defender)
shell: pwsh
run: |
# See windows-clippy for rationale — AV scanning dominates Windows
# Rust CI time; excluding build dirs is a 30-50% win. Best-effort.
Set-MpPreference -DisableRealtimeMonitoring $true -ErrorAction SilentlyContinue
Add-MpPreference -ExclusionPath "$env:GITHUB_WORKSPACE" -ErrorAction SilentlyContinue
Add-MpPreference -ExclusionPath "$env:USERPROFILE\.cargo" -ErrorAction SilentlyContinue
Add-MpPreference -ExclusionProcess "cargo.exe" -ErrorAction SilentlyContinue
Add-MpPreference -ExclusionProcess "rustc.exe" -ErrorAction SilentlyContinue
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install Protobuf
run: choco install protoc -y
- name: Export PROTOC path
run: echo "PROTOC=C:\ProgramData\chocolatey\bin\protoc.exe" >> $env:GITHUB_ENV
- name: Cache cargo deps
uses: Swatinem/rust-cache@v2
with:
workspaces: rust
cache-on-failure: true
# Build tests first so we see compile-vs-run timing separately and the
# cache is populated even if a test later fails. `--verbose` is dropped
# — log volume noticeably slows Windows runners and the failure output
# is enough for triage.
- name: Build tests
working-directory: rust
run: cargo test -p rqd --no-run
- name: Run tests
working-directory: rust
run: cargo test -p rqd --verbose
run: cargo test -p rqd
154 changes: 154 additions & 0 deletions .github/workflows/scheduler-stress-pipeline.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
name: OpenCue Scheduler Stress Pipeline

# Runs the scheduler booking + accounting stress suite
# (rust/crates/scheduler/tests/stress_tests.rs): a full pipeline::run against a
# seeded farm, with an end-of-run audit that cross-checks the in-memory
# accounting store against SUM(proc) in Postgres and asserts cap enforcement.
#
# When it runs — and when it deliberately doesn't:
# - Pull requests: only when the scheduler crate, its proto dependency, the
# DB migrations, or this workflow change. The suite needs a migrated
# Postgres and takes several minutes — running it for Python/CueGUI/docs
# changes would burn runner time for zero signal.
# - Nightly on master: catches drift from changes that slipped past the
# paths filter (e.g. shared workspace dependencies) and gives a daily
# throughput data point under fixed scale.
# - Manually (workflow_dispatch): for benchmarking a branch at custom scale.
#
# What is a gate vs. what is informational:
# - The job FAILS on correctness regressions: accounting drift between the
# in-memory store and Postgres, cap breaches (subscription burst / job
# max-cores), booking
# liveness (<90% drain, no saturation rejections), or leftover test data.
# - The throughput numbers (frames/s) are reported in the step summary but
# are NOT asserted on: shared runners are too noisy for perf gating. For
# real benchmarking run the suite locally in release mode (see
# docs/_docs/developer-guide/scheduler-stress-testing.md).

on:
pull_request:
branches: ["master"]
paths:
- "rust/crates/scheduler/**"
- "rust/crates/opencue-proto/**"
- "rust/Cargo.toml"
- "cuebot/src/main/resources/conf/ddl/postgres/migrations/**"
- ".github/workflows/scheduler-stress-pipeline.yml"
schedule:
# Nightly on master. Odd minute to avoid the top-of-hour scheduling rush.
- cron: "23 9 * * *"
workflow_dispatch:
inputs:
stress_jobs:
description: "Drain-phase job count (default 300)"
required: false
stress_hosts:
description: "Drain-phase host count (default 1200)"
required: false
stress_frames_per_layer:
description: "Drain-phase frames per layer (default 5)"
required: false
stress_timeout_secs:
description: "Per-phase hard timeout in seconds (default 600)"
required: false

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0
CARGO_NET_RETRY: 10
RUSTUP_MAX_RETRIES: 10

jobs:
stress:
runs-on: ubuntu-22.04
timeout-minutes: 45

# The suite's Postgres service. Accounting state lives in-process inside the
# test itself, so nothing else needs to be provisioned here.
services:
postgres:
image: postgres:15.1
env:
POSTGRES_USER: cuebot
POSTGRES_PASSWORD: cuebot_password
POSTGRES_DB: cuebot
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U cuebot -d cuebot"
--health-interval 5s
--health-timeout 5s
--health-retries 10

steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
with:
# The suite only reads the repo (no git push), so don't leave the
# token on disk for later steps.
persist-credentials: false

- name: Install build dependencies
run: |
sudo apt-get update && sudo apt-get install -y libx11-dev protobuf-compiler libcurl4-openssl-dev postgresql-client
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rust-install.sh
bash ./rust-install.sh -y

- name: Cache cargo deps
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
with:
workspaces: rust
cache-on-failure: true

# Plain psql instead of the sandbox Flyway image: the migrations are
# versioned plain-SQL files, so applying them in numeric order is exactly
# what Flyway would do, without building a JDK image first.
- name: Apply database migrations
working-directory: cuebot/src/main/resources/conf/ddl/postgres/migrations
env:
PGPASSWORD: cuebot_password
run: |
for f in $(ls V*.sql | sort -t V -k2 -n); do
echo "== $f"
psql -q -v ON_ERROR_STOP=1 -h localhost -U cuebot -d cuebot -f "$f"
done

- name: Run stress suite
working-directory: rust
shell: bash
env:
STRESS_JOBS: ${{ inputs.stress_jobs }}
STRESS_HOSTS: ${{ inputs.stress_hosts }}
STRESS_FRAMES_PER_LAYER: ${{ inputs.stress_frames_per_layer }}
STRESS_TIMEOUT_SECS: ${{ inputs.stress_timeout_secs }}
run: |
cargo test -p scheduler --features stress-tests --test stress_tests -- --nocapture 2>&1 | tee stress-output.log

- name: Publish phase report
if: always()
working-directory: rust
shell: bash
run: |
if [ -f stress-output.log ] && grep -q "^================ phase" stress-output.log; then
{
echo "## Scheduler stress suite"
echo '```'
sed -n '/^================ phase/,$p' stress-output.log | sed -n '1,80p'
echo '```'
echo "_Throughput numbers are informational; only the accounting/enforcement assertions gate this job._"
} >> "$GITHUB_STEP_SUMMARY"
else
echo "## Scheduler stress suite: no phase report produced (failed before the run?)" >> "$GITHUB_STEP_SUMMARY"
fi

- name: Upload full output
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: scheduler-stress-output
path: rust/stress-output.log
if-no-files-found: ignore
retention-days: 30
4 changes: 3 additions & 1 deletion .github/workflows/testing-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,9 @@ jobs:
- name: Build CueWeb Docker image
working-directory: cueweb
run: |
docker buildx build . -f Dockerfile -t opencue/cueweb:test --load
docker buildx build . -f Dockerfile -t opencue/cueweb:test --load \
--build-context project_root=.. \
--build-arg NEXT_PUBLIC_GIT_SHA=$(git rev-parse --short HEAD)
echo "CueWeb Docker image built successfully"

build_rest_gateway:
Expand Down
Loading
Loading