deb: resolve suite aliases in the target series

The changelog (and -s) may carry a suite name instead of the series
codename: Debian conventionally writes 'unstable' where the series
data carries 'sid'. The name was used verbatim downstream, so every
NCR rebuild of a Debian package keyed its chroot tarball cache on
'unstable-buildd' (missing the cached sid tarball), tried to bootstrap
a tarball nobody waits for, and finally died on 'Unknown series:
unstable' in the distro-info lookup - with each queued build waiting
out the 300s stale-lock grace on the way.

Resolve the alias right where the series is picked, so the codename
identifies the target everywhere downstream; the codename is also what
the caches and distro-info data key on.
This commit is contained in:
2026-10-01 22:23:55 +02:00
parent 913ef2027a
commit ca0782488f
+16 -7
View File
@@ -297,20 +297,29 @@ async fn build_binary_package_impl(
// UNRELEASED is not a real archive series: without an explicit --series, // UNRELEASED is not a real archive series: without an explicit --series,
// build against the development series of the host vendor's distribution // build against the development series of the host vendor's distribution
// instead. An explicit --series always wins. // instead. An explicit --series always wins.
let resolved_series; let mut series = if let Some(s) = series {
let series = if let Some(s) = series { s.to_string()
s
} else if crate::distro_info::is_unreleased(&package_series) { } else if crate::distro_info::is_unreleased(&package_series) {
let dist = crate::build::env::current_vendor(); let dist = crate::build::env::current_vendor();
resolved_series = crate::distro_info::effective_series(&package_series, &dist).await?; let series = crate::distro_info::effective_series(&package_series, &dist).await?;
log::info!( log::info!(
"Changelog is UNRELEASED, building against series {}", "Changelog is UNRELEASED, building against series {}",
resolved_series series
); );
resolved_series.as_str() series
} else { } else {
&package_series package_series.clone()
}; };
// A changelog (or an explicit --series) may carry a suite name instead of
// the series codename: Debian conventionally writes 'unstable' where the
// series data carries 'sid'. Resolve the alias so the codename identifies
// the target everywhere downstream — the chroot bootstrap, the caches and
// the distro-info lookups all key on codenames.
if let Some((_, codename)) = crate::distro_info::resolve_suite_alias(&series) {
log::info!("Suite '{}' resolved to series {}", series, codename);
series = codename;
}
let series = series.as_str();
let current_arch = crate::get_current_arch(); let current_arch = crate::get_current_arch();
let arch = arch.as_deref().unwrap_or(&current_arch); let arch = arch.as_deref().unwrap_or(&current_arch);