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:
@@ -39,6 +39,7 @@ jobs:
|
|||||||
GITEA_SERVER_URL: ${{ gitea.server_url }}
|
GITEA_SERVER_URL: ${{ gitea.server_url }}
|
||||||
GITEA_SHA: ${{ gitea.sha }}
|
GITEA_SHA: ${{ gitea.sha }}
|
||||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
REBUILD_PUBLISHED_RELEASE: "true"
|
||||||
run: cargo +${RUST_TOOLCHAIN} run --locked --package bds-release -- prepare
|
run: cargo +${RUST_TOOLCHAIN} run --locked --package bds-release -- prepare
|
||||||
|
|
||||||
build-macos:
|
build-macos:
|
||||||
|
|||||||
@@ -208,9 +208,14 @@ pub(crate) fn prepare() -> Result<(), Box<dyn Error>> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let release = if let Some(existing) = gitea.release_for_tag(&tag)? {
|
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());
|
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() {
|
for asset in existing.assets.unwrap_or_default() {
|
||||||
gitea.delete_asset(existing.id, asset.id)?;
|
gitea.delete_asset(existing.id, asset.id)?;
|
||||||
}
|
}
|
||||||
@@ -247,6 +252,10 @@ pub(crate) fn publish() -> Result<(), Box<dyn Error>> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn replace_published_release(value: Option<&str>) -> bool {
|
||||||
|
value == Some("true")
|
||||||
|
}
|
||||||
|
|
||||||
fn required_env(name: &str) -> Result<String, Box<dyn Error>> {
|
fn required_env(name: &str) -> Result<String, Box<dyn Error>> {
|
||||||
env::var(name).map_err(|_| format!("required environment variable {name} is missing").into())
|
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() {
|
fn release_tag_is_encoded_as_one_api_path_segment() {
|
||||||
assert_eq!(percent_encode("release/1+beta"), "release%2F1%2Bbeta");
|
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",
|
"apt-get install --no-install-recommends --yes nasm",
|
||||||
"x86_64-pc-windows-msvc",
|
"x86_64-pc-windows-msvc",
|
||||||
"bds-release",
|
"bds-release",
|
||||||
|
"REBUILD_PUBLISHED_RELEASE: \"true\"",
|
||||||
"prepare",
|
"prepare",
|
||||||
"package",
|
"package",
|
||||||
"publish",
|
"publish",
|
||||||
|
|||||||
Reference in New Issue
Block a user