Handle explicit release rebuilds.
Some checks failed
Tagged release / prepare-release (push) Successful in 3m6s
Tagged release / build-macos (push) Failing after 22m42s
Tagged release / build-linux-arm64 (push) Successful in 37m56s
Tagged release / build-linux-x64 (push) Failing after 15s
Tagged release / build-windows (push) Failing after 19m27s
Tagged release / publish-release (push) Has been skipped

This commit is contained in:
Hermes Agent
2026-08-14 10:44:13 +00:00
parent f3a30bf19e
commit 0d1f63e77f
3 changed files with 20 additions and 1 deletions

View File

@@ -39,6 +39,7 @@ jobs:
GITEA_SERVER_URL: ${{ gitea.server_url }}
GITEA_SHA: ${{ gitea.sha }}
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
REBUILD_PUBLISHED_RELEASE: "true"
run: cargo +${RUST_TOOLCHAIN} run --locked --package bds-release -- prepare
build-macos:

View File

@@ -208,9 +208,14 @@ pub(crate) fn prepare() -> Result<(), Box<dyn Error>> {
};
let release = if let Some(existing) = gitea.release_for_tag(&tag)? {
if !existing.draft {
if !existing.draft
&& !replace_published_release(env::var("REBUILD_PUBLISHED_RELEASE").ok().as_deref())
{
return Err(format!("release {tag} is already published").into());
}
if !existing.draft {
gitea.update_release(existing.id, &serde_json::json!({ "draft": true }))?;
}
for asset in existing.assets.unwrap_or_default() {
gitea.delete_asset(existing.id, asset.id)?;
}
@@ -247,6 +252,10 @@ pub(crate) fn publish() -> Result<(), Box<dyn Error>> {
Ok(())
}
fn replace_published_release(value: Option<&str>) -> bool {
value == Some("true")
}
fn required_env(name: &str) -> Result<String, Box<dyn Error>> {
env::var(name).map_err(|_| format!("required environment variable {name} is missing").into())
}
@@ -421,4 +430,12 @@ mod tests {
fn release_tag_is_encoded_as_one_api_path_segment() {
assert_eq!(percent_encode("release/1+beta"), "release%2F1%2Bbeta");
}
#[test]
fn published_release_replacement_requires_explicit_opt_in() {
assert!(!replace_published_release(None));
assert!(!replace_published_release(Some("false")));
assert!(!replace_published_release(Some("TRUE")));
assert!(replace_published_release(Some("true")));
}
}

View File

@@ -127,6 +127,7 @@ fn tagged_releases_are_built_and_packaged_with_rust_tools() {
"apt-get install --no-install-recommends --yes nasm",
"x86_64-pc-windows-msvc",
"bds-release",
"REBUILD_PUBLISHED_RELEASE: \"true\"",
"prepare",
"package",
"publish",