Respect cargo offline env variable in wasm builder (#11735)

* Support offline env variable in wasm builder

* Clean up

* Improve checks

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* Update crate docs

* Add docs to `lib.rs` and introduce helper method `offline_build`

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
Sebastian Kunert
2022-06-22 17:27:46 +02:00
committed by GitHub
parent acc8cf6e4c
commit 10e966e643
3 changed files with 31 additions and 7 deletions
@@ -15,7 +15,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
use crate::{write_file_if_changed, CargoCommandVersioned};
use crate::{write_file_if_changed, CargoCommandVersioned, OFFLINE};
use build_helper::rerun_if_changed;
use cargo_metadata::{CargoOpt, Metadata, MetadataCommand};
@@ -88,12 +88,12 @@ fn crate_metadata(cargo_manifest: &Path) -> Metadata {
cargo_manifest.to_path_buf()
};
let crate_metadata = MetadataCommand::new()
.manifest_path(cargo_manifest)
.features(CargoOpt::AllFeatures)
let mut crate_metadata_command = create_metadata_command(cargo_manifest);
crate_metadata_command.features(CargoOpt::AllFeatures);
let crate_metadata = crate_metadata_command
.exec()
.expect("`cargo metadata` can not fail on project `Cargo.toml`; qed");
// If the `Cargo.lock` didn't exist, we need to remove it after
// calling `cargo metadata`. This is required to ensure that we don't change
// the build directory outside of the `target` folder. Commands like
@@ -593,6 +593,11 @@ impl Profile {
}
}
/// Check environment whether we should build without network
fn offline_build() -> bool {
env::var(OFFLINE).map_or(false, |v| v == "true")
}
/// Build the project to create the WASM binary.
fn build_project(
project: &Path,
@@ -631,6 +636,10 @@ fn build_project(
build_cmd.arg("--profile");
build_cmd.arg(profile.name());
if offline_build() {
build_cmd.arg("--offline");
}
println!("{}", colorize_info_message("Information that should be included in a bug report."));
println!("{} {:?}", colorize_info_message("Executing build command:"), build_cmd);
println!("{} {}", colorize_info_message("Using rustc version:"), cargo_cmd.rustc_version());
@@ -751,6 +760,16 @@ impl<'a> Deref for DeduplicatePackage<'a> {
}
}
fn create_metadata_command(path: impl Into<PathBuf>) -> MetadataCommand {
let mut metadata_command = MetadataCommand::new();
metadata_command.manifest_path(path);
if offline_build() {
metadata_command.other_options(vec!["--offline".to_owned()]);
}
metadata_command
}
/// Generate the `rerun-if-changed` instructions for cargo to make sure that the WASM binary is
/// rebuilt when needed.
fn generate_rerun_if_changed_instructions(
@@ -765,8 +784,7 @@ fn generate_rerun_if_changed_instructions(
rerun_if_changed(cargo_lock);
}
let metadata = MetadataCommand::new()
.manifest_path(project_folder.join("Cargo.toml"))
let metadata = create_metadata_command(project_folder.join("Cargo.toml"))
.exec()
.expect("`cargo metadata` can not fail!");