@mannyc1/ts-release 0.0.1 → 0.0.2
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/ARCHITECTURE.md +53 -0
- package/README.md +177 -34
- package/SPEC.md +8 -1
- package/dist/cli/command.d.ts +1 -1
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js +101 -53
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/main.js +3 -9
- package/dist/cli/main.js.map +1 -1
- package/dist/domain/operation.d.ts.map +1 -1
- package/dist/domain/operation.js +31 -1
- package/dist/domain/operation.js.map +1 -1
- package/dist/domain/remote-state.d.ts +90 -0
- package/dist/domain/remote-state.d.ts.map +1 -0
- package/dist/domain/remote-state.js +85 -0
- package/dist/domain/remote-state.js.map +1 -0
- package/dist/domain/status.d.ts +43 -0
- package/dist/domain/status.d.ts.map +1 -0
- package/dist/domain/status.js +50 -0
- package/dist/domain/status.js.map +1 -0
- package/dist/domain/target.d.ts +32 -2
- package/dist/domain/target.d.ts.map +1 -1
- package/dist/domain/target.js +35 -2
- package/dist/domain/target.js.map +1 -1
- package/dist/host/host.d.ts +7 -23
- package/dist/host/host.d.ts.map +1 -1
- package/dist/host/host.js +3 -22
- package/dist/host/host.js.map +1 -1
- package/dist/host/http-live.d.ts +1 -2
- package/dist/host/http-live.d.ts.map +1 -1
- package/dist/host/http-live.js +15 -9
- package/dist/host/http-live.js.map +1 -1
- package/dist/host/platform.d.ts +10 -0
- package/dist/host/platform.d.ts.map +1 -0
- package/dist/host/platform.js +121 -0
- package/dist/host/platform.js.map +1 -0
- package/dist/host/test.d.ts +6 -3
- package/dist/host/test.d.ts.map +1 -1
- package/dist/host/test.js +111 -25
- package/dist/host/test.js.map +1 -1
- package/dist/planner/artifact-inventory.d.ts +9 -0
- package/dist/planner/artifact-inventory.d.ts.map +1 -0
- package/dist/planner/artifact-inventory.js +66 -0
- package/dist/planner/artifact-inventory.js.map +1 -0
- package/dist/planner/create-release-plan.d.ts +1 -1
- package/dist/planner/create-release-plan.d.ts.map +1 -1
- package/dist/planner/errors.d.ts +37 -1
- package/dist/planner/errors.d.ts.map +1 -1
- package/dist/planner/errors.js +30 -0
- package/dist/planner/errors.js.map +1 -1
- package/dist/planner/evidence-recorder.d.ts +13 -8
- package/dist/planner/evidence-recorder.d.ts.map +1 -1
- package/dist/planner/evidence-recorder.js +98 -18
- package/dist/planner/evidence-recorder.js.map +1 -1
- package/dist/planner/executor.d.ts +31 -19
- package/dist/planner/executor.d.ts.map +1 -1
- package/dist/planner/executor.js +19 -6
- package/dist/planner/executor.js.map +1 -1
- package/dist/planner/normalize-release.d.ts +2 -2
- package/dist/planner/normalize-release.d.ts.map +1 -1
- package/dist/planner/normalize-release.js +40 -43
- package/dist/planner/normalize-release.js.map +1 -1
- package/dist/planner/reconcile.d.ts +17 -0
- package/dist/planner/reconcile.d.ts.map +1 -0
- package/dist/planner/reconcile.js +280 -0
- package/dist/planner/reconcile.js.map +1 -0
- package/dist/planner/release-eligibility.d.ts +33 -0
- package/dist/planner/release-eligibility.d.ts.map +1 -0
- package/dist/planner/release-eligibility.js +172 -0
- package/dist/planner/release-eligibility.js.map +1 -0
- package/dist/planner/render-plan.d.ts.map +1 -1
- package/dist/planner/render-plan.js +21 -0
- package/dist/planner/render-plan.js.map +1 -1
- package/dist/planner/status.d.ts +40 -0
- package/dist/planner/status.d.ts.map +1 -0
- package/dist/planner/status.js +336 -0
- package/dist/planner/status.js.map +1 -0
- package/dist/runtime/bun.d.ts +9 -0
- package/dist/runtime/bun.d.ts.map +1 -0
- package/dist/runtime/bun.js +10 -0
- package/dist/runtime/bun.js.map +1 -0
- package/dist/targets/github.d.ts.map +1 -1
- package/dist/targets/github.js +17 -13
- package/dist/targets/github.js.map +1 -1
- package/dist/targets/npm.d.ts +2 -2
- package/dist/targets/npm.d.ts.map +1 -1
- package/dist/targets/npm.js +74 -14
- package/dist/targets/npm.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/workflows/config.d.ts +81 -0
- package/dist/workflows/config.d.ts.map +1 -0
- package/dist/workflows/config.js +191 -0
- package/dist/workflows/config.js.map +1 -0
- package/dist/workflows/evidence.d.ts +21 -0
- package/dist/workflows/evidence.d.ts.map +1 -0
- package/dist/workflows/evidence.js +45 -0
- package/dist/workflows/evidence.js.map +1 -0
- package/dist/workflows/live.d.ts +7 -0
- package/dist/workflows/live.d.ts.map +1 -0
- package/dist/workflows/live.js +5 -0
- package/dist/workflows/live.js.map +1 -0
- package/examples/README.md +6 -3
- package/examples/multi-target/release.config.json +6 -1
- package/examples/npm-first-publish/release.config.json +32 -0
- package/examples/npm-only/release.config.json +6 -1
- package/package.json +31 -9
- package/dist/cli/programmatic.d.ts +0 -25
- package/dist/cli/programmatic.d.ts.map +0 -1
- package/dist/cli/programmatic.js +0 -53
- package/dist/cli/programmatic.js.map +0 -1
- package/dist/host/bun.d.ts +0 -9
- package/dist/host/bun.d.ts.map +0 -1
- package/dist/host/bun.js +0 -156
- package/dist/host/bun.js.map +0 -1
package/dist/targets/npm.js
CHANGED
|
@@ -1,15 +1,47 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import { CommandSpec, irreversibleGate, noApprovalGate, PublishCommandOperation, ValidateCommandOperation } from "../domain/operation.js";
|
|
2
|
+
import { CommandSpec, irreversibleGate, noApprovalGate, PublishCommandOperation, ValidateCommandOperation, VerifyRemoteOperation } from "../domain/operation.js";
|
|
3
|
+
import { TargetAuthSetup, TargetCapabilities, TargetRequiredPermission } from "../domain/target.js";
|
|
3
4
|
import { rejectNoDryRunInStrictMode, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
4
|
-
const
|
|
5
|
+
const isTrustedPublishing = (target) => target.trustedPublishing !== undefined;
|
|
6
|
+
const envNames = (target) => isTrustedPublishing(target) || target.tokenEnv === undefined ? [] : [target.tokenEnv];
|
|
7
|
+
const trustedPublishingRequiredEnvNames = [
|
|
8
|
+
"ACTIONS_ID_TOKEN_REQUEST_URL",
|
|
9
|
+
"ACTIONS_ID_TOKEN_REQUEST_TOKEN"
|
|
10
|
+
];
|
|
11
|
+
const requiredAuthEnvNames = (target) => isTrustedPublishing(target) ? trustedPublishingRequiredEnvNames : envNames(target);
|
|
12
|
+
const redactedAuthEnvNames = (target) => isTrustedPublishing(target) ? trustedPublishingRequiredEnvNames : envNames(target);
|
|
5
13
|
const npmCommand = (target, args, cwd, includeAuth) => CommandSpec.make({
|
|
6
14
|
executable: "npm",
|
|
7
15
|
args: [...args],
|
|
8
16
|
...(cwd === undefined ? {} : { cwd }),
|
|
9
|
-
requiredEnv: includeAuth ?
|
|
10
|
-
redactedEnv: includeAuth ?
|
|
17
|
+
requiredEnv: includeAuth ? requiredAuthEnvNames(target) : [],
|
|
18
|
+
redactedEnv: includeAuth ? redactedAuthEnvNames(target) : []
|
|
11
19
|
});
|
|
12
|
-
|
|
20
|
+
const trustedPublishingAuthSetup = (workflow) => TargetAuthSetup.make({
|
|
21
|
+
runsIn: "ci",
|
|
22
|
+
provider: "github-actions",
|
|
23
|
+
workflow,
|
|
24
|
+
requiredPermissions: [
|
|
25
|
+
TargetRequiredPermission.make({ name: "id-token", value: "write" })
|
|
26
|
+
],
|
|
27
|
+
prerequisites: ["npm-package-exists"]
|
|
28
|
+
});
|
|
29
|
+
export const npmTargetCapabilities = (target) => {
|
|
30
|
+
const trustedPublishing = target.trustedPublishing;
|
|
31
|
+
if (trustedPublishing === undefined) {
|
|
32
|
+
return targetCapabilitiesFor(target, validationStrategyForDryRun(target.dryRunSupport));
|
|
33
|
+
}
|
|
34
|
+
return TargetCapabilities.make({
|
|
35
|
+
targetId: target.id,
|
|
36
|
+
targetTag: target._tag,
|
|
37
|
+
authRequirement: "trusted-publishing",
|
|
38
|
+
dryRunSupport: target.dryRunSupport,
|
|
39
|
+
mutability: target.mutability,
|
|
40
|
+
recovery: target.recovery,
|
|
41
|
+
validationStrategy: validationStrategyForDryRun(target.dryRunSupport),
|
|
42
|
+
authSetup: trustedPublishingAuthSetup(trustedPublishing.workflow)
|
|
43
|
+
});
|
|
44
|
+
};
|
|
13
45
|
const npmDryRunOperation = (target) => {
|
|
14
46
|
const dryRunSupport = target.dryRunSupport;
|
|
15
47
|
return dryRunSupport === "native"
|
|
@@ -31,6 +63,32 @@ const npmDryRunOperation = (target) => {
|
|
|
31
63
|
skippedMessage: "npm dry-run validation was skipped because this target declares no dry-run support."
|
|
32
64
|
});
|
|
33
65
|
};
|
|
66
|
+
const npmAuthOperation = (target) => target.trustedPublishing !== undefined
|
|
67
|
+
? validationNoteOperation({
|
|
68
|
+
id: `${target.id}:npm-trusted-publishing-auth`,
|
|
69
|
+
targetId: target.id,
|
|
70
|
+
dryRunSupport: "simulated",
|
|
71
|
+
simulatedDescription: "Record npm trusted publishing authentication mode.",
|
|
72
|
+
skippedDescription: "Record skipped npm trusted publishing authentication mode.",
|
|
73
|
+
simulatedMessage: `NPM trusted publishing authenticates during npm publish with CI OIDC; npm whoami does not validate this mode. This target expects provider ${target.trustedPublishing.provider}, workflow ${target.trustedPublishing.workflow}, GitHub Actions permission id-token: write, and package ${target.packageName} to already exist on the registry.`,
|
|
74
|
+
skippedMessage: "NPM trusted publishing authentication validation was skipped."
|
|
75
|
+
})
|
|
76
|
+
: ValidateCommandOperation.make({
|
|
77
|
+
id: `${target.id}:npm-whoami`,
|
|
78
|
+
targetId: target.id,
|
|
79
|
+
description: "Validate npm CLI authentication.",
|
|
80
|
+
risk: "read-only",
|
|
81
|
+
gate: noApprovalGate("npm whoami checks CLI authentication without publishing."),
|
|
82
|
+
command: npmCommand(target, ["whoami", "--registry", target.registry], undefined, true)
|
|
83
|
+
});
|
|
84
|
+
const npmPackageExistsOperation = (target) => ValidateCommandOperation.make({
|
|
85
|
+
id: `${target.id}:npm-package-exists`,
|
|
86
|
+
targetId: target.id,
|
|
87
|
+
description: "Verify npm package exists before trusted publishing.",
|
|
88
|
+
risk: "read-only",
|
|
89
|
+
gate: noApprovalGate("npm view checks package metadata without publishing."),
|
|
90
|
+
command: npmCommand(target, ["view", target.packageName, "name", "--registry", target.registry], undefined, false)
|
|
91
|
+
});
|
|
34
92
|
const npmPublishArgs = (target) => {
|
|
35
93
|
const args = ["publish", target.packagePath, "--registry", target.registry];
|
|
36
94
|
if (target.access !== undefined) {
|
|
@@ -52,22 +110,24 @@ export const planNpmOperations = Effect.fn("planNpmOperations")(function* (targe
|
|
|
52
110
|
gate: noApprovalGate("CLI availability validation is read-only."),
|
|
53
111
|
command: npmCommand(target, ["--version"], undefined, false)
|
|
54
112
|
}),
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
targetId: target.id,
|
|
58
|
-
description: "Validate npm CLI authentication.",
|
|
59
|
-
risk: "read-only",
|
|
60
|
-
gate: noApprovalGate("npm whoami checks CLI authentication without publishing."),
|
|
61
|
-
command: npmCommand(target, ["whoami", "--registry", target.registry], undefined, true)
|
|
62
|
-
}),
|
|
113
|
+
npmAuthOperation(target),
|
|
114
|
+
...(target.trustedPublishing?.verifyPackageExists === true ? [npmPackageExistsOperation(target)] : []),
|
|
63
115
|
npmDryRunOperation(target),
|
|
64
116
|
PublishCommandOperation.make({
|
|
65
117
|
id: `${target.id}:npm-publish`,
|
|
66
118
|
targetId: target.id,
|
|
67
|
-
description: `Publish ${
|
|
119
|
+
description: `Publish ${target.packageName}@${model.identity.version} to npm.`,
|
|
68
120
|
risk: "irreversible",
|
|
69
121
|
gate: irreversibleGate("npm package versions are immutable once published."),
|
|
70
122
|
command: npmCommand(target, npmPublishArgs(target), undefined, true)
|
|
123
|
+
}),
|
|
124
|
+
VerifyRemoteOperation.make({
|
|
125
|
+
id: `${target.id}:npm-version-verify`,
|
|
126
|
+
targetId: target.id,
|
|
127
|
+
description: `Verify ${target.packageName}@${model.identity.version} exists on npm.`,
|
|
128
|
+
risk: "read-only",
|
|
129
|
+
gate: noApprovalGate("npm view verifies published package metadata without publishing."),
|
|
130
|
+
command: npmCommand(target, ["view", `${target.packageName}@${model.identity.version}`, "version", "--registry", target.registry], undefined, false)
|
|
71
131
|
})
|
|
72
132
|
];
|
|
73
133
|
return operations;
|
package/dist/targets/npm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/targets/npm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,cAAc,EAEd,uBAAuB,EACvB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/targets/npm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,UAAU,CAAA"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as FileSystem from "effect/FileSystem";
|
|
3
|
+
import * as Path from "effect/Path";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import { ConfigReadError } from "../config/errors.js";
|
|
6
|
+
import { ReleaseEligibilityCheckError } from "../planner/errors.js";
|
|
7
|
+
import { RELEASE_VERSION } from "../version.js";
|
|
8
|
+
export type * from "../types/effect-internal.js";
|
|
9
|
+
export { RELEASE_VERSION };
|
|
10
|
+
export declare const ReleasePlanFormat: Schema.Literals<readonly ["json", "text"]>;
|
|
11
|
+
export type ReleasePlanFormat = typeof ReleasePlanFormat.Type;
|
|
12
|
+
declare const ReleaseConfigOptions_base: Schema.Class<ReleaseConfigOptions, Schema.Struct<{
|
|
13
|
+
readonly root: Schema.optionalKey<Schema.String>;
|
|
14
|
+
readonly configPath: Schema.optionalKey<Schema.String>;
|
|
15
|
+
}>, {}>;
|
|
16
|
+
export declare class ReleaseConfigOptions extends ReleaseConfigOptions_base {
|
|
17
|
+
}
|
|
18
|
+
declare const PlanReleaseConfigOptions_base: Schema.Class<PlanReleaseConfigOptions, Schema.Struct<{
|
|
19
|
+
readonly root: Schema.optionalKey<Schema.String>;
|
|
20
|
+
readonly configPath: Schema.optionalKey<Schema.String>;
|
|
21
|
+
readonly format: Schema.optionalKey<Schema.Literals<readonly ["json", "text"]>>;
|
|
22
|
+
}>, {}>;
|
|
23
|
+
export declare class PlanReleaseConfigOptions extends PlanReleaseConfigOptions_base {
|
|
24
|
+
}
|
|
25
|
+
declare const RenderReleaseConfigOptions_base: Schema.Class<RenderReleaseConfigOptions, Schema.Struct<{
|
|
26
|
+
readonly root: Schema.optionalKey<Schema.String>;
|
|
27
|
+
readonly configPath: Schema.optionalKey<Schema.String>;
|
|
28
|
+
readonly execute: Schema.optionalKey<Schema.Boolean>;
|
|
29
|
+
}>, {}>;
|
|
30
|
+
export declare class RenderReleaseConfigOptions extends RenderReleaseConfigOptions_base {
|
|
31
|
+
}
|
|
32
|
+
declare const ReleaseExecutionOptions_base: Schema.Class<ReleaseExecutionOptions, Schema.Struct<{
|
|
33
|
+
readonly root: Schema.optionalKey<Schema.String>;
|
|
34
|
+
readonly configPath: Schema.optionalKey<Schema.String>;
|
|
35
|
+
readonly execute: Schema.optionalKey<Schema.Boolean>;
|
|
36
|
+
readonly approveIrreversible: Schema.optionalKey<Schema.Boolean>;
|
|
37
|
+
}>, {}>;
|
|
38
|
+
export declare class ReleaseExecutionOptions extends ReleaseExecutionOptions_base {
|
|
39
|
+
}
|
|
40
|
+
declare const ReleaseStatusOptions_base: Schema.Class<ReleaseStatusOptions, Schema.Struct<{
|
|
41
|
+
readonly root: Schema.optionalKey<Schema.String>;
|
|
42
|
+
readonly configPath: Schema.optionalKey<Schema.String>;
|
|
43
|
+
readonly format: Schema.optionalKey<Schema.Literals<readonly ["json", "text"]>>;
|
|
44
|
+
}>, {}>;
|
|
45
|
+
export declare class ReleaseStatusOptions extends ReleaseStatusOptions_base {
|
|
46
|
+
}
|
|
47
|
+
declare const ReleaseResumeConfigOptions_base: Schema.Class<ReleaseResumeConfigOptions, Schema.Struct<{
|
|
48
|
+
readonly root: Schema.optionalKey<Schema.String>;
|
|
49
|
+
readonly configPath: Schema.optionalKey<Schema.String>;
|
|
50
|
+
readonly execute: Schema.optionalKey<Schema.Boolean>;
|
|
51
|
+
readonly approveIrreversible: Schema.optionalKey<Schema.Boolean>;
|
|
52
|
+
}>, {}>;
|
|
53
|
+
export declare class ReleaseResumeConfigOptions extends ReleaseResumeConfigOptions_base {
|
|
54
|
+
}
|
|
55
|
+
declare const ReleaseReconcileConfigOptions_base: Schema.Class<ReleaseReconcileConfigOptions, Schema.Struct<{
|
|
56
|
+
readonly root: Schema.optionalKey<Schema.String>;
|
|
57
|
+
readonly configPath: Schema.optionalKey<Schema.String>;
|
|
58
|
+
readonly execute: Schema.optionalKey<Schema.Boolean>;
|
|
59
|
+
}>, {}>;
|
|
60
|
+
export declare class ReleaseReconcileConfigOptions extends ReleaseReconcileConfigOptions_base {
|
|
61
|
+
}
|
|
62
|
+
declare const ReleaseEligibilityConfigOptions_base: Schema.Class<ReleaseEligibilityConfigOptions, Schema.Struct<{
|
|
63
|
+
readonly root: Schema.optionalKey<Schema.String>;
|
|
64
|
+
readonly configPath: Schema.optionalKey<Schema.String>;
|
|
65
|
+
readonly packagePath: Schema.optionalKey<Schema.String>;
|
|
66
|
+
}>, {}>;
|
|
67
|
+
export declare class ReleaseEligibilityConfigOptions extends ReleaseEligibilityConfigOptions_base {
|
|
68
|
+
}
|
|
69
|
+
export declare const planReleaseConfig: (options?: PlanReleaseConfigOptions | undefined) => Effect.Effect<import("../domain/release.js").ReleasePlan, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../targets/registry.js").MissingTargetAdapterError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
|
|
70
|
+
export declare const renderReleaseConfigPlan: (options?: PlanReleaseConfigOptions | undefined) => Effect.Effect<string, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../targets/registry.js").MissingTargetAdapterError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
|
|
71
|
+
export declare const renderReleaseConfig: (options?: RenderReleaseConfigOptions | undefined) => Effect.Effect<import("../domain/evidence.js").EvidenceBundle, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").WorkspaceWriteError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
|
|
72
|
+
export declare const validateReleaseConfig: (options?: ReleaseConfigOptions | undefined) => Effect.Effect<import("../domain/evidence.js").EvidenceBundle, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
|
|
73
|
+
export declare const executeReleaseConfig: (options?: ReleaseExecutionOptions | undefined) => Effect.Effect<import("../domain/evidence.js").EvidenceBundle, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
|
|
74
|
+
export declare const verifyReleaseConfig: (options?: ReleaseConfigOptions | undefined) => Effect.Effect<import("../domain/evidence.js").EvidenceBundle, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto | import("../host/http.js").ReleaseHttp>;
|
|
75
|
+
export declare const runReleaseConfig: (options?: ReleaseExecutionOptions | undefined) => Effect.Effect<import("../domain/evidence.js").ReleaseWorkflowEvidence, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").WorkspaceWriteError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto | import("../host/http.js").ReleaseHttp>;
|
|
76
|
+
export declare const statusReleaseConfig: (options?: ReleaseStatusOptions | undefined) => Effect.Effect<import("../domain/status.js").ReleaseStatusReport, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").EvidenceReadError | import("../targets/registry.js").MissingTargetAdapterError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
|
|
77
|
+
export declare const renderReleaseStatus: (options?: ReleaseStatusOptions | undefined) => Effect.Effect<string, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").EvidenceReadError | import("../targets/registry.js").MissingTargetAdapterError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
|
|
78
|
+
export declare const resumeReleaseConfig: (options?: ReleaseResumeConfigOptions | undefined) => Effect.Effect<import("../domain/evidence.js").ReleaseWorkflowEvidence, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").EvidenceReadError | import("../planner/errors.js").WorkspaceWriteError | import("../planner/errors.js").ResumeBlockedError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto | import("../host/http.js").ReleaseHttp>;
|
|
79
|
+
export declare const reconcileReleaseConfig: (options?: ReleaseReconcileConfigOptions | undefined) => Effect.Effect<import("../domain/evidence.js").EvidenceBundle, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").RemoteStateInspectionError | import("../planner/errors.js").ReconciliationBlockedError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto | import("../host/http.js").ReleaseHttp>;
|
|
80
|
+
export declare const checkReleaseConfigEligibility: (options?: ReleaseEligibilityConfigOptions | undefined) => Effect.Effect<import("../domain/remote-state.js").ReleaseEligibilityDecision, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | ReleaseEligibilityCheckError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../host/host.js").ReleaseCommandRunner>;
|
|
81
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/workflows/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAuBrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,mBAAmB,6BAA6B,CAAA;AAEhD,OAAO,EAAE,eAAe,EAAE,CAAA;AAE1B,eAAO,MAAM,iBAAiB,4CAAoC,CAAA;AAClE,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;;;;;AAE7D,qBAAa,oBAAqB,SAAQ,yBAGxC;CAAG;;;;;;AAEL,qBAAa,wBAAyB,SAAQ,6BAI5C;CAAG;;;;;;AAEL,qBAAa,0BAA2B,SAAQ,+BAI9C;CAAG;;;;;;;AAEL,qBAAa,uBAAwB,SAAQ,4BAK3C;CAAG;;;;;;AAEL,qBAAa,oBAAqB,SAAQ,yBAIxC;CAAG;;;;;;;AAEL,qBAAa,0BAA2B,SAAQ,+BAK9C;CAAG;;;;;;AAEL,qBAAa,6BAA8B,SAAQ,kCAMjD;CAAG;;;;;;AAEL,qBAAa,+BAAgC,SAAQ,oCAMnD;CAAG;AAmGL,eAAO,MAAM,iBAAiB,6jBAQ5B,CAAA;AAEF,eAAO,MAAM,uBAAuB,yhBAOlC,CAAA;AAEF,eAAO,MAAM,mBAAmB,wuBAK9B,CAAA;AAEF,eAAO,MAAM,qBAAqB,4tBAKhC,CAAA;AAEF,eAAO,MAAM,oBAAoB,+tBAK/B,CAAA;AAEF,eAAO,MAAM,mBAAmB,owBAK9B,CAAA;AAEF,eAAO,MAAM,gBAAgB,q0BAK3B,CAAA;AAEF,eAAO,MAAM,mBAAmB,mnBAK9B,CAAA;AAEF,eAAO,MAAM,mBAAmB,wkBAO9B,CAAA;AAEF,eAAO,MAAM,mBAAmB,+6BAK9B,CAAA;AAEF,eAAO,MAAM,sBAAsB,q4BAKjC,CAAA;AAEF,eAAO,MAAM,6BAA6B,oaASxC,CAAA"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as FileSystem from "effect/FileSystem";
|
|
3
|
+
import * as Path from "effect/Path";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import { ConfigReadError } from "../config/errors.js";
|
|
6
|
+
import { parseReleaseIntent } from "../config/load.js";
|
|
7
|
+
import { DEFAULT_CONFIG_PATH } from "../config/schema.js";
|
|
8
|
+
import { ExecutionApproval } from "../domain/operation.js";
|
|
9
|
+
import { createReleasePlan } from "../planner/create-release-plan.js";
|
|
10
|
+
import { executePlan, renderPlan, runApprovedReleaseWorkflow, validatePlan, verifyPlan } from "../planner/executor.js";
|
|
11
|
+
import { renderPlanJson, renderPlanText } from "../planner/render-plan.js";
|
|
12
|
+
import { ReleaseResumeOptions, renderReleaseStatusJson, renderReleaseStatusText, resumeApprovedReleaseWorkflow, statusReleasePlan } from "../planner/status.js";
|
|
13
|
+
import { reconcileReleasePlan, ReleaseReconcileOptions } from "../planner/reconcile.js";
|
|
14
|
+
import { checkReleaseEligibility, ReleasePackageManifest, releaseEligibilityRemoteCheckFromIntent } from "../planner/release-eligibility.js";
|
|
15
|
+
import { ReleaseEligibilityCheckError } from "../planner/errors.js";
|
|
16
|
+
import { RELEASE_VERSION } from "../version.js";
|
|
17
|
+
export { RELEASE_VERSION };
|
|
18
|
+
export const ReleasePlanFormat = Schema.Literals(["json", "text"]);
|
|
19
|
+
export class ReleaseConfigOptions extends Schema.Class("ReleaseConfigOptions")({
|
|
20
|
+
root: Schema.optionalKey(Schema.String),
|
|
21
|
+
configPath: Schema.optionalKey(Schema.String)
|
|
22
|
+
}) {
|
|
23
|
+
}
|
|
24
|
+
export class PlanReleaseConfigOptions extends Schema.Class("PlanReleaseConfigOptions")({
|
|
25
|
+
root: Schema.optionalKey(Schema.String),
|
|
26
|
+
configPath: Schema.optionalKey(Schema.String),
|
|
27
|
+
format: Schema.optionalKey(ReleasePlanFormat)
|
|
28
|
+
}) {
|
|
29
|
+
}
|
|
30
|
+
export class RenderReleaseConfigOptions extends Schema.Class("RenderReleaseConfigOptions")({
|
|
31
|
+
root: Schema.optionalKey(Schema.String),
|
|
32
|
+
configPath: Schema.optionalKey(Schema.String),
|
|
33
|
+
execute: Schema.optionalKey(Schema.Boolean)
|
|
34
|
+
}) {
|
|
35
|
+
}
|
|
36
|
+
export class ReleaseExecutionOptions extends Schema.Class("ReleaseExecutionOptions")({
|
|
37
|
+
root: Schema.optionalKey(Schema.String),
|
|
38
|
+
configPath: Schema.optionalKey(Schema.String),
|
|
39
|
+
execute: Schema.optionalKey(Schema.Boolean),
|
|
40
|
+
approveIrreversible: Schema.optionalKey(Schema.Boolean)
|
|
41
|
+
}) {
|
|
42
|
+
}
|
|
43
|
+
export class ReleaseStatusOptions extends Schema.Class("ReleaseStatusOptions")({
|
|
44
|
+
root: Schema.optionalKey(Schema.String),
|
|
45
|
+
configPath: Schema.optionalKey(Schema.String),
|
|
46
|
+
format: Schema.optionalKey(ReleasePlanFormat)
|
|
47
|
+
}) {
|
|
48
|
+
}
|
|
49
|
+
export class ReleaseResumeConfigOptions extends Schema.Class("ReleaseResumeConfigOptions")({
|
|
50
|
+
root: Schema.optionalKey(Schema.String),
|
|
51
|
+
configPath: Schema.optionalKey(Schema.String),
|
|
52
|
+
execute: Schema.optionalKey(Schema.Boolean),
|
|
53
|
+
approveIrreversible: Schema.optionalKey(Schema.Boolean)
|
|
54
|
+
}) {
|
|
55
|
+
}
|
|
56
|
+
export class ReleaseReconcileConfigOptions extends Schema.Class("ReleaseReconcileConfigOptions")({
|
|
57
|
+
root: Schema.optionalKey(Schema.String),
|
|
58
|
+
configPath: Schema.optionalKey(Schema.String),
|
|
59
|
+
execute: Schema.optionalKey(Schema.Boolean)
|
|
60
|
+
}) {
|
|
61
|
+
}
|
|
62
|
+
export class ReleaseEligibilityConfigOptions extends Schema.Class("ReleaseEligibilityConfigOptions")({
|
|
63
|
+
root: Schema.optionalKey(Schema.String),
|
|
64
|
+
configPath: Schema.optionalKey(Schema.String),
|
|
65
|
+
packagePath: Schema.optionalKey(Schema.String)
|
|
66
|
+
}) {
|
|
67
|
+
}
|
|
68
|
+
const configRoot = (path, options) => {
|
|
69
|
+
if (options.root !== undefined) {
|
|
70
|
+
return options.root;
|
|
71
|
+
}
|
|
72
|
+
if (options.configPath !== undefined && path.isAbsolute(options.configPath)) {
|
|
73
|
+
return path.dirname(options.configPath);
|
|
74
|
+
}
|
|
75
|
+
return ".";
|
|
76
|
+
};
|
|
77
|
+
const configPath = (options) => options.configPath ?? DEFAULT_CONFIG_PATH;
|
|
78
|
+
const packagePath = (options) => options.packagePath ?? "package.json";
|
|
79
|
+
const configReadPath = (path, options) => {
|
|
80
|
+
const pathName = configPath(options);
|
|
81
|
+
return path.isAbsolute(pathName) ? pathName : path.resolve(configRoot(path, options), pathName);
|
|
82
|
+
};
|
|
83
|
+
const packageReadPath = (path, options) => {
|
|
84
|
+
const pathName = packagePath(options);
|
|
85
|
+
return path.isAbsolute(pathName) ? pathName : path.resolve(configRoot(path, options), pathName);
|
|
86
|
+
};
|
|
87
|
+
const approvalFromOptions = (options) => ExecutionApproval.make({
|
|
88
|
+
execute: options.execute ?? false,
|
|
89
|
+
approveIrreversible: options.approveIrreversible ?? false
|
|
90
|
+
});
|
|
91
|
+
const resumeOptionsFromConfigOptions = (options) => ReleaseResumeOptions.make({
|
|
92
|
+
execute: options.execute ?? false,
|
|
93
|
+
approveIrreversible: options.approveIrreversible ?? false
|
|
94
|
+
});
|
|
95
|
+
const reconcileOptionsFromConfigOptions = (options) => ReleaseReconcileOptions.make({
|
|
96
|
+
execute: options.execute ?? false
|
|
97
|
+
});
|
|
98
|
+
const renderApprovalFromOptions = (options) => ExecutionApproval.make({
|
|
99
|
+
execute: options.execute ?? false,
|
|
100
|
+
approveIrreversible: false
|
|
101
|
+
});
|
|
102
|
+
const readReleaseConfig = Effect.fn("workflows.config.readReleaseConfig")(function* (options) {
|
|
103
|
+
const fs = yield* FileSystem.FileSystem;
|
|
104
|
+
const path = yield* Path.Path;
|
|
105
|
+
const pathName = configPath(options);
|
|
106
|
+
const readPath = configReadPath(path, options);
|
|
107
|
+
return yield* fs.readFileString(readPath).pipe(Effect.mapError((error) => ConfigReadError.make({
|
|
108
|
+
path: pathName,
|
|
109
|
+
reason: error.message
|
|
110
|
+
})));
|
|
111
|
+
});
|
|
112
|
+
const decodePackageManifest = Schema.decodeUnknownEffect(ReleasePackageManifest);
|
|
113
|
+
const readPackageManifest = Effect.fn("workflows.config.readPackageManifest")(function* (options) {
|
|
114
|
+
const fs = yield* FileSystem.FileSystem;
|
|
115
|
+
const path = yield* Path.Path;
|
|
116
|
+
const pathName = packagePath(options);
|
|
117
|
+
const readPath = packageReadPath(path, options);
|
|
118
|
+
const contents = yield* fs.readFileString(readPath).pipe(Effect.mapError((error) => ConfigReadError.make({
|
|
119
|
+
path: pathName,
|
|
120
|
+
reason: error.message
|
|
121
|
+
})));
|
|
122
|
+
const parsed = yield* Effect.try({
|
|
123
|
+
try: () => JSON.parse(contents),
|
|
124
|
+
catch: (cause) => ReleaseEligibilityCheckError.make({
|
|
125
|
+
reason: `package manifest is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}`
|
|
126
|
+
})
|
|
127
|
+
});
|
|
128
|
+
return yield* decodePackageManifest(parsed).pipe(Effect.mapError((error) => ReleaseEligibilityCheckError.make({
|
|
129
|
+
reason: `package manifest is missing release identity fields: ${error.message}`
|
|
130
|
+
})));
|
|
131
|
+
});
|
|
132
|
+
export const planReleaseConfig = Effect.fn("workflows.config.planReleaseConfig")(function* (options = PlanReleaseConfigOptions.make({})) {
|
|
133
|
+
const path = yield* Path.Path;
|
|
134
|
+
const pathName = configPath(options);
|
|
135
|
+
const contents = yield* readReleaseConfig(options);
|
|
136
|
+
const intent = yield* parseReleaseIntent(contents, pathName);
|
|
137
|
+
return yield* createReleasePlan(intent, configRoot(path, options), pathName);
|
|
138
|
+
});
|
|
139
|
+
export const renderReleaseConfigPlan = Effect.fn("workflows.config.renderReleaseConfigPlan")(function* (options = PlanReleaseConfigOptions.make({})) {
|
|
140
|
+
const plan = yield* planReleaseConfig(options);
|
|
141
|
+
return (options.format ?? "text") === "json"
|
|
142
|
+
? renderPlanJson(plan)
|
|
143
|
+
: renderPlanText(plan);
|
|
144
|
+
});
|
|
145
|
+
export const renderReleaseConfig = Effect.fn("workflows.config.renderReleaseConfig")(function* (options = RenderReleaseConfigOptions.make({})) {
|
|
146
|
+
const plan = yield* planReleaseConfig(options);
|
|
147
|
+
return yield* renderPlan(plan, renderApprovalFromOptions(options));
|
|
148
|
+
});
|
|
149
|
+
export const validateReleaseConfig = Effect.fn("workflows.config.validateReleaseConfig")(function* (options = ReleaseConfigOptions.make({})) {
|
|
150
|
+
const plan = yield* planReleaseConfig(options);
|
|
151
|
+
return yield* validatePlan(plan);
|
|
152
|
+
});
|
|
153
|
+
export const executeReleaseConfig = Effect.fn("workflows.config.executeReleaseConfig")(function* (options = ReleaseExecutionOptions.make({})) {
|
|
154
|
+
const plan = yield* planReleaseConfig(options);
|
|
155
|
+
return yield* executePlan(plan, approvalFromOptions(options));
|
|
156
|
+
});
|
|
157
|
+
export const verifyReleaseConfig = Effect.fn("workflows.config.verifyReleaseConfig")(function* (options = ReleaseConfigOptions.make({})) {
|
|
158
|
+
const plan = yield* planReleaseConfig(options);
|
|
159
|
+
return yield* verifyPlan(plan);
|
|
160
|
+
});
|
|
161
|
+
export const runReleaseConfig = Effect.fn("workflows.config.runReleaseConfig")(function* (options = ReleaseExecutionOptions.make({})) {
|
|
162
|
+
const plan = yield* planReleaseConfig(options);
|
|
163
|
+
return yield* runApprovedReleaseWorkflow(plan, approvalFromOptions(options));
|
|
164
|
+
});
|
|
165
|
+
export const statusReleaseConfig = Effect.fn("workflows.config.statusReleaseConfig")(function* (options = ReleaseStatusOptions.make({})) {
|
|
166
|
+
const plan = yield* planReleaseConfig(options);
|
|
167
|
+
return yield* statusReleasePlan(plan);
|
|
168
|
+
});
|
|
169
|
+
export const renderReleaseStatus = Effect.fn("workflows.config.renderReleaseStatus")(function* (options = ReleaseStatusOptions.make({})) {
|
|
170
|
+
const report = yield* statusReleaseConfig(options);
|
|
171
|
+
return (options.format ?? "text") === "json"
|
|
172
|
+
? renderReleaseStatusJson(report)
|
|
173
|
+
: renderReleaseStatusText(report);
|
|
174
|
+
});
|
|
175
|
+
export const resumeReleaseConfig = Effect.fn("workflows.config.resumeReleaseConfig")(function* (options = ReleaseResumeConfigOptions.make({})) {
|
|
176
|
+
const plan = yield* planReleaseConfig(options);
|
|
177
|
+
return yield* resumeApprovedReleaseWorkflow(plan, resumeOptionsFromConfigOptions(options));
|
|
178
|
+
});
|
|
179
|
+
export const reconcileReleaseConfig = Effect.fn("workflows.config.reconcileReleaseConfig")(function* (options = ReleaseReconcileConfigOptions.make({})) {
|
|
180
|
+
const plan = yield* planReleaseConfig(options);
|
|
181
|
+
return yield* reconcileReleasePlan(plan, reconcileOptionsFromConfigOptions(options));
|
|
182
|
+
});
|
|
183
|
+
export const checkReleaseConfigEligibility = Effect.fn("workflows.config.checkReleaseConfigEligibility")(function* (options = ReleaseEligibilityConfigOptions.make({})) {
|
|
184
|
+
const pathName = configPath(options);
|
|
185
|
+
const contents = yield* readReleaseConfig(options);
|
|
186
|
+
const intent = yield* parseReleaseIntent(contents, pathName);
|
|
187
|
+
const manifest = yield* readPackageManifest(options);
|
|
188
|
+
const remoteCheck = yield* releaseEligibilityRemoteCheckFromIntent(manifest, intent);
|
|
189
|
+
return yield* checkReleaseEligibility(remoteCheck);
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/workflows/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
import { EvidenceBundle, ReleaseWorkflowEvidence, ReleaseWorkflowFailureEvidence } from "../domain/evidence.js";
|
|
4
|
+
import { ReleasePlan } from "../domain/release.js";
|
|
5
|
+
export type * from "../types/effect-internal.js";
|
|
6
|
+
declare const WorkflowEvidencePathsWritten_base: Schema.Class<WorkflowEvidencePathsWritten, Schema.Struct<{
|
|
7
|
+
readonly render: Schema.optionalKey<Schema.String>;
|
|
8
|
+
readonly validation: Schema.optionalKey<Schema.String>;
|
|
9
|
+
readonly execution: Schema.optionalKey<Schema.String>;
|
|
10
|
+
readonly verification: Schema.optionalKey<Schema.String>;
|
|
11
|
+
}>, {}>;
|
|
12
|
+
export declare class WorkflowEvidencePathsWritten extends WorkflowEvidencePathsWritten_base {
|
|
13
|
+
}
|
|
14
|
+
export declare const releaseEvidencePath: (plan: ReleasePlan, name: string) => string;
|
|
15
|
+
export declare const writeNamedEvidence: (plan: ReleasePlan, name: string, evidence: EvidenceBundle) => Effect.Effect<string, import("../planner/errors.js").EvidenceWriteError, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
|
|
16
|
+
export declare const writeFailedOperationEvidence: (plan: ReleasePlan, name: string, error: {
|
|
17
|
+
readonly evidence?: EvidenceBundle | undefined;
|
|
18
|
+
}) => Effect.Effect<string | undefined, import("../planner/errors.js").EvidenceWriteError, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
|
|
19
|
+
type WritableWorkflowEvidence = ReleaseWorkflowEvidence | ReleaseWorkflowFailureEvidence;
|
|
20
|
+
export declare const writeWorkflowEvidence: (plan: ReleasePlan, evidence: WritableWorkflowEvidence) => Effect.Effect<WorkflowEvidencePathsWritten, import("../planner/errors.js").EvidenceWriteError, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
|
|
21
|
+
//# sourceMappingURL=evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/workflows/evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAA;AAC/G,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIlD,mBAAmB,6BAA6B,CAAA;;;;;;;AAEhD,qBAAa,4BAA6B,SAAQ,iCAOhD;CAAG;AAEL,eAAO,MAAM,mBAAmB,GAAI,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,MAC5B,CAAA;AAE1C,eAAO,MAAM,kBAAkB,8MAQ7B,CAAA;AAEF,eAAO,MAAM,4BAA4B;wBAGV,cAAc,GAAG,SAAS;+JAMvD,CAAA;AAEF,KAAK,wBAAwB,GAAG,uBAAuB,GAAG,8BAA8B,CAAA;AAExF,eAAO,MAAM,qBAAqB,gOA8BhC,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
import { writeEvidenceBundle } from "../planner/evidence-recorder.js";
|
|
4
|
+
import { workflowEvidencePaths } from "../planner/status.js";
|
|
5
|
+
export class WorkflowEvidencePathsWritten extends Schema.Class("WorkflowEvidencePathsWritten")({
|
|
6
|
+
render: Schema.optionalKey(Schema.String),
|
|
7
|
+
validation: Schema.optionalKey(Schema.String),
|
|
8
|
+
execution: Schema.optionalKey(Schema.String),
|
|
9
|
+
verification: Schema.optionalKey(Schema.String)
|
|
10
|
+
}) {
|
|
11
|
+
}
|
|
12
|
+
export const releaseEvidencePath = (plan, name) => `${plan.evidenceDirectory}/${name}.json`;
|
|
13
|
+
export const writeNamedEvidence = Effect.fn("workflows.evidence.writeNamedEvidence")(function* (plan, name, evidence) {
|
|
14
|
+
const path = releaseEvidencePath(plan, name);
|
|
15
|
+
yield* writeEvidenceBundle(path, evidence, plan.source.root);
|
|
16
|
+
return path;
|
|
17
|
+
});
|
|
18
|
+
export const writeFailedOperationEvidence = Effect.fn("workflows.evidence.writeFailedOperationEvidence")(function* (plan, name, error) {
|
|
19
|
+
if (error.evidence === undefined) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return yield* writeNamedEvidence(plan, name, error.evidence);
|
|
23
|
+
});
|
|
24
|
+
export const writeWorkflowEvidence = Effect.fn("workflows.evidence.writeWorkflowEvidence")(function* (plan, evidence) {
|
|
25
|
+
const paths = workflowEvidencePaths(plan);
|
|
26
|
+
const written = {};
|
|
27
|
+
if (evidence.render !== undefined) {
|
|
28
|
+
written.render = paths.render;
|
|
29
|
+
yield* writeEvidenceBundle(paths.render, evidence.render, plan.source.root);
|
|
30
|
+
}
|
|
31
|
+
if (evidence.validation !== undefined) {
|
|
32
|
+
written.validation = paths.validation;
|
|
33
|
+
yield* writeEvidenceBundle(paths.validation, evidence.validation, plan.source.root);
|
|
34
|
+
}
|
|
35
|
+
if (evidence.execution !== undefined) {
|
|
36
|
+
written.execution = paths.execution;
|
|
37
|
+
yield* writeEvidenceBundle(paths.execution, evidence.execution, plan.source.root);
|
|
38
|
+
}
|
|
39
|
+
if (evidence.verification !== undefined) {
|
|
40
|
+
written.verification = paths.verification;
|
|
41
|
+
yield* writeEvidenceBundle(paths.verification, evidence.verification, plan.source.root);
|
|
42
|
+
}
|
|
43
|
+
return WorkflowEvidencePathsWritten.make(written);
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/workflows/evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
3
|
+
import { ReleaseHttp } from "../host/http.js";
|
|
4
|
+
import { TargetRegistry } from "../targets/registry.js";
|
|
5
|
+
export type * from "../types/effect-internal.js";
|
|
6
|
+
export declare const LiveReleaseWorkflowLayer: Layer.Layer<ReleaseHttp | TargetRegistry, never, HttpClient.HttpClient>;
|
|
7
|
+
//# sourceMappingURL=live.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/workflows/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,mBAAmB,6BAA6B,CAAA;AAEhD,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,KAAK,CAChD,WAAW,GAAG,cAAc,EAC5B,KAAK,EACL,UAAU,CAAC,UAAU,CAItB,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { LiveReleaseHttpLayer } from "../host/http-live.js";
|
|
3
|
+
import { LiveTargetRegistryLayer } from "../targets/live.js";
|
|
4
|
+
export const LiveReleaseWorkflowLayer = Layer.mergeAll(LiveReleaseHttpLayer, LiveTargetRegistryLayer);
|
|
5
|
+
//# sourceMappingURL=live.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/workflows/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAK5D,MAAM,CAAC,MAAM,wBAAwB,GAIjC,KAAK,CAAC,QAAQ,CAChB,oBAAoB,EACpB,uBAAuB,CACxB,CAAA"}
|
package/examples/README.md
CHANGED
|
@@ -18,12 +18,15 @@ Focused examples:
|
|
|
18
18
|
|
|
19
19
|
- `multi-target`: one release coordinated across GitHub Releases, npm, and Homebrew.
|
|
20
20
|
- `npm-only`: npm package directory with native npm dry-run validation.
|
|
21
|
+
- `npm-first-publish`: token-based npm bootstrap config for the first version before switching to trusted publishing.
|
|
21
22
|
- `github-release`: GitHub release asset with simulated GitHub dry-run validation.
|
|
22
23
|
- `homebrew-tap`: Homebrew tap formula rendering with simulated formula validation.
|
|
23
24
|
- `pypi-registry`: prebuilt Python distribution planned for TestPyPI with Twine.
|
|
24
25
|
- `scoop-bucket`: Scoop bucket manifest rendering with simulated validation.
|
|
25
26
|
- `non-strict-skips`: non-strict config that records skipped dry-run evidence.
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
`npm-first-publish` demonstrates only the bootstrap shape for a package that
|
|
29
|
+
does not exist on npm yet. Replace it with trusted publishing after the first
|
|
30
|
+
version exists. TestPyPI is still a real registry publish target, not a dry-run.
|
|
31
|
+
The examples only render plans; do not run publish operations without
|
|
32
|
+
intentional credentials and approval flags.
|
|
@@ -36,8 +36,13 @@
|
|
|
36
36
|
"_tag": "NpmRegistryTarget",
|
|
37
37
|
"id": "npm",
|
|
38
38
|
"registry": "https://registry.npmjs.org",
|
|
39
|
+
"packageName": "release-example-multi-target",
|
|
39
40
|
"packagePath": ".",
|
|
40
|
-
"
|
|
41
|
+
"trustedPublishing": {
|
|
42
|
+
"provider": "github-actions",
|
|
43
|
+
"workflow": "release.yml",
|
|
44
|
+
"packageExists": true
|
|
45
|
+
},
|
|
41
46
|
"dryRunSupport": "native",
|
|
42
47
|
"mutability": "immutable",
|
|
43
48
|
"recovery": "publish-new-version"
|