ci: update registry auth and improve adaptive worker scaling

Refactor the release workflow to use a structured container object with authenticated pulls for macOS ARM64 builds. Replace single-worker activation with dynamic upfront provisioning based on node and worker counts. Implement an absolute efficiency gain threshold for scaling checks and add early termination to improve adaptive scaling stability. Bump obikmer crate version to 1.1.27.
This commit is contained in:
Eric Coissac
2026-06-26 15:02:23 +02:00
parent b9b2e42ad2
commit d0490de29d
4 changed files with 16 additions and 11 deletions
+5 -1
View File
@@ -86,7 +86,11 @@ jobs:
build-macos-arm64: build-macos-arm64:
needs: create-release needs: create-release
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: registry.metabarcoding.org/cibuilder/rustcrossosx:latest container:
image: registry.metabarcoding.org/cibuilder/rustcrossosx:latest
credentials:
username: ${{ github.actor }}
password: ${{ secrets.REGISTRYTOKEN }}
defaults: defaults:
run: run:
working-directory: src working-directory: src
+1 -1
View File
@@ -1704,7 +1704,7 @@ dependencies = [
[[package]] [[package]]
name = "obikmer" name = "obikmer"
version = "1.1.26" version = "1.1.27"
dependencies = [ dependencies = [
"clap", "clap",
"csv", "csv",
+9 -8
View File
@@ -287,8 +287,9 @@ impl PartitionRunner {
drop(event_tx); drop(event_tx);
// ── Controller ──────────────────────────────────────────────────── // ── Controller ────────────────────────────────────────────────────
activate_tx.send(()).ok(); let initial_workers = n_nodes.min(max_workers).min(n_total);
let mut n_active = 1usize; for _ in 0..initial_workers { activate_tx.send(()).ok(); }
let mut n_active = initial_workers;
let mut cpu_sample = CpuSample::now(); let mut cpu_sample = CpuSample::now();
let mut eff_at_last_spawn = 0.0f64; // 0 = no previous spawn to evaluate let mut eff_at_last_spawn = 0.0f64; // 0 = no previous spawn to evaluate
let mut completed = 0usize; let mut completed = 0usize;
@@ -361,13 +362,13 @@ fn maybe_activate(
// Going from k-1 → k workers, the minimum acceptable speedup is (k-1+0.2)/(k-1). // Going from k-1 → k workers, the minimum acceptable speedup is (k-1+0.2)/(k-1).
// For the very first extra worker (n_active == 1, no previous spawn), skip this // For the very first extra worker (n_active == 1, no previous spawn), skip this
// check: eff_at_last_spawn == 0 acts as the sentinel. // check: eff_at_last_spawn == 0 acts as the sentinel.
let last_spawn_was_beneficial = if *eff_at_last_spawn < 1e-9 { let last_spawn_was_beneficial = if *eff_at_last_spawn < 1e-9 || eff < 1e-9 {
true // first additional worker: no prior data to evaluate true // first additional worker, or measurement too short: no prior data to evaluate
} else { } else {
let k_before = (*n_active - 1) as f64; let k_new = *n_active as f64; // worker count after the last spawn
let min_speedup = (k_before + 0.2) / k_before; let min_gain = 0.2 / k_new;
let actual_speedup = eff / *eff_at_last_spawn; let actual_gain = (eff - *eff_at_last_spawn) / eff;
actual_speedup >= min_speedup actual_gain >= min_gain
}; };
if last_spawn_was_beneficial { if last_spawn_was_beneficial {
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "obikmer" name = "obikmer"
version = "1.1.26" version = "1.1.27"
edition = "2024" edition = "2024"
[[bin]] [[bin]]