@miosa/cli 1.1.4 → 1.1.5
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/README.md +49 -0
- package/dist/app-operation.d.ts +23 -0
- package/dist/app-operation.d.ts.map +1 -0
- package/dist/app-operation.js +49 -0
- package/dist/app-operation.js.map +1 -0
- package/dist/app-release.d.ts +99 -0
- package/dist/app-release.d.ts.map +1 -0
- package/dist/app-release.js +229 -0
- package/dist/app-release.js.map +1 -0
- package/dist/bin/miosa.js +5 -0
- package/dist/bin/miosa.js.map +1 -1
- package/dist/commands/app.d.ts.map +1 -1
- package/dist/commands/app.js +710 -1
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/capabilities.d.ts.map +1 -1
- package/dist/commands/capabilities.js +24 -6
- package/dist/commands/capabilities.js.map +1 -1
- package/dist/commands/docker-deploy.d.ts.map +1 -1
- package/dist/commands/docker-deploy.js +106 -10
- package/dist/commands/docker-deploy.js.map +1 -1
- package/dist/commands/pull.d.ts +11 -0
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +3 -3
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/releases.d.ts.map +1 -1
- package/dist/commands/releases.js +12 -4
- package/dist/commands/releases.js.map +1 -1
- package/dist/commands/sandbox.d.ts +28 -0
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +1 -1
- package/dist/commands/sandbox.js.map +1 -1
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -86,6 +86,55 @@ Use `m7i.2xlarge` for the supported baseline tier.
|
|
|
86
86
|
|
|
87
87
|
## Deploy — 60 seconds to first deploy
|
|
88
88
|
|
|
89
|
+
### Safe application release workflow
|
|
90
|
+
|
|
91
|
+
Use the application workflow for normal preview, production, and recovery operations.
|
|
92
|
+
It keeps the source directory linked to one exact MIOSA deployment and refuses to report production success until the immutable release, artifact digest, route contract, App Engine placement, database attachment, and required configuration are proven.
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
miosa app link . --app <deployment-id> --environment production
|
|
96
|
+
miosa app pull .
|
|
97
|
+
miosa app preview . --json
|
|
98
|
+
miosa app verify <release-id> . --json
|
|
99
|
+
miosa app promote <release-id> . --yes --json
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Promotion and rollback always target an exact release ID.
|
|
103
|
+
They persist an operation record and idempotency key under `.miosa/operations`, so a request timeout can be inspected or resumed without creating duplicate deployment work.
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
miosa app recover <operation-id> . --json
|
|
107
|
+
miosa app recover <operation-id> . --resume --json
|
|
108
|
+
miosa app rollback <release-id> . --yes --json
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Declare application-specific acceptance requirements in `.miosa/acceptance.json`.
|
|
112
|
+
The default contract requires HTTP 200 from `/`.
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"schema_version": 1,
|
|
117
|
+
"routes": [
|
|
118
|
+
{
|
|
119
|
+
"id": "access",
|
|
120
|
+
"path": "/access",
|
|
121
|
+
"expected_status": [200],
|
|
122
|
+
"body_contains": ["Open the working brief"],
|
|
123
|
+
"content_type": "text/html",
|
|
124
|
+
"required": true
|
|
125
|
+
}
|
|
126
|
+
],
|
|
127
|
+
"required_env": ["DATABASE_URL", "BRIEF_AUTH_SECRET"],
|
|
128
|
+
"database": {
|
|
129
|
+
"required": true,
|
|
130
|
+
"health_path": "/api/health"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Each verification writes a durable, machine-readable receipt under `.miosa/receipts`.
|
|
136
|
+
That receipt is the acceptance evidence for the release.
|
|
137
|
+
|
|
89
138
|
Point the CLI at any repo and it handles the rest: framework detection, build wiring, GitHub webhook setup, and live log streaming.
|
|
90
139
|
|
|
91
140
|
For production app hosting, MIOSA recommends App Engine. It runs apps on the
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type ApplicationOperationState = "pending" | "succeeded" | "failed" | "blocked";
|
|
2
|
+
export interface ApplicationOperation {
|
|
3
|
+
schema_version: 1;
|
|
4
|
+
operation_id: string;
|
|
5
|
+
server_operation_id?: string;
|
|
6
|
+
idempotency_key: string;
|
|
7
|
+
action: "promote" | "rollback";
|
|
8
|
+
deployment_id: string;
|
|
9
|
+
release_id: string;
|
|
10
|
+
previous_version_id: string | null;
|
|
11
|
+
target_version_id: string;
|
|
12
|
+
state: ApplicationOperationState;
|
|
13
|
+
receipt_id?: string;
|
|
14
|
+
error?: string;
|
|
15
|
+
created_at: string;
|
|
16
|
+
updated_at: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function applicationIdempotencyKey(action: ApplicationOperation["action"], deploymentId: string, releaseId: string, targetVersionId: string): string;
|
|
19
|
+
export declare function createApplicationOperation(appDir: string, input: Omit<ApplicationOperation, "schema_version" | "operation_id" | "created_at" | "updated_at">): ApplicationOperation;
|
|
20
|
+
export declare function saveApplicationOperation(appDir: string, operation: ApplicationOperation): string;
|
|
21
|
+
export declare function loadApplicationOperation(appDir: string, operationId: string): ApplicationOperation | null;
|
|
22
|
+
export declare function updateApplicationOperation(appDir: string, operation: ApplicationOperation, update: Partial<ApplicationOperation>): ApplicationOperation;
|
|
23
|
+
//# sourceMappingURL=app-operation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-operation.d.ts","sourceRoot":"","sources":["../src/app-operation.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,yBAAyB,GACnC,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,CAAC,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,yBAAyB,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EACtC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,MAAM,CAKR;AAMD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,IAAI,CACT,oBAAoB,EACpB,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,YAAY,CAChE,GACA,oBAAoB,CAWtB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,oBAAoB,GAC9B,MAAM,CAQR;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,oBAAoB,GAAG,IAAI,CAI7B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,oBAAoB,EAC/B,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACpC,oBAAoB,CAQtB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export function applicationIdempotencyKey(action, deploymentId, releaseId, targetVersionId) {
|
|
5
|
+
return `app_${createHash("sha256")
|
|
6
|
+
.update([action, deploymentId, releaseId, targetVersionId].join(":"))
|
|
7
|
+
.digest("hex")
|
|
8
|
+
.slice(0, 40)}`;
|
|
9
|
+
}
|
|
10
|
+
function operationDir(appDir) {
|
|
11
|
+
return path.join(appDir, ".miosa", "operations");
|
|
12
|
+
}
|
|
13
|
+
export function createApplicationOperation(appDir, input) {
|
|
14
|
+
const now = new Date().toISOString();
|
|
15
|
+
const operation = {
|
|
16
|
+
schema_version: 1,
|
|
17
|
+
operation_id: `op_${randomUUID()}`,
|
|
18
|
+
...input,
|
|
19
|
+
created_at: now,
|
|
20
|
+
updated_at: now,
|
|
21
|
+
};
|
|
22
|
+
saveApplicationOperation(appDir, operation);
|
|
23
|
+
return operation;
|
|
24
|
+
}
|
|
25
|
+
export function saveApplicationOperation(appDir, operation) {
|
|
26
|
+
const dir = operationDir(appDir);
|
|
27
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
28
|
+
const file = path.join(dir, `${operation.operation_id}.json`);
|
|
29
|
+
fs.writeFileSync(file, `${JSON.stringify(operation, null, 2)}\n`, {
|
|
30
|
+
mode: 0o600,
|
|
31
|
+
});
|
|
32
|
+
return file;
|
|
33
|
+
}
|
|
34
|
+
export function loadApplicationOperation(appDir, operationId) {
|
|
35
|
+
const file = path.join(operationDir(appDir), `${operationId}.json`);
|
|
36
|
+
if (!fs.existsSync(file))
|
|
37
|
+
return null;
|
|
38
|
+
return JSON.parse(fs.readFileSync(file, "utf8"));
|
|
39
|
+
}
|
|
40
|
+
export function updateApplicationOperation(appDir, operation, update) {
|
|
41
|
+
const next = {
|
|
42
|
+
...operation,
|
|
43
|
+
...update,
|
|
44
|
+
updated_at: new Date().toISOString(),
|
|
45
|
+
};
|
|
46
|
+
saveApplicationOperation(appDir, next);
|
|
47
|
+
return next;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=app-operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-operation.js","sourceRoot":"","sources":["../src/app-operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAsB7B,MAAM,UAAU,yBAAyB,CACvC,MAAsC,EACtC,YAAoB,EACpB,SAAiB,EACjB,eAAuB;IAEvB,OAAO,OAAO,UAAU,CAAC,QAAQ,CAAC;SAC/B,MAAM,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACpE,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAc,EACd,KAGC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,SAAS,GAAyB;QACtC,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,MAAM,UAAU,EAAE,EAAE;QAClC,GAAG,KAAK;QACR,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,GAAG;KAChB,CAAC;IACF,wBAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC5C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAc,EACd,SAA+B;IAE/B,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,YAAY,OAAO,CAAC,CAAC;IAC9D,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAChE,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAc,EACd,WAAmB;IAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAyB,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAc,EACd,SAA+B,EAC/B,MAAqC;IAErC,MAAM,IAAI,GAAG;QACX,GAAG,SAAS;QACZ,GAAG,MAAM;QACT,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC;IACF,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export interface RouteRequirement {
|
|
2
|
+
id: string;
|
|
3
|
+
path: string;
|
|
4
|
+
expected_status: number[];
|
|
5
|
+
body_contains?: string[];
|
|
6
|
+
content_type?: string;
|
|
7
|
+
required?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface AcceptanceContract {
|
|
10
|
+
schema_version: 1;
|
|
11
|
+
routes: RouteRequirement[];
|
|
12
|
+
required_env?: string[];
|
|
13
|
+
database?: {
|
|
14
|
+
required: boolean;
|
|
15
|
+
health_path?: string;
|
|
16
|
+
};
|
|
17
|
+
connectors?: Array<{
|
|
18
|
+
id: string;
|
|
19
|
+
required?: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
scheduled_jobs?: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
required?: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
export interface ReleaseInspection {
|
|
27
|
+
deployment_id: string;
|
|
28
|
+
deployment_name: string;
|
|
29
|
+
tenant_id: string | null;
|
|
30
|
+
workspace_id: string | null;
|
|
31
|
+
deployment_state: string;
|
|
32
|
+
deployment_product: string;
|
|
33
|
+
public_url: string | null;
|
|
34
|
+
active_version_id: string | null;
|
|
35
|
+
active_release_id: string | null;
|
|
36
|
+
running_artifact_sha256: string | null;
|
|
37
|
+
expected_artifact_sha256: string | null;
|
|
38
|
+
host_id: string | null;
|
|
39
|
+
host_status: string | null;
|
|
40
|
+
appliance_status: string | null;
|
|
41
|
+
database_attached: boolean;
|
|
42
|
+
effective_env_names: string[];
|
|
43
|
+
healthy_connector_ids: string[];
|
|
44
|
+
healthy_scheduled_job_ids: string[];
|
|
45
|
+
}
|
|
46
|
+
export interface ProbeResponse {
|
|
47
|
+
status: number;
|
|
48
|
+
body: string;
|
|
49
|
+
content_type: string | null;
|
|
50
|
+
latency_ms?: number;
|
|
51
|
+
}
|
|
52
|
+
export interface ReleaseVerificationAdapter {
|
|
53
|
+
inspect(): Promise<ReleaseInspection>;
|
|
54
|
+
probe(url: string, path: string): Promise<ProbeResponse>;
|
|
55
|
+
}
|
|
56
|
+
export interface VerificationCheck {
|
|
57
|
+
id: string;
|
|
58
|
+
status: "pass" | "fail" | "warning" | "not_required";
|
|
59
|
+
message: string;
|
|
60
|
+
details?: Record<string, unknown>;
|
|
61
|
+
recovery?: string[];
|
|
62
|
+
}
|
|
63
|
+
export interface ReleaseReceipt {
|
|
64
|
+
schema_version: 1;
|
|
65
|
+
receipt_id: string;
|
|
66
|
+
application: string;
|
|
67
|
+
environment: string;
|
|
68
|
+
result: "verified" | "blocked";
|
|
69
|
+
promotion_allowed: boolean;
|
|
70
|
+
deployment: {
|
|
71
|
+
id: string;
|
|
72
|
+
name: string;
|
|
73
|
+
product: string;
|
|
74
|
+
url: string | null;
|
|
75
|
+
host_id: string | null;
|
|
76
|
+
tenant_id: string | null;
|
|
77
|
+
workspace_id: string | null;
|
|
78
|
+
};
|
|
79
|
+
release: {
|
|
80
|
+
id: string;
|
|
81
|
+
version_id: string;
|
|
82
|
+
artifact_sha256: string | null;
|
|
83
|
+
};
|
|
84
|
+
checks: VerificationCheck[];
|
|
85
|
+
next_actions: string[];
|
|
86
|
+
verified_at: string;
|
|
87
|
+
}
|
|
88
|
+
export interface VerifyApplicationReleaseInput {
|
|
89
|
+
application: string;
|
|
90
|
+
environment: string;
|
|
91
|
+
expected_release_id: string;
|
|
92
|
+
expected_version_id: string;
|
|
93
|
+
expected_workspace_id?: string;
|
|
94
|
+
contract: AcceptanceContract;
|
|
95
|
+
}
|
|
96
|
+
export declare function loadAcceptanceContract(appDir: string, explicitPath?: string): AcceptanceContract;
|
|
97
|
+
export declare function saveReleaseReceipt(appDir: string, receipt: ReleaseReceipt): string;
|
|
98
|
+
export declare function verifyApplicationRelease(input: VerifyApplicationReleaseInput, adapter: ReleaseVerificationAdapter): Promise<ReleaseReceipt>;
|
|
99
|
+
//# sourceMappingURL=app-release.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-release.d.ts","sourceRoot":"","sources":["../src/app-release.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { UserError } from "./errors.js";
|
|
5
|
+
const DEFAULT_CONTRACT = {
|
|
6
|
+
schema_version: 1,
|
|
7
|
+
routes: [
|
|
8
|
+
{
|
|
9
|
+
id: "root",
|
|
10
|
+
path: "/",
|
|
11
|
+
expected_status: [200],
|
|
12
|
+
required: true,
|
|
13
|
+
},
|
|
14
|
+
],
|
|
15
|
+
};
|
|
16
|
+
export function loadAcceptanceContract(appDir, explicitPath) {
|
|
17
|
+
const candidates = explicitPath
|
|
18
|
+
? [path.resolve(appDir, explicitPath)]
|
|
19
|
+
: [
|
|
20
|
+
path.join(appDir, ".miosa", "acceptance.json"),
|
|
21
|
+
path.join(appDir, "miosa.app.json"),
|
|
22
|
+
];
|
|
23
|
+
const found = candidates.find((candidate) => fs.existsSync(candidate));
|
|
24
|
+
if (!found)
|
|
25
|
+
return DEFAULT_CONTRACT;
|
|
26
|
+
let parsed;
|
|
27
|
+
try {
|
|
28
|
+
parsed = JSON.parse(fs.readFileSync(found, "utf8"));
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
throw new UserError(`Invalid acceptance contract ${found}: ${error instanceof Error ? error.message : String(error)}`);
|
|
32
|
+
}
|
|
33
|
+
const outer = parsed;
|
|
34
|
+
const contract = (outer.acceptance ?? parsed);
|
|
35
|
+
if (contract.schema_version !== 1 ||
|
|
36
|
+
!Array.isArray(contract.routes) ||
|
|
37
|
+
contract.routes.length === 0) {
|
|
38
|
+
throw new UserError(`Acceptance contract ${found} must use schema_version 1 and declare at least one route.`);
|
|
39
|
+
}
|
|
40
|
+
for (const route of contract.routes) {
|
|
41
|
+
if (!route ||
|
|
42
|
+
typeof route.id !== "string" ||
|
|
43
|
+
typeof route.path !== "string" ||
|
|
44
|
+
!Array.isArray(route.expected_status) ||
|
|
45
|
+
route.expected_status.length === 0) {
|
|
46
|
+
throw new UserError(`Acceptance contract ${found} has an invalid route.`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return contract;
|
|
50
|
+
}
|
|
51
|
+
export function saveReleaseReceipt(appDir, receipt) {
|
|
52
|
+
const receiptDir = path.join(appDir, ".miosa", "receipts");
|
|
53
|
+
fs.mkdirSync(receiptDir, { recursive: true, mode: 0o700 });
|
|
54
|
+
const receiptPath = path.join(receiptDir, `${receipt.receipt_id}.json`);
|
|
55
|
+
fs.writeFileSync(receiptPath, `${JSON.stringify(receipt, null, 2)}\n`, {
|
|
56
|
+
mode: 0o600,
|
|
57
|
+
});
|
|
58
|
+
return receiptPath;
|
|
59
|
+
}
|
|
60
|
+
function check(checks, id, ok, pass, fail, details, recovery) {
|
|
61
|
+
checks.push({
|
|
62
|
+
id,
|
|
63
|
+
status: ok ? "pass" : "fail",
|
|
64
|
+
message: ok ? pass : fail,
|
|
65
|
+
...(details ? { details } : {}),
|
|
66
|
+
...(!ok && recovery ? { recovery } : {}),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function receiptId(input, inspection) {
|
|
70
|
+
return `rcpt_${createHash("sha256")
|
|
71
|
+
.update([
|
|
72
|
+
input.application,
|
|
73
|
+
input.environment,
|
|
74
|
+
input.expected_release_id,
|
|
75
|
+
input.expected_version_id,
|
|
76
|
+
inspection.deployment_id,
|
|
77
|
+
inspection.running_artifact_sha256 ?? "",
|
|
78
|
+
].join(":"))
|
|
79
|
+
.digest("hex")
|
|
80
|
+
.slice(0, 24)}`;
|
|
81
|
+
}
|
|
82
|
+
export async function verifyApplicationRelease(input, adapter) {
|
|
83
|
+
const inspection = await adapter.inspect();
|
|
84
|
+
const checks = [];
|
|
85
|
+
check(checks, "deployment_running", inspection.deployment_state === "running", "Deployment is running.", `Deployment state is ${inspection.deployment_state}, expected running.`);
|
|
86
|
+
if (input.expected_workspace_id) {
|
|
87
|
+
check(checks, "workspace_scope", inspection.workspace_id === input.expected_workspace_id, "The deployment is attached to the intended workspace.", "The deployment workspace does not match the linked application.", {
|
|
88
|
+
expected_workspace_id: input.expected_workspace_id,
|
|
89
|
+
actual_workspace_id: inspection.workspace_id,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
check(checks, "exact_release", inspection.active_release_id === input.expected_release_id &&
|
|
93
|
+
inspection.active_version_id === input.expected_version_id, "The exact requested immutable release is active.", "The active release or version does not match the requested release.", {
|
|
94
|
+
expected_release_id: input.expected_release_id,
|
|
95
|
+
active_release_id: inspection.active_release_id,
|
|
96
|
+
expected_version_id: input.expected_version_id,
|
|
97
|
+
active_version_id: inspection.active_version_id,
|
|
98
|
+
});
|
|
99
|
+
const digestComparable = Boolean(inspection.expected_artifact_sha256 && inspection.running_artifact_sha256);
|
|
100
|
+
check(checks, "artifact_integrity", digestComparable &&
|
|
101
|
+
inspection.expected_artifact_sha256 ===
|
|
102
|
+
inspection.running_artifact_sha256, "The running artifact digest matches the immutable release.", digestComparable
|
|
103
|
+
? "The running artifact digest does not match the immutable release."
|
|
104
|
+
: "Artifact identity is incomplete and cannot be proven.", {
|
|
105
|
+
expected: inspection.expected_artifact_sha256,
|
|
106
|
+
running: inspection.running_artifact_sha256,
|
|
107
|
+
});
|
|
108
|
+
if (inspection.deployment_product === "docker_deploy") {
|
|
109
|
+
check(checks, "placement", Boolean(inspection.host_id &&
|
|
110
|
+
inspection.host_status === "active" &&
|
|
111
|
+
inspection.appliance_status === "healthy"), "App Engine placement is active and healthy.", "App Engine placement is missing, inactive, or unhealthy.", {
|
|
112
|
+
host_id: inspection.host_id,
|
|
113
|
+
host_status: inspection.host_status,
|
|
114
|
+
appliance_status: inspection.appliance_status,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
const requiredEnv = input.contract.required_env ?? [];
|
|
118
|
+
const missingEnv = requiredEnv.filter((name) => !inspection.effective_env_names.includes(name));
|
|
119
|
+
check(checks, "required_configuration", missingEnv.length === 0, `All ${requiredEnv.length} required configuration names are present.`, `Missing required configuration: ${missingEnv.join(", ")}.`, { required: requiredEnv, missing: missingEnv }, missingEnv.map((name) => `miosa secrets set ${name} --app ${input.application}`));
|
|
120
|
+
if (input.contract.database?.required) {
|
|
121
|
+
check(checks, "database_attachment", inspection.database_attached, "A durable database is attached.", "The application does not have a durable database attachment.");
|
|
122
|
+
}
|
|
123
|
+
for (const connector of input.contract.connectors ?? []) {
|
|
124
|
+
const healthy = inspection.healthy_connector_ids.includes(connector.id);
|
|
125
|
+
checks.push({
|
|
126
|
+
id: `connector:${connector.id}`,
|
|
127
|
+
status: healthy
|
|
128
|
+
? "pass"
|
|
129
|
+
: connector.required === false
|
|
130
|
+
? "warning"
|
|
131
|
+
: "fail",
|
|
132
|
+
message: healthy
|
|
133
|
+
? `Connector ${connector.id} is bound and healthy.`
|
|
134
|
+
: `Connector ${connector.id} is not bound and healthy.`,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
for (const job of input.contract.scheduled_jobs ?? []) {
|
|
138
|
+
const healthy = inspection.healthy_scheduled_job_ids.includes(job.id);
|
|
139
|
+
checks.push({
|
|
140
|
+
id: `scheduled_job:${job.id}`,
|
|
141
|
+
status: healthy ? "pass" : job.required === false ? "warning" : "fail",
|
|
142
|
+
message: healthy
|
|
143
|
+
? `Scheduled job ${job.id} is registered and healthy.`
|
|
144
|
+
: `Scheduled job ${job.id} is not registered and healthy.`,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
if (!inspection.public_url) {
|
|
148
|
+
check(checks, "public_url", false, "", "The deployment has no public URL.");
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
for (const requirement of input.contract.routes) {
|
|
152
|
+
const required = requirement.required !== false;
|
|
153
|
+
try {
|
|
154
|
+
const response = await adapter.probe(inspection.public_url, requirement.path);
|
|
155
|
+
const statusOk = requirement.expected_status.includes(response.status);
|
|
156
|
+
const bodyMissing = (requirement.body_contains ?? []).filter((marker) => !response.body.includes(marker));
|
|
157
|
+
const typeOk = !requirement.content_type ||
|
|
158
|
+
response.content_type
|
|
159
|
+
?.toLowerCase()
|
|
160
|
+
.includes(requirement.content_type.toLowerCase());
|
|
161
|
+
const ok = statusOk && bodyMissing.length === 0 && Boolean(typeOk);
|
|
162
|
+
checks.push({
|
|
163
|
+
id: `route:${requirement.id}`,
|
|
164
|
+
status: ok ? "pass" : required ? "fail" : "warning",
|
|
165
|
+
message: ok
|
|
166
|
+
? `${requirement.path} satisfied its declared contract.`
|
|
167
|
+
: `${requirement.path} did not satisfy its declared contract.`,
|
|
168
|
+
details: {
|
|
169
|
+
status: response.status,
|
|
170
|
+
expected_status: requirement.expected_status,
|
|
171
|
+
missing_body_markers: bodyMissing,
|
|
172
|
+
content_type: response.content_type,
|
|
173
|
+
expected_content_type: requirement.content_type ?? null,
|
|
174
|
+
latency_ms: response.latency_ms ?? null,
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
checks.push({
|
|
180
|
+
id: `route:${requirement.id}`,
|
|
181
|
+
status: required ? "fail" : "warning",
|
|
182
|
+
message: `${requirement.path} probe failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const healthPath = input.contract.database?.health_path;
|
|
187
|
+
if (input.contract.database?.required && healthPath) {
|
|
188
|
+
try {
|
|
189
|
+
const response = await adapter.probe(inspection.public_url, healthPath);
|
|
190
|
+
const bodyHealthy = /"status"\s*:\s*"ok"/.test(response.body) &&
|
|
191
|
+
/"database"\s*:\s*"ok"/.test(response.body);
|
|
192
|
+
check(checks, "database_health", response.status === 200 && bodyHealthy, "Database health and application schema checks passed.", "Database health or application schema checks failed.", { status: response.status, path: healthPath });
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
check(checks, "database_health", false, "", `Database health probe failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const blocked = checks.some((item) => item.status === "fail");
|
|
200
|
+
const nextActions = checks
|
|
201
|
+
.flatMap((item) => item.recovery ?? [])
|
|
202
|
+
.filter((value, index, all) => all.indexOf(value) === index);
|
|
203
|
+
return {
|
|
204
|
+
schema_version: 1,
|
|
205
|
+
receipt_id: receiptId(input, inspection),
|
|
206
|
+
application: input.application,
|
|
207
|
+
environment: input.environment,
|
|
208
|
+
result: blocked ? "blocked" : "verified",
|
|
209
|
+
promotion_allowed: !blocked,
|
|
210
|
+
deployment: {
|
|
211
|
+
id: inspection.deployment_id,
|
|
212
|
+
name: inspection.deployment_name,
|
|
213
|
+
product: inspection.deployment_product,
|
|
214
|
+
url: inspection.public_url,
|
|
215
|
+
host_id: inspection.host_id,
|
|
216
|
+
tenant_id: inspection.tenant_id,
|
|
217
|
+
workspace_id: inspection.workspace_id,
|
|
218
|
+
},
|
|
219
|
+
release: {
|
|
220
|
+
id: input.expected_release_id,
|
|
221
|
+
version_id: input.expected_version_id,
|
|
222
|
+
artifact_sha256: inspection.expected_artifact_sha256,
|
|
223
|
+
},
|
|
224
|
+
checks,
|
|
225
|
+
next_actions: nextActions,
|
|
226
|
+
verified_at: new Date().toISOString(),
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=app-release.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-release.js","sourceRoot":"","sources":["../src/app-release.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/miosa.js
CHANGED
|
@@ -66,6 +66,11 @@ Examples:
|
|
|
66
66
|
miosa capabilities --json Print agent-readable workflows and command recipes
|
|
67
67
|
miosa app inspect . --json Detect framework, commands, ports, env, and risks
|
|
68
68
|
miosa app plan . --goal deploy --json Generate the exact agent-safe deploy sequence
|
|
69
|
+
miosa app link . --app <deployment-id> Bind source to one exact application
|
|
70
|
+
miosa app pull . --json Pull linked application configuration
|
|
71
|
+
miosa app preview . --json Create and verify a safe preview
|
|
72
|
+
miosa app promote <release-id> . --yes Promote and prove one exact release
|
|
73
|
+
miosa app rollback <release-id> . --yes Roll back and prove one exact release
|
|
69
74
|
miosa computers list List all Computers
|
|
70
75
|
miosa computers vnc <id> Open a Computer's VNC viewer
|
|
71
76
|
miosa sandbox list List all Sandboxes
|
package/dist/bin/miosa.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"miosa.js","sourceRoot":"","sources":["../../src/bin/miosa.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAExD,iEAAiE;AACjE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC,CACrC,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,eAAe,CAAC;IACtB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QAChB,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,WAAW,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC1B,IAAI,CAAC,UAAU,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;CACF,CAAC,CAAC;AAEH,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;YACE,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,iBAAiB;gBACvB,OAAO;gBACP,SAAS,EAAE,KAAK;aACjB;SACF,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,GAAG,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CACV,6IAA6I,CAC9I;KACA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,+BAA+B,CAAC;KACtE,MAAM,CACL,QAAQ,EACR,gEAAgE,CACjE;KACA,MAAM,CAAC,SAAS,EAAE,4CAA4C,CAAC;KAC/D,MAAM,CAAC,SAAS,EAAE,8CAA8C,CAAC;KACjE,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAAC;KACjD,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;KACxE,MAAM,CAAC,yBAAyB,EAAE,sCAAsC,CAAC;KACzE,WAAW,CACV,OAAO,EACP
|
|
1
|
+
{"version":3,"file":"miosa.js","sourceRoot":"","sources":["../../src/bin/miosa.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/commands/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/commands/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6iBzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmoB/C"}
|