@msn-control/liftoff 0.11.3 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DEVELOPER.md +26 -35
- package/README.md +18 -18
- package/assets/governance/single-maintainer-gitflow/activation-v2-graph.json +1583 -0
- package/dist/adapters/credentials/github-enrollment.d.ts +51 -0
- package/dist/adapters/credentials/github-enrollment.js +226 -0
- package/dist/adapters/credentials/github-enrollment.js.map +1 -0
- package/dist/adapters/credentials/protected-input.d.ts +7 -0
- package/dist/adapters/credentials/protected-input.js +68 -0
- package/dist/adapters/credentials/protected-input.js.map +1 -0
- package/dist/adapters/filesystem/executables.d.ts +2 -0
- package/dist/adapters/filesystem/executables.js +70 -0
- package/dist/adapters/filesystem/executables.js.map +1 -0
- package/dist/adapters/filesystem/update-previews.d.ts +9 -0
- package/dist/adapters/filesystem/update-previews.js +44 -0
- package/dist/adapters/filesystem/update-previews.js.map +1 -1
- package/dist/adapters/filesystem/workstation-attempts.d.ts +13 -0
- package/dist/adapters/filesystem/workstation-attempts.js +78 -0
- package/dist/adapters/filesystem/workstation-attempts.js.map +1 -0
- package/dist/adapters/github/activation-rest.d.ts +40 -0
- package/dist/adapters/github/activation-rest.js +272 -0
- package/dist/adapters/github/activation-rest.js.map +1 -0
- package/dist/adapters/state/azure-blob.d.ts +43 -0
- package/dist/adapters/state/azure-blob.js +335 -0
- package/dist/adapters/state/azure-blob.js.map +1 -0
- package/dist/adapters/state/darwin-capabilities.d.ts +33 -0
- package/dist/adapters/state/darwin-capabilities.js +146 -0
- package/dist/adapters/state/darwin-capabilities.js.map +1 -0
- package/dist/adapters/state/darwin-native-host.d.ts +32 -0
- package/dist/adapters/state/darwin-native-host.js +294 -0
- package/dist/adapters/state/darwin-native-host.js.map +1 -0
- package/dist/adapters/state/darwin-profile.d.ts +6 -0
- package/dist/adapters/state/darwin-profile.js +56 -0
- package/dist/adapters/state/darwin-profile.js.map +1 -0
- package/dist/adapters/state/darwin-system-program.d.ts +1 -0
- package/dist/adapters/state/darwin-system-program.js +94 -0
- package/dist/adapters/state/darwin-system-program.js.map +1 -0
- package/dist/adapters/state/local-qualification.d.ts +16 -0
- package/dist/adapters/state/local-qualification.js +299 -0
- package/dist/adapters/state/local-qualification.js.map +1 -0
- package/dist/adapters/state/local.d.ts +25 -0
- package/dist/adapters/state/local.js +145 -0
- package/dist/adapters/state/local.js.map +1 -0
- package/dist/adapters/state/native-command.d.ts +21 -0
- package/dist/adapters/state/native-command.js +82 -0
- package/dist/adapters/state/native-command.js.map +1 -0
- package/dist/adapters/state/native-files.d.ts +2 -0
- package/dist/adapters/state/native-files.js +47 -0
- package/dist/adapters/state/native-files.js.map +1 -0
- package/dist/adapters/state/native-system.d.ts +38 -0
- package/dist/adapters/state/native-system.js +86 -0
- package/dist/adapters/state/native-system.js.map +1 -0
- package/dist/adapters/state/opentofu.d.ts +35 -0
- package/dist/adapters/state/opentofu.js +350 -0
- package/dist/adapters/state/opentofu.js.map +1 -0
- package/dist/adapters/state/owned-process.d.ts +43 -0
- package/dist/adapters/state/owned-process.js +252 -0
- package/dist/adapters/state/owned-process.js.map +1 -0
- package/dist/adapters/state/posix-lock-program.d.ts +1 -0
- package/dist/adapters/state/posix-lock-program.js +185 -0
- package/dist/adapters/state/posix-lock-program.js.map +1 -0
- package/dist/adapters/state/posix-native-lock.d.ts +15 -0
- package/dist/adapters/state/posix-native-lock.js +145 -0
- package/dist/adapters/state/posix-native-lock.js.map +1 -0
- package/dist/adapters/state/protected-workspace.d.ts +57 -0
- package/dist/adapters/state/protected-workspace.js +412 -0
- package/dist/adapters/state/protected-workspace.js.map +1 -0
- package/dist/application/context.d.ts +3 -0
- package/dist/application/diagnose/doctor.d.ts +5 -0
- package/dist/application/diagnose/doctor.js +21 -5
- package/dist/application/diagnose/doctor.js.map +1 -1
- package/dist/application/diagnose/generated-project.js +2 -7
- package/dist/application/diagnose/generated-project.js.map +1 -1
- package/dist/application/initialize/fixture.js +8 -1
- package/dist/application/initialize/fixture.js.map +1 -1
- package/dist/application/initialize/use-case.js +70 -36
- package/dist/application/initialize/use-case.js.map +1 -1
- package/dist/application/project/manifest.js +5 -4
- package/dist/application/project/manifest.js.map +1 -1
- package/dist/application/state-migration/execution.d.ts +32 -0
- package/dist/application/state-migration/execution.js +440 -0
- package/dist/application/state-migration/execution.js.map +1 -0
- package/dist/application/state-migration/index.d.ts +22 -0
- package/dist/application/state-migration/index.js +17 -0
- package/dist/application/state-migration/index.js.map +1 -0
- package/dist/application/state-migration/lifecycle.d.ts +3 -0
- package/dist/application/state-migration/lifecycle.js +149 -0
- package/dist/application/state-migration/lifecycle.js.map +1 -0
- package/dist/application/state-migration/planning.d.ts +7 -0
- package/dist/application/state-migration/planning.js +150 -0
- package/dist/application/state-migration/planning.js.map +1 -0
- package/dist/application/state-migration/recovery.d.ts +5 -0
- package/dist/application/state-migration/recovery.js +145 -0
- package/dist/application/state-migration/recovery.js.map +1 -0
- package/dist/application/state-migration/runtime.d.ts +32 -0
- package/dist/application/state-migration/runtime.js +188 -0
- package/dist/application/state-migration/runtime.js.map +1 -0
- package/dist/application/state-migration/service.d.ts +2 -0
- package/dist/application/state-migration/service.js +20 -0
- package/dist/application/state-migration/service.js.map +1 -0
- package/dist/application/update/inspection.d.ts +16 -2
- package/dist/application/update/inspection.js +76 -23
- package/dist/application/update/inspection.js.map +1 -1
- package/dist/application/update/migration-runtime.js +24 -11
- package/dist/application/update/migration-runtime.js.map +1 -1
- package/dist/application/update/output.d.ts +2 -0
- package/dist/application/update/output.js +11 -1
- package/dist/application/update/output.js.map +1 -1
- package/dist/application/update/revalidation-plan.d.ts +1 -0
- package/dist/application/update/revalidation-plan.js +25 -12
- package/dist/application/update/revalidation-plan.js.map +1 -1
- package/dist/application/update/revalidation.d.ts +4 -1
- package/dist/application/update/revalidation.js +62 -21
- package/dist/application/update/revalidation.js.map +1 -1
- package/dist/application/update/use-case.js +25 -17
- package/dist/application/update/use-case.js.map +1 -1
- package/dist/application/upgrade/use-case.js +3 -0
- package/dist/application/upgrade/use-case.js.map +1 -1
- package/dist/cli/args/definitions.js +11 -3
- package/dist/cli/args/definitions.js.map +1 -1
- package/dist/cli/args/parser.js +29 -3
- package/dist/cli/args/parser.js.map +1 -1
- package/dist/domain/governance/activation/approvals.d.ts +264 -7
- package/dist/domain/governance/activation/approvals.js +166 -23
- package/dist/domain/governance/activation/approvals.js.map +1 -1
- package/dist/domain/governance/activation/capabilities.js +5 -2
- package/dist/domain/governance/activation/capabilities.js.map +1 -1
- package/dist/domain/governance/activation/evidence.d.ts +2 -1
- package/dist/domain/governance/activation/evidence.js +64 -11
- package/dist/domain/governance/activation/evidence.js.map +1 -1
- package/dist/domain/governance/activation/graph.d.ts +11 -384
- package/dist/domain/governance/activation/graph.js +424 -379
- package/dist/domain/governance/activation/graph.js.map +1 -1
- package/dist/domain/governance/activation/inputs.d.ts +3 -1
- package/dist/domain/governance/activation/inputs.js +47 -6
- package/dist/domain/governance/activation/inputs.js.map +1 -1
- package/dist/domain/governance/activation/operations.d.ts +4 -1
- package/dist/domain/governance/activation/operations.js +110 -22
- package/dist/domain/governance/activation/operations.js.map +1 -1
- package/dist/domain/governance/activation/readiness.d.ts +10 -0
- package/dist/domain/governance/activation/readiness.js +77 -38
- package/dist/domain/governance/activation/readiness.js.map +1 -1
- package/dist/domain/governance/activation/types.d.ts +151 -9
- package/dist/domain/governance/activation/types.js +23 -1
- package/dist/domain/governance/activation/types.js.map +1 -1
- package/dist/domain/governance/activation/validators.d.ts +4 -1
- package/dist/domain/governance/activation/validators.js +419 -26
- package/dist/domain/governance/activation/validators.js.map +1 -1
- package/dist/domain/governance/policy/identity.d.ts +55 -13
- package/dist/domain/governance/policy/identity.js +28 -8
- package/dist/domain/governance/policy/identity.js.map +1 -1
- package/dist/domain/project/artifact-lifecycle.d.ts +2 -1
- package/dist/domain/project/artifact-lifecycle.js +7 -1
- package/dist/domain/project/artifact-lifecycle.js.map +1 -1
- package/dist/domain/project/catalog.d.ts +50 -1
- package/dist/domain/project/catalog.js +104 -4
- package/dist/domain/project/catalog.js.map +1 -1
- package/dist/domain/project/contracts.d.ts +9 -1
- package/dist/domain/project/infrastructure-layout.d.ts +1 -1
- package/dist/domain/project/infrastructure-layout.js +3 -1
- package/dist/domain/project/infrastructure-layout.js.map +1 -1
- package/dist/domain/project/manifest/governance.d.ts +1 -1
- package/dist/domain/project/manifest/governance.js +9 -10
- package/dist/domain/project/manifest/governance.js.map +1 -1
- package/dist/domain/project/planning.js +4 -5
- package/dist/domain/project/planning.js.map +1 -1
- package/dist/domain/repair/stateful-bounded.d.ts +1 -0
- package/dist/domain/repair/stateful-bounded.js +37 -0
- package/dist/domain/repair/stateful-bounded.js.map +1 -0
- package/dist/domain/repair/stateful-invariants.d.ts +28 -0
- package/dist/domain/repair/stateful-invariants.js +278 -0
- package/dist/domain/repair/stateful-invariants.js.map +1 -0
- package/dist/domain/repair/stateful.d.ts +690 -0
- package/dist/domain/repair/stateful.js +26 -0
- package/dist/domain/repair/stateful.js.map +1 -0
- package/dist/domain/workstation/constraints.d.ts +1 -0
- package/dist/domain/workstation/constraints.js.map +1 -1
- package/dist/domain/workstation/contracts.d.ts +42 -0
- package/dist/domain/workstation/contracts.js +2 -0
- package/dist/domain/workstation/contracts.js.map +1 -0
- package/dist/domain/workstation/executables.d.ts +19 -0
- package/dist/domain/workstation/executables.js +68 -0
- package/dist/domain/workstation/executables.js.map +1 -0
- package/dist/domain/workstation/versions.d.ts +8 -0
- package/dist/domain/workstation/versions.js +145 -0
- package/dist/domain/workstation/versions.js.map +1 -0
- package/dist/framework-adapters.d.ts +2 -0
- package/dist/framework-adapters.js +148 -22
- package/dist/framework-adapters.js.map +1 -1
- package/dist/framework-validation.d.ts +6 -0
- package/dist/framework-validation.js +89 -24
- package/dist/framework-validation.js.map +1 -1
- package/dist/generators/common/base.js +57 -17
- package/dist/generators/common/base.js.map +1 -1
- package/dist/governance-activation/activation-state.js +39 -7
- package/dist/governance-activation/activation-state.js.map +1 -1
- package/dist/governance-activation/authority-records.d.ts +4 -0
- package/dist/governance-activation/authority-records.js +24 -0
- package/dist/governance-activation/authority-records.js.map +1 -0
- package/dist/governance-activation/commands.d.ts +9 -1
- package/dist/governance-activation/commands.js +392 -97
- package/dist/governance-activation/commands.js.map +1 -1
- package/dist/governance-activation/compatibility.d.ts +11 -8
- package/dist/governance-activation/compatibility.js +37 -23
- package/dist/governance-activation/compatibility.js.map +1 -1
- package/dist/governance-activation/doctor.js +40 -16
- package/dist/governance-activation/doctor.js.map +1 -1
- package/dist/governance-activation/github-config.d.ts +17 -0
- package/dist/governance-activation/github-config.js +88 -0
- package/dist/governance-activation/github-config.js.map +1 -0
- package/dist/governance-activation/github-discovery.d.ts +18 -0
- package/dist/governance-activation/github-discovery.js +229 -0
- package/dist/governance-activation/github-discovery.js.map +1 -0
- package/dist/governance-activation/github-ports.d.ts +12 -0
- package/dist/governance-activation/github-ports.js +4 -0
- package/dist/governance-activation/github-ports.js.map +1 -0
- package/dist/governance-activation/github-publication.d.ts +3 -0
- package/dist/governance-activation/github-publication.js +190 -0
- package/dist/governance-activation/github-publication.js.map +1 -0
- package/dist/governance-activation/historical-common.d.ts +98 -0
- package/dist/governance-activation/historical-common.js +269 -0
- package/dist/governance-activation/historical-common.js.map +1 -0
- package/dist/governance-activation/historical-credential-policy.d.ts +3 -0
- package/dist/governance-activation/historical-credential-policy.js +91 -0
- package/dist/governance-activation/historical-credential-policy.js.map +1 -0
- package/dist/governance-activation/historical-inputs.d.ts +6 -0
- package/dist/governance-activation/historical-inputs.js +57 -0
- package/dist/governance-activation/historical-inputs.js.map +1 -0
- package/dist/governance-activation/historical-safety.d.ts +9 -0
- package/dist/governance-activation/historical-safety.js +102 -0
- package/dist/governance-activation/historical-safety.js.map +1 -0
- package/dist/governance-activation/historical-source-metadata.d.ts +31 -0
- package/dist/governance-activation/historical-source-metadata.js +55 -0
- package/dist/governance-activation/historical-source-metadata.js.map +1 -0
- package/dist/governance-activation/historical-state.d.ts +12 -50
- package/dist/governance-activation/historical-state.js +195 -308
- package/dist/governance-activation/historical-state.js.map +1 -1
- package/dist/governance-activation/historical-v1-auxiliary.d.ts +1 -0
- package/dist/governance-activation/historical-v1-auxiliary.js +43 -0
- package/dist/governance-activation/historical-v1-auxiliary.js.map +1 -0
- package/dist/governance-activation/historical-v1-phase-contracts.d.ts +31 -0
- package/dist/governance-activation/historical-v1-phase-contracts.js +46 -0
- package/dist/governance-activation/historical-v1-phase-contracts.js.map +1 -0
- package/dist/governance-activation/historical-v2.d.ts +53 -0
- package/dist/governance-activation/historical-v2.js +313 -0
- package/dist/governance-activation/historical-v2.js.map +1 -0
- package/dist/governance-activation/history-contracts.d.ts +21 -12
- package/dist/governance-activation/history-contracts.js +99 -27
- package/dist/governance-activation/history-contracts.js.map +1 -1
- package/dist/governance-activation/inputs.d.ts +8 -2
- package/dist/governance-activation/inputs.js +41 -6
- package/dist/governance-activation/inputs.js.map +1 -1
- package/dist/governance-activation/migration-history.d.ts +43 -5
- package/dist/governance-activation/migration-history.js +231 -50
- package/dist/governance-activation/migration-history.js.map +1 -1
- package/dist/governance-activation/migration.d.ts +7 -4
- package/dist/governance-activation/migration.js +53 -252
- package/dist/governance-activation/migration.js.map +1 -1
- package/dist/governance-activation/phase-azure.d.ts +3 -0
- package/dist/governance-activation/phase-azure.js +205 -0
- package/dist/governance-activation/phase-azure.js.map +1 -0
- package/dist/governance-activation/phase-bootstrap-state.js +3 -0
- package/dist/governance-activation/phase-bootstrap-state.js.map +1 -1
- package/dist/governance-activation/phase-github.d.ts +3 -0
- package/dist/governance-activation/phase-github.js +192 -0
- package/dist/governance-activation/phase-github.js.map +1 -0
- package/dist/governance-activation/phase-governance.js +8 -2
- package/dist/governance-activation/phase-governance.js.map +1 -1
- package/dist/governance-activation/public-plans.d.ts +36 -0
- package/dist/governance-activation/public-plans.js +100 -0
- package/dist/governance-activation/public-plans.js.map +1 -0
- package/dist/governance-activation/read-only.d.ts +3 -1
- package/dist/governance-activation/read-only.js +7 -3
- package/dist/governance-activation/read-only.js.map +1 -1
- package/dist/governance-activation/reconciliation.js +10 -0
- package/dist/governance-activation/reconciliation.js.map +1 -1
- package/dist/governance-activation/seed-lifecycle.js +14 -25
- package/dist/governance-activation/seed-lifecycle.js.map +1 -1
- package/dist/governance-activation/source-of-truth.d.ts +21 -5
- package/dist/governance-activation/source-of-truth.js +102 -13
- package/dist/governance-activation/source-of-truth.js.map +1 -1
- package/dist/governance-activation/task-projection.d.ts +4 -1
- package/dist/governance-activation/task-projection.js +32 -3
- package/dist/governance-activation/task-projection.js.map +1 -1
- package/dist/governance-activation/task-writes.d.ts +42 -0
- package/dist/governance-activation/task-writes.js +250 -0
- package/dist/governance-activation/task-writes.js.map +1 -0
- package/dist/governance-activation/transition-files.d.ts +12 -0
- package/dist/governance-activation/transition-files.js +109 -0
- package/dist/governance-activation/transition-files.js.map +1 -0
- package/dist/governance-activation/transition-planning.d.ts +3 -1
- package/dist/governance-activation/transition-planning.js +158 -20
- package/dist/governance-activation/transition-planning.js.map +1 -1
- package/dist/governance-activation/transition-ports.d.ts +31 -3
- package/dist/governance-activation/transition-records.d.ts +11 -1
- package/dist/governance-activation/transition-records.js +52 -6
- package/dist/governance-activation/transition-records.js.map +1 -1
- package/dist/governance-activation/transitions.d.ts +5 -0
- package/dist/governance-activation/transitions.js +271 -37
- package/dist/governance-activation/transitions.js.map +1 -1
- package/dist/governance-assessment/engine.js +22 -15
- package/dist/governance-assessment/engine.js.map +1 -1
- package/dist/governance-assessment/project.d.ts +2 -0
- package/dist/governance-assessment/project.js +2 -1
- package/dist/governance-assessment/project.js.map +1 -1
- package/dist/interactive.d.ts +0 -1
- package/dist/interactive.js +3 -22
- package/dist/interactive.js.map +1 -1
- package/dist/openspec-profile.d.ts +2 -1
- package/dist/openspec-profile.js +11 -41
- package/dist/openspec-profile.js.map +1 -1
- package/dist/repository-governance.d.ts +10 -5
- package/dist/repository-governance.js +178 -92
- package/dist/repository-governance.js.map +1 -1
- package/dist/self-upgrade.d.ts +8 -2
- package/dist/self-upgrade.js +180 -47
- package/dist/self-upgrade.js.map +1 -1
- package/dist/telemetry/contract.d.ts +1 -1
- package/dist/telemetry/contract.js +3 -0
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/workstation-catalog.d.ts +13 -1
- package/dist/workstation-catalog.js +122 -0
- package/dist/workstation-catalog.js.map +1 -1
- package/dist/workstation.d.ts +69 -14
- package/dist/workstation.js +600 -215
- package/dist/workstation.js.map +1 -1
- package/docs/cli-reference.md +69 -22
- package/docs/configuration-and-manifests.md +9 -8
- package/docs/prerequisites.md +93 -18
- package/docs/repository-governance.md +68 -40
- package/docs/spec-workflows-and-agents.md +132 -13
- package/docs/troubleshooting.md +32 -2
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opentofu.js","sourceRoot":"","sources":["../../../src/adapters/state/opentofu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ChildProcessWithoutNullStreams } from 'node:child_process';
|
|
2
|
+
import { StateMigrationError } from '../../domain/repair/stateful.js';
|
|
3
|
+
export declare class StateProcessTerminationError extends StateMigrationError {
|
|
4
|
+
readonly processRef: string;
|
|
5
|
+
constructor(processRef: string);
|
|
6
|
+
}
|
|
7
|
+
export declare function spawnOwnedStateProcess(request: {
|
|
8
|
+
executable: string;
|
|
9
|
+
args: readonly string[];
|
|
10
|
+
cwd: string;
|
|
11
|
+
environment: NodeJS.ProcessEnv;
|
|
12
|
+
role?: 'command' | 'lease';
|
|
13
|
+
}): ChildProcessWithoutNullStreams;
|
|
14
|
+
export declare function stopOwnedStateProcess(child: ChildProcessWithoutNullStreams, options?: {
|
|
15
|
+
immediate?: boolean;
|
|
16
|
+
cleanupMs?: number;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
forced: boolean;
|
|
19
|
+
}>;
|
|
20
|
+
export declare function stopOwnedStateProcessesIn(directory: string, cleanupMs?: number): Promise<void>;
|
|
21
|
+
export declare function cleanupOwnedStateScratch(directory: string, cleanup: () => Promise<void>): Promise<void>;
|
|
22
|
+
export declare function terminateRegisteredStateProcess(pid: number): Promise<void>;
|
|
23
|
+
export declare class OwnedPrivateStateProcessRunner {
|
|
24
|
+
#private;
|
|
25
|
+
private readonly cleanupMs;
|
|
26
|
+
constructor(cleanupMs?: number);
|
|
27
|
+
quiesce(): Promise<void>;
|
|
28
|
+
run(request: {
|
|
29
|
+
executable: string;
|
|
30
|
+
args: readonly string[];
|
|
31
|
+
cwd: string;
|
|
32
|
+
environment: NodeJS.ProcessEnv;
|
|
33
|
+
stdin?: Uint8Array;
|
|
34
|
+
timeoutMs: number;
|
|
35
|
+
maximumBytes: number;
|
|
36
|
+
signal?: AbortSignal;
|
|
37
|
+
captureStderr?: boolean;
|
|
38
|
+
}): Promise<{
|
|
39
|
+
exitCode: number;
|
|
40
|
+
stdout: Uint8Array;
|
|
41
|
+
stderr: Uint8Array;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import spawn from 'cross-spawn';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { StateMigrationError } from '../../domain/repair/stateful.js';
|
|
5
|
+
import { stateAssert } from '../../domain/repair/stateful-invariants.js';
|
|
6
|
+
const owned = new Map();
|
|
7
|
+
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
8
|
+
export class StateProcessTerminationError extends StateMigrationError {
|
|
9
|
+
processRef;
|
|
10
|
+
constructor(processRef) {
|
|
11
|
+
super('process-tree-termination-unproven');
|
|
12
|
+
this.processRef = processRef;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function groupAbsent(group) {
|
|
16
|
+
if (group.groupGone)
|
|
17
|
+
return true;
|
|
18
|
+
if (group.spawnFailed && group.child.pid === undefined)
|
|
19
|
+
return true;
|
|
20
|
+
if (group.child.pid === undefined)
|
|
21
|
+
return false;
|
|
22
|
+
try {
|
|
23
|
+
process.kill(-group.child.pid, 0);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (error.code !== 'ESRCH')
|
|
28
|
+
return false;
|
|
29
|
+
group.groupGone = true;
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function stopped(group) {
|
|
34
|
+
return groupAbsent(group) && (group.streamsClosed || group.spawnFailed);
|
|
35
|
+
}
|
|
36
|
+
function signalGroup(group, signal) {
|
|
37
|
+
if (group.child.pid === undefined || group.groupGone)
|
|
38
|
+
return;
|
|
39
|
+
try {
|
|
40
|
+
process.kill(-group.child.pid, signal);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (error.code !== 'ESRCH')
|
|
44
|
+
throw new StateProcessTerminationError(group.ref);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async function waitStopped(group, duration) {
|
|
48
|
+
const end = Date.now() + duration;
|
|
49
|
+
do {
|
|
50
|
+
if (stopped(group))
|
|
51
|
+
return true;
|
|
52
|
+
await delay(20);
|
|
53
|
+
} while (Date.now() < end);
|
|
54
|
+
return stopped(group);
|
|
55
|
+
}
|
|
56
|
+
async function proveTermination(group, immediate, cleanupMs) {
|
|
57
|
+
await group.ready;
|
|
58
|
+
if (!immediate && await waitStopped(group, 100)) {
|
|
59
|
+
owned.delete(group.child);
|
|
60
|
+
return { forced: false };
|
|
61
|
+
}
|
|
62
|
+
let signalled = false;
|
|
63
|
+
try {
|
|
64
|
+
signalGroup(group, 'SIGTERM');
|
|
65
|
+
signalled = true;
|
|
66
|
+
}
|
|
67
|
+
catch { /* The final proof, not signal delivery, determines success. */ }
|
|
68
|
+
if (await waitStopped(group, Math.min(200, cleanupMs))) {
|
|
69
|
+
owned.delete(group.child);
|
|
70
|
+
return { forced: signalled };
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
signalGroup(group, 'SIGKILL');
|
|
74
|
+
}
|
|
75
|
+
catch { /* Retain the group if proof fails. */ }
|
|
76
|
+
if (await waitStopped(group, cleanupMs)) {
|
|
77
|
+
owned.delete(group.child);
|
|
78
|
+
return { forced: true };
|
|
79
|
+
}
|
|
80
|
+
// Keep ownership and pipe observers alive for an explicit later quiescence
|
|
81
|
+
// attempt. Closing inherited pipes here would manufacture a false proof.
|
|
82
|
+
throw new StateProcessTerminationError(group.ref);
|
|
83
|
+
}
|
|
84
|
+
export function spawnOwnedStateProcess(request) {
|
|
85
|
+
stateAssert(process.platform === 'darwin' || process.platform === 'linux', 'unsupported-native-platform');
|
|
86
|
+
let ready;
|
|
87
|
+
const started = new Promise((resolve) => { ready = resolve; });
|
|
88
|
+
// As in process-runner.ts, setsid owns the inherited process group. Pipes and
|
|
89
|
+
// the child remain referenced: this is not an unref'ed/background daemon.
|
|
90
|
+
const child = spawn(request.executable, [...request.args], {
|
|
91
|
+
cwd: request.cwd, env: { ...request.environment }, shell: false,
|
|
92
|
+
detached: true, windowsHide: true, stdio: ['pipe', 'pipe', 'pipe']
|
|
93
|
+
});
|
|
94
|
+
const group = {
|
|
95
|
+
ref: `state-process:${randomUUID()}`, child, cwd: path.resolve(request.cwd), ready: started,
|
|
96
|
+
rootExited: false, streamsClosed: false, exitCode: null, spawnFailed: false, groupGone: false,
|
|
97
|
+
role: request.role ?? 'command', terminating: null
|
|
98
|
+
};
|
|
99
|
+
owned.set(child, group);
|
|
100
|
+
child.once('spawn', ready);
|
|
101
|
+
child.once('error', () => { group.spawnFailed = true; group.rootExited = true; ready(); });
|
|
102
|
+
child.once('exit', (code) => { group.rootExited = true; group.exitCode = code; });
|
|
103
|
+
child.once('close', () => { group.streamsClosed = true; });
|
|
104
|
+
return child;
|
|
105
|
+
}
|
|
106
|
+
export async function stopOwnedStateProcess(child, options = {}) {
|
|
107
|
+
const group = owned.get(child);
|
|
108
|
+
if (!group)
|
|
109
|
+
return { forced: false };
|
|
110
|
+
const cleanupMs = options.cleanupMs ?? 2_000;
|
|
111
|
+
stateAssert(Number.isSafeInteger(cleanupMs) && cleanupMs >= 50 && cleanupMs <= 10_000, 'invalid-binding');
|
|
112
|
+
if (group.terminating)
|
|
113
|
+
return group.terminating;
|
|
114
|
+
group.terminating = proveTermination(group, options.immediate ?? true, cleanupMs);
|
|
115
|
+
try {
|
|
116
|
+
return await group.terminating;
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
group.terminating = null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export async function stopOwnedStateProcessesIn(directory, cleanupMs = 2_000) {
|
|
123
|
+
const root = path.resolve(directory);
|
|
124
|
+
const groups = [...owned.values()].filter((group) => {
|
|
125
|
+
if (group.role !== 'command')
|
|
126
|
+
return false;
|
|
127
|
+
const relative = path.relative(root, group.cwd);
|
|
128
|
+
return relative === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative));
|
|
129
|
+
});
|
|
130
|
+
const results = await Promise.allSettled(groups.map((group) => stopOwnedStateProcess(group.child, { cleanupMs })));
|
|
131
|
+
const failure = results.find((result) => result.status === 'rejected');
|
|
132
|
+
if (failure?.status === 'rejected')
|
|
133
|
+
throw failure.reason;
|
|
134
|
+
}
|
|
135
|
+
export async function cleanupOwnedStateScratch(directory, cleanup) {
|
|
136
|
+
await stopOwnedStateProcessesIn(directory);
|
|
137
|
+
await cleanup();
|
|
138
|
+
}
|
|
139
|
+
export async function terminateRegisteredStateProcess(pid) {
|
|
140
|
+
const group = [...owned.values()].find((entry) => entry.child.pid === pid);
|
|
141
|
+
stateAssert(group, 'process-tree-termination-unproven');
|
|
142
|
+
await stopOwnedStateProcess(group.child);
|
|
143
|
+
}
|
|
144
|
+
export class OwnedPrivateStateProcessRunner {
|
|
145
|
+
cleanupMs;
|
|
146
|
+
#children = new Set();
|
|
147
|
+
#generation = 0;
|
|
148
|
+
constructor(cleanupMs = 2_000) {
|
|
149
|
+
this.cleanupMs = cleanupMs;
|
|
150
|
+
}
|
|
151
|
+
async quiesce() {
|
|
152
|
+
this.#generation++;
|
|
153
|
+
const results = await Promise.allSettled([...this.#children].map(async (child) => {
|
|
154
|
+
await stopOwnedStateProcess(child, { cleanupMs: this.cleanupMs });
|
|
155
|
+
this.#children.delete(child);
|
|
156
|
+
}));
|
|
157
|
+
const failure = results.find((result) => result.status === 'rejected');
|
|
158
|
+
if (failure?.status === 'rejected')
|
|
159
|
+
throw failure.reason;
|
|
160
|
+
}
|
|
161
|
+
async run(request) {
|
|
162
|
+
stateAssert(Number.isSafeInteger(request.timeoutMs) && request.timeoutMs > 0 && request.timeoutMs <= 300_000
|
|
163
|
+
&& Number.isSafeInteger(request.maximumBytes) && request.maximumBytes > 0, 'invalid-binding');
|
|
164
|
+
stateAssert(!request.signal?.aborted, 'cancelled');
|
|
165
|
+
if (this.#children.size) {
|
|
166
|
+
throw new StateProcessTerminationError(owned.get([...this.#children][0])?.ref ?? 'state-process:unproven');
|
|
167
|
+
}
|
|
168
|
+
const generation = this.#generation;
|
|
169
|
+
const child = spawnOwnedStateProcess(request);
|
|
170
|
+
this.#children.add(child);
|
|
171
|
+
return new Promise((resolve, reject) => {
|
|
172
|
+
const stdout = [];
|
|
173
|
+
const stderr = [];
|
|
174
|
+
const input = request.stdin ? Buffer.from(request.stdin) : undefined;
|
|
175
|
+
let bytes = 0;
|
|
176
|
+
let failure = null;
|
|
177
|
+
let exitCode = null;
|
|
178
|
+
let finishing = false;
|
|
179
|
+
let discarded = false;
|
|
180
|
+
const discard = () => {
|
|
181
|
+
discarded = true;
|
|
182
|
+
for (const buffer of [...stdout, ...stderr])
|
|
183
|
+
buffer.fill(0);
|
|
184
|
+
stdout.length = 0;
|
|
185
|
+
stderr.length = 0;
|
|
186
|
+
input?.fill(0);
|
|
187
|
+
};
|
|
188
|
+
const finish = async (immediate) => {
|
|
189
|
+
if (finishing)
|
|
190
|
+
return;
|
|
191
|
+
finishing = true;
|
|
192
|
+
try {
|
|
193
|
+
const termination = await stopOwnedStateProcess(child, { immediate, cleanupMs: this.cleanupMs });
|
|
194
|
+
this.#children.delete(child);
|
|
195
|
+
if (!failure && termination.forced)
|
|
196
|
+
failure = 'native-command-failed';
|
|
197
|
+
if (failure) {
|
|
198
|
+
discard();
|
|
199
|
+
reject(new StateMigrationError(failure));
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
const result = { exitCode: exitCode ?? 1, stdout: Buffer.concat(stdout), stderr: Buffer.concat(stderr) };
|
|
203
|
+
discard();
|
|
204
|
+
resolve(result);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
discard();
|
|
209
|
+
reject(error instanceof StateProcessTerminationError ? error : new StateProcessTerminationError(`state-process:unproven`));
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
clearTimeout(timer);
|
|
213
|
+
request.signal?.removeEventListener('abort', abort);
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
const stop = (code) => {
|
|
217
|
+
failure ??= code;
|
|
218
|
+
discard();
|
|
219
|
+
void finish(true);
|
|
220
|
+
};
|
|
221
|
+
const abort = () => stop('cancelled');
|
|
222
|
+
const timer = setTimeout(() => stop('timeout'), request.timeoutMs);
|
|
223
|
+
const collect = (buffers, chunk, keep) => {
|
|
224
|
+
bytes += chunk.length;
|
|
225
|
+
if (discarded || failure || finishing && !owned.has(child)) {
|
|
226
|
+
chunk.fill(0);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (bytes > request.maximumBytes) {
|
|
230
|
+
chunk.fill(0);
|
|
231
|
+
stop('storage-limit');
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if (keep)
|
|
235
|
+
buffers.push(chunk);
|
|
236
|
+
else
|
|
237
|
+
chunk.fill(0);
|
|
238
|
+
};
|
|
239
|
+
child.stdout.on('data', (chunk) => collect(stdout, chunk, true));
|
|
240
|
+
child.stderr.on('data', (chunk) => collect(stderr, chunk, request.captureStderr !== false));
|
|
241
|
+
child.once('error', () => stop('native-command-failed'));
|
|
242
|
+
child.once('exit', (code) => { exitCode = code; void finish(false); });
|
|
243
|
+
child.stdin.on('error', () => stop('native-command-failed'));
|
|
244
|
+
request.signal?.addEventListener('abort', abort, { once: true });
|
|
245
|
+
if (request.signal?.aborted || generation !== this.#generation)
|
|
246
|
+
abort();
|
|
247
|
+
if (!failure)
|
|
248
|
+
child.stdin.end(input, () => input?.fill(0));
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=owned-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owned-process.js","sourceRoot":"","sources":["../../../src/adapters/state/owned-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const posixStateLockProgram: string;
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// The protocol is pinned to OpenTofu 1.12.6 internal/flock and statemgr.
|
|
2
|
+
// lockf uses POSIX fcntl record locks, NOT BSD flock. The holder must never
|
|
3
|
+
// open/close another descriptor to its state inode: POSIX would drop its locks.
|
|
4
|
+
export const posixStateLockProgram = String.raw `
|
|
5
|
+
import base64, datetime, errno, fcntl, hashlib, json, os, select, signal, stat, sys, time
|
|
6
|
+
|
|
7
|
+
MAX = 32 * 1024 * 1024
|
|
8
|
+
fd = None
|
|
9
|
+
info_path = None
|
|
10
|
+
info_bytes = None
|
|
11
|
+
current_digest = None
|
|
12
|
+
|
|
13
|
+
class Blocked(Exception):
|
|
14
|
+
def __init__(self, code):
|
|
15
|
+
self.code = code
|
|
16
|
+
|
|
17
|
+
def emit(value):
|
|
18
|
+
sys.stdout.write(json.dumps(value, separators=(",", ":")) + "\n")
|
|
19
|
+
sys.stdout.flush()
|
|
20
|
+
|
|
21
|
+
def version(s):
|
|
22
|
+
value = {"dev": str(s.st_dev), "ino": str(s.st_ino), "size": str(s.st_size),
|
|
23
|
+
"mtime": str(s.st_mtime_ns), "ctime": str(s.st_ctime_ns)}
|
|
24
|
+
return hashlib.sha256(json.dumps(value, sort_keys=True, separators=(",", ":")).encode()).hexdigest()
|
|
25
|
+
|
|
26
|
+
def read_state():
|
|
27
|
+
s = os.fstat(fd)
|
|
28
|
+
if not stat.S_ISREG(s.st_mode) or s.st_nlink != 1 or s.st_size > MAX:
|
|
29
|
+
raise Blocked("unsafe-path")
|
|
30
|
+
pieces = []
|
|
31
|
+
offset = 0
|
|
32
|
+
while offset < s.st_size:
|
|
33
|
+
part = os.pread(fd, min(65536, s.st_size - offset), offset)
|
|
34
|
+
if not part:
|
|
35
|
+
raise Blocked("stale-state")
|
|
36
|
+
pieces.append(part)
|
|
37
|
+
offset += len(part)
|
|
38
|
+
return b"".join(pieces)
|
|
39
|
+
|
|
40
|
+
def assert_path():
|
|
41
|
+
s = os.fstat(fd)
|
|
42
|
+
p = os.lstat(target)
|
|
43
|
+
if not stat.S_ISREG(p.st_mode) or p.st_nlink != 1 or (s.st_dev, s.st_ino) != (p.st_dev, p.st_ino):
|
|
44
|
+
raise Blocked("lock-lost")
|
|
45
|
+
if os.path.realpath(os.path.dirname(target)) != os.path.dirname(target):
|
|
46
|
+
raise Blocked("lock-lost")
|
|
47
|
+
with open(info_path, "rb") as marker:
|
|
48
|
+
if marker.read(8193) != info_bytes:
|
|
49
|
+
raise Blocked("lock-lost")
|
|
50
|
+
# Reassert on the SAME descriptor. No additional state fd is opened.
|
|
51
|
+
fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB, 0, 0, os.SEEK_SET)
|
|
52
|
+
return s
|
|
53
|
+
|
|
54
|
+
def terminate(_number, _frame):
|
|
55
|
+
raise Blocked("cancelled")
|
|
56
|
+
|
|
57
|
+
signal.signal(signal.SIGTERM, terminate)
|
|
58
|
+
signal.signal(signal.SIGINT, terminate)
|
|
59
|
+
|
|
60
|
+
try:
|
|
61
|
+
if sys.platform != "darwin":
|
|
62
|
+
raise Blocked("unsupported-native-platform")
|
|
63
|
+
if sys.version_info[:2] != (3, 14):
|
|
64
|
+
raise Blocked("native-lock-provider-required")
|
|
65
|
+
opening = sys.stdin.buffer.readline(16385)
|
|
66
|
+
if len(opening) > 16384:
|
|
67
|
+
raise Blocked("storage-limit")
|
|
68
|
+
request = json.loads(opening)
|
|
69
|
+
target = request["path"]
|
|
70
|
+
operation = request["operationId"]
|
|
71
|
+
if not os.path.isabs(target) or os.path.realpath(os.path.dirname(target)) != os.path.dirname(target):
|
|
72
|
+
raise Blocked("unsafe-path")
|
|
73
|
+
before = os.lstat(target)
|
|
74
|
+
if not stat.S_ISREG(before.st_mode) or before.st_nlink != 1 or before.st_uid != os.getuid() or before.st_mode & 0o077:
|
|
75
|
+
raise Blocked("unsafe-path")
|
|
76
|
+
fd = os.open(target, os.O_RDWR | os.O_NOFOLLOW)
|
|
77
|
+
try:
|
|
78
|
+
fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB, 0, 0, os.SEEK_SET)
|
|
79
|
+
except OSError as error:
|
|
80
|
+
if error.errno in (errno.EACCES, errno.EAGAIN):
|
|
81
|
+
raise Blocked("lock-unavailable")
|
|
82
|
+
raise
|
|
83
|
+
held = os.fstat(fd)
|
|
84
|
+
if (held.st_dev, held.st_ino) != (before.st_dev, before.st_ino) or version(held) != request["expectedVersion"]:
|
|
85
|
+
raise Blocked("stale-state")
|
|
86
|
+
current_digest = hashlib.sha256(read_state()).hexdigest()
|
|
87
|
+
name = os.path.basename(target)
|
|
88
|
+
if name.startswith("."):
|
|
89
|
+
name = name[1:]
|
|
90
|
+
info_path = os.path.join(os.path.dirname(target), "." + name + ".lock.info")
|
|
91
|
+
info = {"ID": operation, "Operation": "liftoff-state-migration", "Info": "Protected existing-inode POSIX lock",
|
|
92
|
+
"Who": "liftoff:" + str(os.getuid()), "Version": "1.12.6",
|
|
93
|
+
"Created": datetime.datetime.now(datetime.timezone.utc).isoformat(), "Path": target,
|
|
94
|
+
"LiftoffProtocol": "opentofu-1.12.6-posix-fcntl"}
|
|
95
|
+
info_bytes = json.dumps(info, sort_keys=True, separators=(",", ":")).encode()
|
|
96
|
+
try:
|
|
97
|
+
marker_fd = os.open(info_path, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600)
|
|
98
|
+
except FileExistsError:
|
|
99
|
+
# An unknown/stale marker is not permission to delete somebody else's record.
|
|
100
|
+
info_bytes = None
|
|
101
|
+
raise Blocked("lock-unavailable")
|
|
102
|
+
try:
|
|
103
|
+
os.write(marker_fd, info_bytes)
|
|
104
|
+
os.fsync(marker_fd)
|
|
105
|
+
finally:
|
|
106
|
+
os.close(marker_fd)
|
|
107
|
+
emit({"ok": True, "version": version(held)})
|
|
108
|
+
deadline = time.monotonic() + min(int(request.get("holdSeconds", 1800)), 1800)
|
|
109
|
+
while True:
|
|
110
|
+
remaining = deadline - time.monotonic()
|
|
111
|
+
if remaining <= 0:
|
|
112
|
+
raise Blocked("timeout")
|
|
113
|
+
ready, _, _ = select.select([sys.stdin.buffer], [], [], remaining)
|
|
114
|
+
if not ready:
|
|
115
|
+
raise Blocked("timeout")
|
|
116
|
+
line = sys.stdin.buffer.readline(MAX * 2 + 1)
|
|
117
|
+
if not line:
|
|
118
|
+
break
|
|
119
|
+
if len(line) > MAX * 2:
|
|
120
|
+
raise Blocked("storage-limit")
|
|
121
|
+
command = json.loads(line)
|
|
122
|
+
action = command["action"]
|
|
123
|
+
if action == "release":
|
|
124
|
+
emit({"ok": True})
|
|
125
|
+
break
|
|
126
|
+
observed = assert_path()
|
|
127
|
+
if action == "assert":
|
|
128
|
+
emit({"ok": True, "version": version(observed)})
|
|
129
|
+
continue
|
|
130
|
+
if action != "replace":
|
|
131
|
+
raise Blocked("unsupported-local-state-operation")
|
|
132
|
+
if version(observed) != command["expectedVersion"]:
|
|
133
|
+
raise Blocked("stale-state")
|
|
134
|
+
prior = read_state()
|
|
135
|
+
if hashlib.sha256(prior).hexdigest() != current_digest:
|
|
136
|
+
raise Blocked("stale-state")
|
|
137
|
+
candidate = base64.b64decode(command["bytes"], validate=True)
|
|
138
|
+
if not candidate or len(candidate) > MAX:
|
|
139
|
+
raise Blocked("storage-limit")
|
|
140
|
+
old_state, new_state = json.loads(prior), json.loads(candidate)
|
|
141
|
+
if old_state.get("version") != 4 or new_state.get("version") != 4:
|
|
142
|
+
raise Blocked("unsupported-state")
|
|
143
|
+
if old_state.get("lineage") != new_state.get("lineage") or new_state.get("serial", -1) < old_state.get("serial", 0):
|
|
144
|
+
raise Blocked("stale-state")
|
|
145
|
+
assert_path()
|
|
146
|
+
# OpenTofu also writes in place. Rename/unlink would replace the inode
|
|
147
|
+
# and let a second native writer bypass the lock. This is NOT atomic.
|
|
148
|
+
previous_mask = signal.pthread_sigmask(signal.SIG_BLOCK, {signal.SIGTERM, signal.SIGINT})
|
|
149
|
+
try:
|
|
150
|
+
os.ftruncate(fd, 0)
|
|
151
|
+
offset = 0
|
|
152
|
+
while offset < len(candidate):
|
|
153
|
+
count = os.pwrite(fd, candidate[offset:], offset)
|
|
154
|
+
if count <= 0:
|
|
155
|
+
raise Blocked("operation-failed")
|
|
156
|
+
offset += count
|
|
157
|
+
os.fsync(fd)
|
|
158
|
+
current_digest = hashlib.sha256(candidate).hexdigest()
|
|
159
|
+
finally:
|
|
160
|
+
signal.pthread_sigmask(signal.SIG_SETMASK, previous_mask)
|
|
161
|
+
emit({"ok": True, "version": version(os.fstat(fd)), "digest": current_digest})
|
|
162
|
+
except Blocked as error:
|
|
163
|
+
emit({"ok": False, "code": error.code})
|
|
164
|
+
except FileNotFoundError:
|
|
165
|
+
emit({"ok": False, "code": "unsupported-local-state-operation"})
|
|
166
|
+
except Exception:
|
|
167
|
+
emit({"ok": False, "code": "operation-failed"})
|
|
168
|
+
finally:
|
|
169
|
+
if fd is not None:
|
|
170
|
+
if info_path and info_bytes:
|
|
171
|
+
try:
|
|
172
|
+
entry = os.lstat(info_path)
|
|
173
|
+
if stat.S_ISREG(entry.st_mode) and entry.st_nlink == 1:
|
|
174
|
+
with open(info_path, "rb") as marker:
|
|
175
|
+
matches = marker.read(8193) == info_bytes
|
|
176
|
+
if matches:
|
|
177
|
+
os.unlink(info_path)
|
|
178
|
+
except Exception:
|
|
179
|
+
pass
|
|
180
|
+
try:
|
|
181
|
+
fcntl.lockf(fd, fcntl.LOCK_UN, 0, 0, os.SEEK_SET)
|
|
182
|
+
finally:
|
|
183
|
+
os.close(fd)
|
|
184
|
+
`;
|
|
185
|
+
//# sourceMappingURL=posix-lock-program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posix-lock-program.js","sourceRoot":"","sources":["../../../src/adapters/state/posix-lock-program.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,4EAA4E;AAC5E,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoL9C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type NativeLocalStateLockProvider, type StateRegisteredExecutable } from '../../domain/repair/stateful.js';
|
|
2
|
+
export declare class DarwinPosixStateLockProvider implements NativeLocalStateLockProvider {
|
|
3
|
+
private readonly options;
|
|
4
|
+
readonly capabilities: Readonly<{
|
|
5
|
+
protocol: "opentofu-1.12.6-posix-fcntl";
|
|
6
|
+
existingInPlace: true;
|
|
7
|
+
createAbsent: false;
|
|
8
|
+
remove: false;
|
|
9
|
+
}>;
|
|
10
|
+
constructor(options: {
|
|
11
|
+
python: StateRegisteredExecutable;
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
});
|
|
14
|
+
acquire(request: Parameters<NativeLocalStateLockProvider['acquire']>[0]): ReturnType<NativeLocalStateLockProvider['acquire']>;
|
|
15
|
+
}
|