1use std::process::Command;
4
5pub const CANIC_ICP_BUILD_ENVIRONMENT_ENV: &str = "CANIC_ICP_BUILD_ENVIRONMENT";
7
8pub mod adoption;
9mod artifact_io;
10mod bootstrap_store;
11mod build_profile;
12pub mod build_provenance;
13pub mod candid_endpoints;
14pub mod canic_metadata;
15pub mod canister_build;
16pub mod canister_ready;
17mod cargo_metadata;
18pub mod cycle_balance;
19pub mod deployment_catalog;
20pub mod deployment_truth;
21mod durable_io;
22pub mod duration;
23pub mod evidence_envelope;
24pub mod format;
25pub mod icp;
26pub mod icp_config;
27pub mod install_root;
28pub mod installed_deployment;
29pub mod policy_gate;
30pub mod registry;
31pub mod release_set;
32pub mod replica_query;
33pub mod response_parse;
34pub mod role_contract;
35pub mod state_manifest;
36pub mod subnet_registry;
37pub mod table;
38#[cfg(test)]
39mod test_support;
40mod workspace_discovery;
41
42pub(crate) fn cargo_command() -> Command {
43 let cargo = std::env::var_os("CARGO").unwrap_or_else(|| "cargo".into());
44 let mut command = Command::new(cargo);
45
46 if let Some(toolchain) = std::env::var_os("RUSTUP_TOOLCHAIN") {
47 command.env("RUSTUP_TOOLCHAIN", toolchain);
48 }
49 if let Some(environment) = std::env::var_os(CANIC_ICP_BUILD_ENVIRONMENT_ENV) {
50 command.env("ICP_ENVIRONMENT", environment);
51 }
52
53 command
54}
55
56pub(crate) fn icp_environment_from_env() -> String {
57 std::env::var(CANIC_ICP_BUILD_ENVIRONMENT_ENV)
58 .or_else(|_| std::env::var("ICP_ENVIRONMENT"))
59 .unwrap_or_else(|_| "local".to_string())
60}
61
62pub(crate) fn selected_icp_environment_from_env() -> String {
63 std::env::var("ICP_ENVIRONMENT").unwrap_or_else(|_| "local".to_string())
64}
65
66pub(crate) fn should_export_candid_artifacts(environment: &str) -> bool {
67 environment == "local"
68}
69
70pub(crate) fn remove_optional_file(path: &std::path::Path) -> std::io::Result<()> {
71 match std::fs::remove_file(path) {
72 Ok(()) => Ok(()),
73 Err(err) if err.kind() == std::io::ErrorKind::NotFound => Ok(()),
74 Err(err) => Err(err),
75 }
76}
77
78#[cfg(test)]
79mod tests;