From d5cc2efb875bdd7c4b28292d21083140373b3fc3 Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Fri, 8 Mar 2024 11:23:45 +0100 Subject: [PATCH] Remove docker container on build failure (#1531) --- CHANGELOG.md | 1 + crates/build/src/docker.rs | 31 ++++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e56406885..15fca4c31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fix parsing of docker STDOUT - [#1526](https://github.com/paritytech/cargo-contract/pull/1526) +- Remove docker container on build failure - [#1531](https://github.com/paritytech/cargo-contract/pull/1531) ## [4.0.0-rc.3] diff --git a/crates/build/src/docker.rs b/crates/build/src/docker.rs index 4c16055a8..104fe49ef 100644 --- a/crates/build/src/docker.rs +++ b/crates/build/src/docker.rs @@ -63,6 +63,7 @@ use bollard::{ CreateContainerOptions, ListContainersOptions, LogOutput, + RemoveContainerOptions, }, errors::Error, image::{ @@ -162,11 +163,27 @@ pub fn docker_build(args: ExecuteArgs) -> Result { ) .await?; - let mut build_result = run_build(&client, &container, &verbosity).await?; - - update_build_result(&host_folder, &mut build_result)?; - - update_metadata(&build_result, &verbosity, &image, &client).await?; + let build_result = async { + let mut build_result = run_build(&client, &container, &verbosity).await?; + update_build_result(&host_folder, &mut build_result)?; + update_metadata(&build_result, &verbosity, &image, &client).await?; + Ok::(build_result) + } + .await; + + let build_result = match build_result { + Ok(build_result) => build_result, + Err(e) => { + // Remove container to avoid leaving it in an incorrect state for + // subsequent calls + let options = Some(RemoveContainerOptions { + force: true, + ..Default::default() + }); + let _ = client.remove_container(&container, options).await; + return Err(e) + } + }; verbose_eprintln!( verbosity, @@ -305,7 +322,7 @@ async fn create_container( let container_option = containers.first(); if container_option.is_some() { - return Ok(container_name); + return Ok(container_name) } let mount = Mount { @@ -530,7 +547,7 @@ async fn show_pull_progress( let status = info.status.unwrap_or_default(); if status.starts_with("Digest:") || status.starts_with("Status:") { eprintln!("{}", status); - continue; + continue } if let Some(id) = info.id {