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
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:
@@ -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")));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user