Files
qinglong/packages/ql3-local-owner-cli/src/deployment/localDeployment.ts
T

893 lines
36 KiB
TypeScript

// Deployment composition lives with its concrete deployment capabilities.
import path from 'node:path';
import { readPrivateLocalCommandFile } from '@qinglong/local-command-file';
import {
currentIdentity,
normalizeLocalDeploymentPrepareCommand,
type LocalDeploymentPrepareResult,
} from './foundation/contract';
import {
initialComposeImageSelection,
preflightActiveComposeImageSelection,
switchLocalDeploymentComposeRevision,
switchLocalDeploymentComposeRevisionCommandFile,
} from './compose/composeRevision';
import {
preflightLocalDeploymentCompose,
preflightLocalDeploymentComposeCommandFile,
} from './compose/composePreflight';
import {
applyLocalDeploymentCompose,
applyLocalDeploymentComposeCommandFile,
} from './compose/composeApply';
import {
restoreLocalDeploymentCompose,
restoreLocalDeploymentComposeCommitCommandFile,
restoreLocalDeploymentComposeCommandFile,
restoreLocalDeploymentComposePrepareCommandFile,
} from './compose/composeRestore';
import {
collectLocalDeploymentComposeEvidence,
collectLocalDeploymentComposeEvidenceCommitCommandFile,
collectLocalDeploymentComposeEvidencePrepareCommandFile,
} from './compose/composeEvidenceCollection';
import {
ensurePrivateDirectory,
preflightPublishedFile,
publishExactFile,
} from './foundation/files';
import {
applicationConfiguration,
deploymentPaths,
descriptor,
setupCommand,
} from './foundation/render';
import { executeLocalSetup } from '../lifecycle/localSetup';
import {
inspectLocalDeploymentStatus,
inspectLocalDeploymentStatusCommandFile,
} from './localDeploymentStatus';
import {
stopLegacyDockerForLocalDeployment,
stopLegacyDockerForLocalDeploymentCommandFile,
} from './cutover/legacyStop';
import {
runLocalDeploymentDockerTarget,
runLocalDeploymentDockerTargetCommandFile,
} from './cutover/target-run/targetRun';
import {
runLocalDeploymentCutoverManualCommand,
runLocalDeploymentCutoverManualCommandFile,
} from './cutover/manual-resolution/manualResolution';
import {
stopLocalDeploymentDockerTarget,
stopLocalDeploymentDockerTargetCommandFile,
} from './cutover/targetStop';
import {
runLocalDeploymentLegacyRollback,
runLocalDeploymentLegacyRollbackCommandFile,
} from './cutover/legacyRollback';
import {
proveLocalDeploymentLegacyReadiness,
proveLocalDeploymentLegacyReadinessCommandFile,
} from './cutover/legacy-readiness/probe';
import {
consumeLocalServiceManagerOutcome,
consumeLocalServiceManagerOutcomeCommandFile,
prepareLocalServiceManagerIntent,
prepareLocalServiceManagerIntentCommandFile,
} from './service-manager/serviceManagerIntent';
import {
consumeLocalServiceManagerCutoverOutcome,
consumeLocalServiceManagerCutoverOutcomeCommandFile,
} from './service-manager/serviceCutoverConsumer';
import {
prepareLocalServiceManagerLegacyRollback,
prepareLocalServiceManagerLegacyRollbackCommandFile,
} from './service-manager/legacy-rollback/preparation';
import {
authorizeLocalServiceManagerLegacyRollback,
authorizeLocalServiceManagerLegacyRollbackCommandFile,
consumeLocalServiceManagerLegacyRollback,
consumeLocalServiceManagerLegacyRollbackCommandFile,
} from './service-manager/legacy-rollback/consumer';
import {
prepareLocalReconciliationCapture,
prepareLocalReconciliationCaptureCommandFile,
} from './reconciliation/preparation';
import {
commitLocalReconciliationCapture,
commitLocalReconciliationCaptureCommandFile,
verifyLocalReconciliationCapture,
verifyLocalReconciliationCaptureCommandFile,
} from './reconciliation/bundle';
import {
commitLocalReconciliationPlan,
commitLocalReconciliationPlanCommandFile,
prepareLocalReconciliationPlan,
prepareLocalReconciliationPlanCommandFile,
verifyLocalReconciliationPlan,
verifyLocalReconciliationPlanCommandFile,
} from './reconciliation/planning/preparation';
import {
prepareLocalReconciliationReview,
prepareLocalReconciliationReviewCommandFile,
writeLocalReconciliationReviewDiagnostics,
writeLocalReconciliationReviewDiagnosticsCommandFile,
} from './reconciliation/review/preparation';
import {
commitLocalReconciliationReview,
commitLocalReconciliationReviewCommandFile,
verifyLocalReconciliationReview,
verifyLocalReconciliationReviewCommandFile,
} from './reconciliation/review/completion';
import {
commitLocalReconciliationApplication,
commitLocalReconciliationApplicationCommandFile,
prepareLocalReconciliationApplication,
prepareLocalReconciliationApplicationCommandFile,
verifyLocalReconciliationApplication,
verifyLocalReconciliationApplicationCommandFile,
} from './reconciliation/application/coordinator';
import {
planLocalReconciliationAutomation,
planLocalReconciliationAutomationCommandFile,
verifyLocalReconciliationAutomationPlan,
verifyLocalReconciliationAutomationPlanCommandFile,
} from './reconciliation/application/automation/coordinator';
import {
commitLocalReconciliationAutomationDecision,
commitLocalReconciliationAutomationDecisionCommandFile,
prepareLocalReconciliationAutomationDecision,
prepareLocalReconciliationAutomationDecisionCommandFile,
readLocalReconciliationAutomationDecisionTerminal,
verifyLocalReconciliationAutomationDecision,
verifyLocalReconciliationAutomationDecisionCommandFile,
} from './reconciliation/application/automation/decisionCoordinator';
import {
applyLocalReconciliationAutomation,
applyLocalReconciliationAutomationCommandFile,
rollbackLocalReconciliationAutomationApply,
rollbackLocalReconciliationAutomationApplyCommandFile,
verifyLocalReconciliationAutomationApply,
verifyLocalReconciliationAutomationApplyCommandFile,
} from './reconciliation/application/automation/applyCoordinator';
import {
planLocalReconciliationSecretConfig,
planLocalReconciliationSecretConfigCommandFile,
readLocalReconciliationSecretConfigTerminal,
verifyLocalReconciliationSecretConfigPlan,
verifyLocalReconciliationSecretConfigPlanCommandFile,
} from './reconciliation/application/secret-and-config/coordinator';
import {
commitLocalReconciliationSecretConfigDecision,
commitLocalReconciliationSecretConfigDecisionCommandFile,
prepareLocalReconciliationSecretConfigDecision,
prepareLocalReconciliationSecretConfigDecisionCommandFile,
readLocalReconciliationSecretConfigDecisionTerminal,
verifyLocalReconciliationSecretConfigDecision,
verifyLocalReconciliationSecretConfigDecisionCommandFile,
} from './reconciliation/application/secret-and-config/decisionCoordinator';
import {
applyLocalReconciliationSecretConfig,
applyLocalReconciliationSecretConfigCommandFile,
rollbackLocalReconciliationSecretConfigApply,
rollbackLocalReconciliationSecretConfigApplyCommandFile,
verifyLocalReconciliationSecretConfigApply,
verifyLocalReconciliationSecretConfigApplyCommandFile,
} from './reconciliation/application/secret-and-config/application/coordinator';
import {
preserveLocalReconciliationRunHistory,
preserveLocalReconciliationRunHistoryCommandFile,
readLocalReconciliationRunHistoryTerminal,
verifyLocalReconciliationRunHistory,
verifyLocalReconciliationRunHistoryCommandFile,
} from './reconciliation/application/run-history/coordinator';
import {
completeLocalReconciliation,
completeLocalReconciliationCommandFile,
verifyLocalReconciliationCompletion,
verifyLocalReconciliationCompletionCommandFile,
} from './reconciliation/completion/coordinator';
export {
commitLocalReconciliationPlan,
commitLocalReconciliationPlanCommandFile,
prepareLocalReconciliationPlan,
prepareLocalReconciliationPlanCommandFile,
verifyLocalReconciliationPlan,
verifyLocalReconciliationPlanCommandFile,
prepareLocalReconciliationReview,
prepareLocalReconciliationReviewCommandFile,
writeLocalReconciliationReviewDiagnostics,
writeLocalReconciliationReviewDiagnosticsCommandFile,
commitLocalReconciliationReview,
commitLocalReconciliationReviewCommandFile,
verifyLocalReconciliationReview,
verifyLocalReconciliationReviewCommandFile,
prepareLocalReconciliationApplication,
prepareLocalReconciliationApplicationCommandFile,
commitLocalReconciliationApplication,
commitLocalReconciliationApplicationCommandFile,
verifyLocalReconciliationApplication,
verifyLocalReconciliationApplicationCommandFile,
planLocalReconciliationAutomation,
planLocalReconciliationAutomationCommandFile,
verifyLocalReconciliationAutomationPlan,
verifyLocalReconciliationAutomationPlanCommandFile,
prepareLocalReconciliationAutomationDecision,
prepareLocalReconciliationAutomationDecisionCommandFile,
readLocalReconciliationAutomationDecisionTerminal,
commitLocalReconciliationAutomationDecision,
commitLocalReconciliationAutomationDecisionCommandFile,
verifyLocalReconciliationAutomationDecision,
verifyLocalReconciliationAutomationDecisionCommandFile,
applyLocalReconciliationAutomation,
applyLocalReconciliationAutomationCommandFile,
verifyLocalReconciliationAutomationApply,
verifyLocalReconciliationAutomationApplyCommandFile,
rollbackLocalReconciliationAutomationApply,
rollbackLocalReconciliationAutomationApplyCommandFile,
planLocalReconciliationSecretConfig,
planLocalReconciliationSecretConfigCommandFile,
readLocalReconciliationSecretConfigTerminal,
verifyLocalReconciliationSecretConfigPlan,
verifyLocalReconciliationSecretConfigPlanCommandFile,
prepareLocalReconciliationSecretConfigDecision,
prepareLocalReconciliationSecretConfigDecisionCommandFile,
commitLocalReconciliationSecretConfigDecision,
commitLocalReconciliationSecretConfigDecisionCommandFile,
verifyLocalReconciliationSecretConfigDecision,
verifyLocalReconciliationSecretConfigDecisionCommandFile,
readLocalReconciliationSecretConfigDecisionTerminal,
applyLocalReconciliationSecretConfig,
applyLocalReconciliationSecretConfigCommandFile,
verifyLocalReconciliationSecretConfigApply,
verifyLocalReconciliationSecretConfigApplyCommandFile,
rollbackLocalReconciliationSecretConfigApply,
rollbackLocalReconciliationSecretConfigApplyCommandFile,
preserveLocalReconciliationRunHistory,
preserveLocalReconciliationRunHistoryCommandFile,
readLocalReconciliationRunHistoryTerminal,
verifyLocalReconciliationRunHistory,
verifyLocalReconciliationRunHistoryCommandFile,
completeLocalReconciliation,
completeLocalReconciliationCommandFile,
verifyLocalReconciliationCompletion,
verifyLocalReconciliationCompletionCommandFile,
};
export {
normalizeLocalReconciliationCompleteCommand,
normalizeLocalReconciliationCompletionVerifyCommand,
type LocalReconciliationCompleteCommand,
type LocalReconciliationCompletionAutomationBinding,
type LocalReconciliationCompletionAutomationOptions,
type LocalReconciliationCompletionOptions,
type LocalReconciliationCompletionRunHistoryBinding,
type LocalReconciliationCompletionRunHistoryOptions,
type LocalReconciliationCompletionResult,
type LocalReconciliationCompletionVerifyCommand,
} from './reconciliation/completion/contract';
export { type LocalReconciliationCompletionDependencies } from './reconciliation/completion/coordinator';
export {
normalizeLocalReconciliationCompletionReceipt,
type LocalReconciliationCompletionDomainEvidence,
type LocalReconciliationCompletionReceipt,
} from './reconciliation/completion/evidence';
export {
normalizeLocalReconciliationAutomationApplyCommand,
normalizeLocalReconciliationAutomationApplyRollbackCommand,
normalizeLocalReconciliationAutomationApplyVerifyCommand,
type LocalReconciliationAutomationApplyCommand,
type LocalReconciliationAutomationApplyOptions,
type LocalReconciliationAutomationApplyResult,
type LocalReconciliationAutomationApplyRollbackCommand,
type LocalReconciliationAutomationApplyVerifyCommand,
} from './reconciliation/application/automation/applyContract';
export { type LocalReconciliationAutomationApplyDependencies } from './reconciliation/application/automation/applyCoordinator';
export {
normalizeLocalReconciliationRunHistoryPreserveCommand,
normalizeLocalReconciliationRunHistoryVerifyCommand,
type LocalReconciliationRunHistoryOptions,
type LocalReconciliationRunHistoryPreserveCommand,
type LocalReconciliationRunHistoryResult,
type LocalReconciliationRunHistoryVerifyCommand,
} from './reconciliation/application/run-history/contract';
export {
type LocalReconciliationRunHistoryDependencies,
type LocalReconciliationRunHistoryTerminal,
} from './reconciliation/application/run-history/coordinator';
export {
normalizeLocalReconciliationRunHistoryPreservationReceipt,
type LocalReconciliationRunHistoryPreservationReceipt,
} from './reconciliation/application/run-history/evidence';
export {
normalizeLocalReconciliationApplicationCommitCommand,
normalizeLocalReconciliationApplicationPrepareCommand,
normalizeLocalReconciliationApplicationVerifyCommand,
type LocalReconciliationApplicationCommitCommand,
type LocalReconciliationApplicationOptions,
type LocalReconciliationApplicationPrepareCommand,
type LocalReconciliationApplicationPrepareResult,
type LocalReconciliationApplicationTerminalResult,
type LocalReconciliationApplicationVerifyCommand,
} from './reconciliation/application/contract';
export {
localReconciliationApplicationDirectory,
normalizeLocalReconciliationApplicationIntent,
readLocalReconciliationApplicationIntent,
type LocalReconciliationApplicationDependencies,
type LocalReconciliationApplicationIntent,
} from './reconciliation/application/coordinator';
export {
normalizeLocalReconciliationApplicationPlan,
normalizeLocalReconciliationApplicationPlanReceipt,
type LocalReconciliationApplicationDatabaseDecisionSummary,
type LocalReconciliationApplicationDomainAction,
type LocalReconciliationApplicationDomainSummary,
type LocalReconciliationApplicationPlan,
type LocalReconciliationApplicationPlanReceipt,
} from './reconciliation/application/plan';
export {
normalizeLocalReconciliationAutomationPlanCommand,
normalizeLocalReconciliationAutomationVerifyCommand,
type LocalReconciliationAutomationOptions,
type LocalReconciliationAutomationPlanCommand,
type LocalReconciliationAutomationPlanResult,
type LocalReconciliationAutomationVerifyCommand,
} from './reconciliation/application/automation/contract';
export { type LocalReconciliationAutomationPlanDependencies } from './reconciliation/application/automation/coordinator';
export {
normalizeLocalReconciliationAutomationDecisionCommitCommand,
normalizeLocalReconciliationAutomationDecisionPrepareCommand,
normalizeLocalReconciliationAutomationDecisionVerifyCommand,
type LocalReconciliationAutomationDecisionCommitCommand,
type LocalReconciliationAutomationDecisionCommitOptions,
type LocalReconciliationAutomationDecisionOptions,
type LocalReconciliationAutomationDecisionPrepareCommand,
type LocalReconciliationAutomationDecisionPrepareResult,
type LocalReconciliationAutomationDecisionTerminalResult,
type LocalReconciliationAutomationDecisionVerifyCommand,
} from './reconciliation/application/automation/decisionContract';
export { type LocalReconciliationAutomationDecisionDependencies } from './reconciliation/application/automation/decisionCoordinator';
export {
MAX_EDGE_LOCAL_RECONCILIATION_AUTOMATION_PLAN_BYTES,
MAX_STANDALONE_LOCAL_RECONCILIATION_AUTOMATION_PLAN_BYTES,
normalizeLocalReconciliationAutomationPlanReceipt,
type LocalReconciliationAutomationPlanFooter,
type LocalReconciliationAutomationPlanHeader,
type LocalReconciliationAutomationPlanReceipt,
type LocalReconciliationAutomationPlanRow,
type LocalReconciliationAutomationPlanSummary,
type LocalReconciliationAutomationRowRequirement,
} from './reconciliation/application/automation/rowPlan';
export {
normalizeLocalReconciliationSecretConfigPlanCommand,
normalizeLocalReconciliationSecretConfigVerifyCommand,
type LocalReconciliationSecretConfigOptions,
type LocalReconciliationSecretConfigPlanCommand,
type LocalReconciliationSecretConfigPlanResult,
type LocalReconciliationSecretConfigVerifyCommand,
} from './reconciliation/application/secret-and-config/contract';
export {
type LocalReconciliationSecretConfigPlanDependencies,
type LocalReconciliationSecretConfigTerminal,
} from './reconciliation/application/secret-and-config/coordinator';
export {
normalizeLocalReconciliationSecretConfigDecisionCommitCommand,
normalizeLocalReconciliationSecretConfigDecisionPrepareCommand,
normalizeLocalReconciliationSecretConfigDecisionVerifyCommand,
type LocalReconciliationSecretConfigDecisionCommitCommand,
type LocalReconciliationSecretConfigDecisionCommitOptions,
type LocalReconciliationSecretConfigDecisionOptions,
type LocalReconciliationSecretConfigDecisionPrepareCommand,
type LocalReconciliationSecretConfigDecisionPrepareResult,
type LocalReconciliationSecretConfigDecisionTerminalResult,
type LocalReconciliationSecretConfigDecisionVerifyCommand,
} from './reconciliation/application/secret-and-config/decisionContract';
export {
type LocalReconciliationSecretConfigDecisionDependencies,
type LocalReconciliationSecretConfigDecisionTerminal,
} from './reconciliation/application/secret-and-config/decisionCoordinator';
export {
normalizeLocalReconciliationSecretConfigApplyCommand,
normalizeLocalReconciliationSecretConfigApplyRollbackCommand,
normalizeLocalReconciliationSecretConfigApplyVerifyCommand,
type LocalReconciliationSecretConfigApplyCommand,
type LocalReconciliationSecretConfigApplyOptions,
type LocalReconciliationSecretConfigApplyResult,
type LocalReconciliationSecretConfigApplyRollbackCommand,
type LocalReconciliationSecretConfigApplyVerifyCommand,
} from './reconciliation/application/secret-and-config/application/contract';
export { type LocalReconciliationSecretConfigApplyDependencies } from './reconciliation/application/secret-and-config/application/coordinator';
export {
type LocalReconciliationSecretConfigDecision,
type LocalReconciliationSecretConfigDecisionDisposition,
type LocalReconciliationSecretConfigDecisionReason,
} from './reconciliation/application/secret-and-config/decisionFile';
export {
MAX_EDGE_LOCAL_RECONCILIATION_SECRET_CONFIG_PLAN_BYTES,
MAX_STANDALONE_LOCAL_RECONCILIATION_SECRET_CONFIG_PLAN_BYTES,
normalizeLocalReconciliationSecretConfigPlanReceipt,
type LocalReconciliationSecretConfigCandidateRequirement,
type LocalReconciliationSecretConfigPlanCandidate,
type LocalReconciliationSecretConfigPlanFooter,
type LocalReconciliationSecretConfigPlanHeader,
type LocalReconciliationSecretConfigPlanReceipt,
type LocalReconciliationSecretConfigPlanRow,
type LocalReconciliationSecretConfigPlanSummary,
type LocalReconciliationSecretConfigTarget,
} from './reconciliation/application/secret-and-config/rowPlan';
export {
LocalDeploymentConfigurationError,
normalizeLocalDeploymentComposeApplyCommand,
normalizeLocalDeploymentComposeEvidenceCollectionCommand,
normalizeLocalDeploymentComposePreflightCommand,
normalizeLocalDeploymentComposeRestoreCommand,
normalizeLocalDeploymentComposeRevisionCommand,
normalizeLocalDeploymentPrepareCommand,
normalizeLocalDeploymentStatusCommand,
type LocalDeploymentComposeApplyCommand,
type LocalDeploymentComposeApplyResult,
type LocalDeploymentComposeEvidenceCollectionCommand,
type LocalDeploymentComposeEvidenceCollectionCommitCommand,
type LocalDeploymentComposeEvidenceCollectionPrepareCommand,
type LocalDeploymentComposeEvidenceCollectionResult,
type LocalDeploymentComposePreflightCommand,
type LocalDeploymentComposePreflightResult,
type LocalDeploymentComposeRestoreCommand,
type LocalDeploymentComposeRestoreCommitCommand,
type LocalDeploymentComposeRestorePrepareCommand,
type LocalDeploymentComposeRestoreResult,
type LocalDeploymentComposeRevisionCommand,
type LocalDeploymentComposeRevisionResult,
type LocalDeploymentPrepareCommand,
type LocalDeploymentPrepareResult,
type LocalDeploymentStatusCommand,
type LocalDeploymentStatusResult,
} from './foundation/contract';
export {
normalizeLocalReconciliationCapturePrepareCommand,
normalizeLocalReconciliationCaptureCommitCommand,
normalizeLocalReconciliationCaptureVerifyCommand,
type LocalReconciliationCaptureCommitCommand,
type LocalReconciliationCapturePrepareCommand,
type LocalReconciliationCapturePrepareResult,
type LocalReconciliationCaptureTerminalResult,
type LocalReconciliationCaptureVerifyCommand,
type LocalReconciliationStoppedAuthority,
} from './reconciliation/contract';
export {
LOCAL_RECONCILIATION_DIAGNOSTIC_FACT_KINDS,
normalizeLocalReconciliationReviewDiagnosticsCommand,
normalizeLocalReconciliationReviewPrepareCommand,
type LocalReconciliationDiagnosticFactKind,
type LocalReconciliationReviewDiagnosticsCommand,
type LocalReconciliationReviewDiagnosticsResult,
type LocalReconciliationReviewOptions,
type LocalReconciliationReviewPrepareCommand,
type LocalReconciliationReviewPrepareResult,
} from './reconciliation/review/contract';
export {
MAX_LOCAL_RECONCILIATION_REVIEW_AUTHORIZATION_LIFETIME_MS,
normalizeLocalReconciliationReviewCommitCommand,
normalizeLocalReconciliationReviewVerifyCommand,
type LocalReconciliationReviewCommitCommand,
type LocalReconciliationReviewCommitOptions,
type LocalReconciliationReviewTerminalResult,
type LocalReconciliationReviewVerifyCommand,
} from './reconciliation/review/completionContract';
export { type LocalReconciliationReviewCompletionDependencies } from './reconciliation/review/completion';
export {
LOCAL_RECONCILIATION_REVIEW_DISPOSITIONS,
LOCAL_RECONCILIATION_REVIEW_REASONS,
MAX_EDGE_LOCAL_RECONCILIATION_REVIEW_DECISION_BYTES,
MAX_STANDALONE_LOCAL_RECONCILIATION_REVIEW_DECISION_BYTES,
type LocalReconciliationReviewDecision,
type LocalReconciliationReviewDecisionHeader,
type LocalReconciliationReviewDisposition,
type LocalReconciliationReviewReason,
} from './reconciliation/review/decisionFile';
export {
MAX_LOCAL_RECONCILIATION_REVIEW_ISSUER_KEYS,
LocalReconciliationReviewIssuerKeyringFileProvider,
ensureLocalReconciliationReviewIssuerKeyring,
type LocalReconciliationReviewIssuerKeyringSummary,
} from './reconciliation/review/issuerKeyring';
export {
normalizeLocalReconciliationReview,
normalizeLocalReconciliationReviewReceipt,
type LocalReconciliationReview,
type LocalReconciliationReviewReceipt,
} from './reconciliation/review/terminalEvidence';
export {
localReconciliationReviewDirectory,
normalizeLocalReconciliationReviewIntent,
readLocalReconciliationReviewIntent,
type LocalReconciliationReviewDependencies,
type LocalReconciliationReviewIntent,
} from './reconciliation/review/preparation';
export {
type LocalReconciliationDiagnosticDecisionRequirement,
type LocalReconciliationDiagnosticFact,
type LocalReconciliationDiagnosticPage,
type LocalReconciliationDiagnosticReason,
} from './reconciliation/review/diagnostics';
export {
LOCAL_RECONCILIATION_PLAN_DOMAINS,
normalizeLocalReconciliationPlanCommitCommand,
normalizeLocalReconciliationPlanPrepareCommand,
normalizeLocalReconciliationPlanVerifyCommand,
type LocalReconciliationPlanCommitCommand,
type LocalReconciliationPlanDisposition,
type LocalReconciliationPlanDomain,
type LocalReconciliationPlanPrepareCommand,
type LocalReconciliationPlanPrepareResult,
type LocalReconciliationPlanTerminalResult,
type LocalReconciliationPlanVerifyCommand,
} from './reconciliation/planning/contract';
export {
localReconciliationPlanDirectory,
normalizeLocalReconciliationPlanIntent,
readLocalReconciliationPlanIntent,
type LocalReconciliationPlanDependencies,
type LocalReconciliationPlanIntent,
} from './reconciliation/planning/preparation';
export {
normalizeLocalReconciliationPlan,
normalizeLocalReconciliationPlanReceipt,
type LocalReconciliationPlan,
type LocalReconciliationPlanDatabaseSummary,
type LocalReconciliationPlanDomainSummary,
type LocalReconciliationPlanReceipt,
} from './reconciliation/planning/plan';
export {
localReconciliationCaptureDirectory,
localReconciliationCaptureIntentPath,
normalizeLocalReconciliationCaptureIntent,
readLocalReconciliationCaptureIntent,
type LocalReconciliationCaptureIntent,
} from './reconciliation/preparation';
export {
normalizeLocalReconciliationCaptureManifest,
normalizeLocalReconciliationCaptureReceipt,
type LocalReconciliationCaptureDependencies,
type LocalReconciliationCaptureManifest,
type LocalReconciliationCaptureReceipt,
} from './reconciliation/bundle';
export {
prepareLocalDeploymentAdoptedBundle,
runLocalDeploymentAdoptedBundleCommandFile,
verifyLocalDeploymentAdoptedBundle,
type LocalDeploymentAdoptedBundleResult,
} from './adopted-bundle/adoptedBundle';
export {
normalizeLocalDeploymentAdoptedBundleCommand,
type LocalDeploymentAdoptedBundleCommand,
type LocalDeploymentAdoptedBundleOperation,
} from './adopted-bundle/contract';
export {
type LocalComposeReleaseAuthority,
type LocalComposeReleaseSelectionInput,
} from './compose/releaseSelection';
export {
normalizeLocalDeploymentLegacyStopCommand,
type LocalDeploymentLegacyStopCommand,
type LocalDeploymentLegacyStopResult,
} from './cutover/contract';
export {
normalizeLocalDeploymentTargetRunCommand,
type LocalDeploymentTargetRunCommand,
type LocalDeploymentTargetRunOperation,
type LocalDeploymentTargetRunResult,
} from './cutover/target-run/targetRunContract';
export {
normalizeLocalDeploymentTargetStopCommand,
type LocalDeploymentTargetReconciliationDisposition,
type LocalDeploymentTargetStopCommand,
type LocalDeploymentTargetStopResult,
} from './cutover/targetStopContract';
export { type LocalDeploymentTargetStopDependencies } from './cutover/targetStop';
export {
EMPTY_ROLLBACK_PREPARATION_DIGEST,
normalizeLocalDeploymentLegacyRollbackCommand,
type LocalDeploymentLegacyRollbackCommand,
type LocalDeploymentLegacyRollbackOperation,
type LocalDeploymentLegacyRollbackResult,
} from './cutover/legacyRollbackContract';
export { type LocalDeploymentLegacyRollbackDependencies } from './cutover/legacyRollback';
export {
normalizeLocalDeploymentLegacyReadinessCommand,
type LocalDeploymentLegacyReadinessCommand,
} from './cutover/legacy-readiness/contract';
export {
type LocalDeploymentLegacyReadinessDependencies,
type LocalDeploymentLegacyReadinessResult,
type LocalLegacyReadinessObservation,
type LocalLegacyReadinessProbeInput,
type LocalLegacyReadinessReason,
} from './cutover/legacy-readiness/probe';
export {
EMPTY_RESOLUTION_DIGEST,
normalizeLocalDeploymentCutoverManualCommand,
type LocalDeploymentCutoverManualCommand,
type LocalDeploymentCutoverManualOperation,
} from './cutover/manual-resolution/manualResolutionContract';
export {
type LocalDeploymentCutoverManualDependencies,
type LocalDeploymentCutoverManualResult,
type LocalDeploymentCutoverObservationState,
} from './cutover/manual-resolution/manualResolution';
export {
applyLocalDeploymentCompose,
applyLocalDeploymentComposeCommandFile,
collectLocalDeploymentComposeEvidence,
collectLocalDeploymentComposeEvidenceCommitCommandFile,
collectLocalDeploymentComposeEvidencePrepareCommandFile,
inspectLocalDeploymentStatus,
inspectLocalDeploymentStatusCommandFile,
preflightLocalDeploymentCompose,
preflightLocalDeploymentComposeCommandFile,
restoreLocalDeploymentCompose,
restoreLocalDeploymentComposeCommitCommandFile,
restoreLocalDeploymentComposeCommandFile,
restoreLocalDeploymentComposePrepareCommandFile,
runLocalDeploymentCutoverManualCommand,
runLocalDeploymentCutoverManualCommandFile,
runLocalDeploymentLegacyRollback,
runLocalDeploymentLegacyRollbackCommandFile,
proveLocalDeploymentLegacyReadiness,
proveLocalDeploymentLegacyReadinessCommandFile,
runLocalDeploymentDockerTarget,
runLocalDeploymentDockerTargetCommandFile,
switchLocalDeploymentComposeRevision,
switchLocalDeploymentComposeRevisionCommandFile,
stopLegacyDockerForLocalDeployment,
stopLegacyDockerForLocalDeploymentCommandFile,
stopLocalDeploymentDockerTarget,
stopLocalDeploymentDockerTargetCommandFile,
consumeLocalServiceManagerOutcome,
consumeLocalServiceManagerOutcomeCommandFile,
consumeLocalServiceManagerCutoverOutcome,
consumeLocalServiceManagerCutoverOutcomeCommandFile,
prepareLocalServiceManagerIntent,
prepareLocalServiceManagerIntentCommandFile,
prepareLocalServiceManagerLegacyRollback,
prepareLocalServiceManagerLegacyRollbackCommandFile,
authorizeLocalServiceManagerLegacyRollback,
authorizeLocalServiceManagerLegacyRollbackCommandFile,
consumeLocalServiceManagerLegacyRollback,
consumeLocalServiceManagerLegacyRollbackCommandFile,
prepareLocalReconciliationCapture,
prepareLocalReconciliationCaptureCommandFile,
commitLocalReconciliationCapture,
commitLocalReconciliationCaptureCommandFile,
verifyLocalReconciliationCapture,
verifyLocalReconciliationCaptureCommandFile,
};
export {
localServiceManagerIntentDigest,
normalizeLocalServiceBridgeCommand,
normalizeLocalServiceManagerIntent,
type LocalServiceBridgeCommand,
type LocalServiceManagerIntent,
} from './service-manager/serviceBridgeContract';
export {
normalizeLocalServiceManagerOutcome,
type LocalServiceManagerOutcome,
} from './service-manager/serviceOutcomeContract';
export {
type LocalServiceManagerIntentPrepareCommand,
type LocalServiceManagerIntentPrepareResult,
type LocalServiceManagerOutcomeConsumeCommand,
type LocalServiceManagerOutcomeConsumeResult,
} from './service-manager/serviceManagerIntent';
export {
type LocalServiceManagerCutoverConsumeCommand,
type LocalServiceManagerCutoverConsumeResult,
type LocalServiceManagerCutoverDependencies,
} from './service-manager/serviceCutoverConsumer';
export {
type LocalServiceManagerCutoverEvidence,
type LocalServiceManagerCutoverRecord,
type LocalServiceManagerCutoverState,
} from './service-manager/serviceCutoverJournal';
export {
localServiceManagerLegacyRollbackPreparationPath,
normalizeLocalServiceManagerLegacyRollbackPreparation,
type LocalServiceManagerLegacyRollbackPreparation,
type LocalServiceManagerLegacyRollbackPrepareCommand,
type LocalServiceManagerLegacyRollbackPrepareResult,
} from './service-manager/legacy-rollback/preparation';
export {
normalizeLocalServiceManagerLegacyRollbackCompletion,
type LocalServiceManagerLegacyRollbackAuthorizeCommand,
type LocalServiceManagerLegacyRollbackAuthorizeResult,
type LocalServiceManagerLegacyRollbackCompletion,
type LocalServiceManagerLegacyRollbackConsumeCommand,
type LocalServiceManagerLegacyRollbackConsumeResult,
} from './service-manager/legacy-rollback/consumer';
export {
localServiceManagerLegacyCompletionPath,
localServiceManagerLegacyDescriptorPath,
localServiceManagerLegacyStartAuthorizationPath,
localServiceManagerLegacyStartOutcomePath,
localServiceManagerTargetDescriptorPath,
normalizeLocalServiceManagerLegacyRollbackBridgeCommand,
normalizeLocalServiceManagerLegacyStartAuthorization,
normalizeLocalServiceManagerLegacyStartOutcome,
type LocalServiceManagerLegacyRollbackBridgeCommand,
type LocalServiceManagerLegacyRollbackBridgeResult,
type LocalServiceManagerLegacyStartAuthorization,
type LocalServiceManagerLegacyStartOutcome,
} from './service-manager/legacy-rollback/contract';
export async function prepareLocalDeployment(
input: unknown,
): Promise<Readonly<LocalDeploymentPrepareResult>> {
const command = normalizeLocalDeploymentPrepareCommand(input);
const identity = currentIdentity();
const paths = deploymentPaths(command.options.deploymentRoot);
const directories = [
[command.options.deploymentRoot, 'deploymentRoot'],
[paths.ownerPepperKeyring, 'ownerPepperKeyringDirectory'],
[paths.ownerPepperBackup, 'ownerPepperBackupDirectory'],
[paths.receipts, 'receiptRoot'],
[paths.artifacts, 'artifactRoot'],
[paths.pluginStaging, 'pluginStagingRoot'],
[paths.pluginActivation, 'pluginActivationRoot'],
[paths.service, 'serviceDescriptorRoot'],
...(command.options.service.kind === 'compose'
? ([
[paths.composeRevisions, 'composeRevisionRoot'],
[paths.composeRollouts, 'composeRolloutRoot'],
[paths.composeRolloutBackups, 'composeRolloutBackupRoot'],
[paths.composeRestores, 'composeRestoreRoot'],
[paths.composeRestoreSafeguards, 'composeRestoreSafeguardRoot'],
[paths.composeEvidenceCollections, 'composeEvidenceCollectionRoot'],
[paths.composeCollectedEvidence, 'composeCollectedEvidenceRoot'],
[
paths.composeCollectedRolloutBackups,
'composeCollectedRolloutBackupRoot',
],
[
paths.composeCollectedRestoreSafeguards,
'composeCollectedRestoreSafeguardRoot',
],
] as const)
: []),
] as const;
const directoryStatuses = directories.map(([directory, label]) =>
ensurePrivateDirectory(directory, identity.uid, label),
);
const applicationConfig = applicationConfiguration(command, paths);
const serviceDescriptor = descriptor(
command,
paths.applicationConfig,
identity.uid,
identity.gid,
);
const descriptorPath = path.join(paths.service, serviceDescriptor.fileName);
const composeSelection =
command.options.service.kind === 'compose'
? initialComposeImageSelection(command)
: undefined;
preflightPublishedFile(
paths.applicationConfig,
applicationConfig,
0o600,
identity.uid,
'application configuration',
);
preflightPublishedFile(
descriptorPath,
serviceDescriptor.contents,
serviceDescriptor.mode,
identity.uid,
'service descriptor',
);
if (composeSelection !== undefined) {
preflightPublishedFile(
path.join(paths.composeRevisions, '1.yaml'),
composeSelection,
0o600,
identity.uid,
'initial compose revision',
);
preflightActiveComposeImageSelection(
paths.composeSelection,
paths.composeRevisions,
composeSelection,
identity.uid,
);
}
const setup = await executeLocalSetup(setupCommand(command, paths));
const applicationStatus = publishExactFile(
paths.applicationConfig,
applicationConfig,
0o600,
identity.uid,
'application configuration',
);
const serviceStatus = publishExactFile(
descriptorPath,
serviceDescriptor.contents,
serviceDescriptor.mode,
identity.uid,
'service descriptor',
);
const composeRevisionStatus =
composeSelection === undefined
? 'existing'
: publishExactFile(
path.join(paths.composeRevisions, '1.yaml'),
composeSelection,
0o600,
identity.uid,
'initial compose revision',
);
const composeSelectionStatus =
composeSelection === undefined
? 'existing'
: preflightActiveComposeImageSelection(
paths.composeSelection,
paths.composeRevisions,
composeSelection,
identity.uid,
) === 'existing'
? 'existing'
: publishExactFile(
paths.composeSelection,
composeSelection,
0o600,
identity.uid,
'active compose selection',
);
const createdDirectories = directoryStatuses.filter(
(status) => status === 'prepared',
).length;
const prepared =
createdDirectories > 0 ||
setup.status === 'prepared' ||
applicationStatus === 'prepared' ||
serviceStatus === 'prepared';
const deploymentPrepared =
prepared ||
composeSelectionStatus === 'prepared' ||
composeRevisionStatus === 'prepared';
return Object.freeze({
schemaVersion: 1 as const,
status: deploymentPrepared ? ('prepared' as const) : ('existing' as const),
profile: command.options.profile,
service: Object.freeze({
kind: command.options.service.kind,
status: serviceStatus,
}),
applicationConfiguration: Object.freeze({
schema: 'qinglong/local-application-process@v2' as const,
status: applicationStatus,
}),
directories: Object.freeze({
created: createdDirectories,
existing: directoryStatuses.length - createdDirectories,
}),
setup,
});
}
export function prepareLocalDeploymentCommandFile(
filePath: string,
): Promise<Readonly<LocalDeploymentPrepareResult>> {
return prepareLocalDeployment(readPrivateLocalCommandFile(filePath));
}