canic-host 0.99.13

Host-side App build, Fleet install, deployment, and release-set library for Canic workspaces
Documentation
use super::fleet_activation_journal::{
    ResolvedFleetInstallActivation, RootInstalledFleetInstallActivation,
    admit_root_install_receipt, record_root_installed,
};
use super::operations::InstallRootWasmOperation;
use super::options::InstallRootOptions;
use super::phase_receipts::InstallReceiptScope;
use super::plan_artifacts::{PreparedPlanArtifacts, normal_install_root_wasm};
use super::timing::InstallTimingSummary;
use crate::canister_build::WorkspaceBuildContext;

pub(super) struct PreparedRootInstall {
    pub(super) timings: InstallTimingSummary,
    pub(super) activation: RootInstalledFleetInstallActivation,
}

pub(super) fn install_root_prepared(
    receipt_scope: InstallReceiptScope<'_>,
    options: &InstallRootOptions,
    root_canister_id: &str,
    build_context: &WorkspaceBuildContext,
    plan_artifacts: Option<&PreparedPlanArtifacts>,
    activation: &ResolvedFleetInstallActivation,
) -> Result<PreparedRootInstall, Box<dyn std::error::Error>> {
    let mut timings = InstallTimingSummary::default();
    let root_wasm = match plan_artifacts {
        Some(artifacts) => artifacts.verified_root_wasm_path()?,
        None => normal_install_root_wasm(receipt_scope.icp_root, &options.root_build_target),
    };
    let install_operation = InstallRootWasmOperation::new(
        receipt_scope.icp_root,
        receipt_scope.environment,
        root_canister_id,
        root_wasm,
        &activation.journal.activation.identity,
        build_context.local_replica.as_ref(),
    )?;
    let completed_root_install =
        receipt_scope.run_operation_with_receipt(&install_operation, Some(root_canister_id))?;
    timings.install_root = completed_root_install.duration;
    let receipt = admit_root_install_receipt(&completed_root_install.receipt_path)?;
    let activation = record_root_installed(receipt_scope.icp_root, activation, &receipt)?;

    Ok(PreparedRootInstall {
        timings,
        activation,
    })
}