@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
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as Schema from "effect/Schema";
|
|
2
|
+
import { OperationId, OperationRisk } from "./operation.js";
|
|
3
|
+
import { TargetId } from "./target.js";
|
|
4
|
+
export const ReleaseWorkflowPhase = Schema.Literals(["render", "validation", "execution", "verification"]);
|
|
5
|
+
export const ReleaseOperationStatus = Schema.Literals([
|
|
6
|
+
"pending",
|
|
7
|
+
"passed",
|
|
8
|
+
"warning",
|
|
9
|
+
"skipped",
|
|
10
|
+
"failed",
|
|
11
|
+
"blocked"
|
|
12
|
+
]);
|
|
13
|
+
export const ReleaseOverallStatus = Schema.Literals([
|
|
14
|
+
"not-started",
|
|
15
|
+
"in-progress",
|
|
16
|
+
"failed",
|
|
17
|
+
"blocked",
|
|
18
|
+
"complete"
|
|
19
|
+
]);
|
|
20
|
+
export const ReleaseResumeAction = Schema.Literals(["skip", "run", "retry-read-only", "block"]);
|
|
21
|
+
export class ReleaseOperationStatusRecord extends Schema.Class("ReleaseOperationStatusRecord")({
|
|
22
|
+
operationId: OperationId,
|
|
23
|
+
targetId: Schema.optionalKey(TargetId),
|
|
24
|
+
phase: ReleaseWorkflowPhase,
|
|
25
|
+
risk: OperationRisk,
|
|
26
|
+
status: ReleaseOperationStatus,
|
|
27
|
+
resumeAction: ReleaseResumeAction,
|
|
28
|
+
evidenceId: Schema.optionalKey(Schema.String),
|
|
29
|
+
reason: Schema.optionalKey(Schema.String)
|
|
30
|
+
}) {
|
|
31
|
+
}
|
|
32
|
+
export class ReleasePhaseStatusRecord extends Schema.Class("ReleasePhaseStatusRecord")({
|
|
33
|
+
phase: ReleaseWorkflowPhase,
|
|
34
|
+
status: ReleaseOperationStatus,
|
|
35
|
+
completed: Schema.Number,
|
|
36
|
+
total: Schema.Number
|
|
37
|
+
}) {
|
|
38
|
+
}
|
|
39
|
+
export class ReleaseStatusReport extends Schema.Class("ReleaseStatusReport")({
|
|
40
|
+
schemaVersion: Schema.Literal("release-status/v1"),
|
|
41
|
+
releaseName: Schema.String,
|
|
42
|
+
releaseVersion: Schema.String,
|
|
43
|
+
overallStatus: ReleaseOverallStatus,
|
|
44
|
+
canResume: Schema.Boolean,
|
|
45
|
+
evidenceDirectory: Schema.String,
|
|
46
|
+
phases: Schema.Array(ReleasePhaseStatusRecord),
|
|
47
|
+
operations: Schema.Array(ReleaseOperationStatusRecord)
|
|
48
|
+
}) {
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/domain/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAItC,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;AAG1G,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,QAAQ,CAAC;IACpD,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;CACV,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC;IAClD,aAAa;IACb,aAAa;IACb,QAAQ;IACR,SAAS;IACT,UAAU;CACX,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAA;AAG/F,MAAM,OAAO,4BAA6B,SAAQ,MAAM,CAAC,KAAK,CAC5D,8BAA8B,CAC/B,CAAC;IACA,WAAW,EAAE,WAAW;IACxB,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;IACtC,KAAK,EAAE,oBAAoB;IAC3B,IAAI,EAAE,aAAa;IACnB,MAAM,EAAE,sBAAsB;IAC9B,YAAY,EAAE,mBAAmB;IACjC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CAC1C,CAAC;CAAG;AAEL,MAAM,OAAO,wBAAyB,SAAQ,MAAM,CAAC,KAAK,CAA2B,0BAA0B,CAAC,CAAC;IAC/G,KAAK,EAAE,oBAAoB;IAC3B,MAAM,EAAE,sBAAsB;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC;CAAG;AAEL,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,KAAK,CAAsB,qBAAqB,CAAC,CAAC;IAChG,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAClD,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,cAAc,EAAE,MAAM,CAAC,MAAM;IAC7B,aAAa,EAAE,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC,OAAO;IACzB,iBAAiB,EAAE,MAAM,CAAC,MAAM;IAChC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC;CACvD,CAAC;CAAG"}
|
package/dist/domain/target.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as Schema from "effect/Schema";
|
|
|
2
2
|
export type * from "../types/effect-internal.js";
|
|
3
3
|
export declare const TargetId: Schema.String;
|
|
4
4
|
export type TargetId = typeof TargetId.Type;
|
|
5
|
-
export declare const TargetAuthRequirement: Schema.Literals<readonly ["none", "env-token", "cli-auth"]>;
|
|
5
|
+
export declare const TargetAuthRequirement: Schema.Literals<readonly ["none", "env-token", "cli-auth", "trusted-publishing"]>;
|
|
6
6
|
export type TargetAuthRequirement = typeof TargetAuthRequirement.Type;
|
|
7
7
|
export declare const TargetDryRunSupport: Schema.Literals<readonly ["none", "native", "simulated"]>;
|
|
8
8
|
export type TargetDryRunSupport = typeof TargetDryRunSupport.Type;
|
|
@@ -14,11 +14,23 @@ export declare const TargetValidationStrategy: Schema.Literals<readonly ["native
|
|
|
14
14
|
export type TargetValidationStrategy = typeof TargetValidationStrategy.Type;
|
|
15
15
|
export declare const NpmAccess: Schema.Literals<readonly ["public", "restricted"]>;
|
|
16
16
|
export type NpmAccess = typeof NpmAccess.Type;
|
|
17
|
+
export declare const NpmTrustedPublishingProvider: Schema.Literals<readonly ["github-actions"]>;
|
|
18
|
+
export type NpmTrustedPublishingProvider = typeof NpmTrustedPublishingProvider.Type;
|
|
19
|
+
declare const NpmTrustedPublishingConfig_base: Schema.Class<NpmTrustedPublishingConfig, Schema.Struct<{
|
|
20
|
+
readonly provider: Schema.Literals<readonly ["github-actions"]>;
|
|
21
|
+
readonly workflow: Schema.String;
|
|
22
|
+
readonly packageExists: Schema.Literal<true>;
|
|
23
|
+
readonly verifyPackageExists: Schema.optionalKey<Schema.Boolean>;
|
|
24
|
+
}>, {}>;
|
|
25
|
+
export declare class NpmTrustedPublishingConfig extends NpmTrustedPublishingConfig_base {
|
|
26
|
+
}
|
|
17
27
|
declare const NpmRegistryTarget_base: Schema.Class<NpmRegistryTarget, Schema.TaggedStruct<"NpmRegistryTarget", {
|
|
18
28
|
readonly id: Schema.String;
|
|
19
29
|
readonly registry: Schema.String;
|
|
30
|
+
readonly packageName: Schema.String;
|
|
20
31
|
readonly packagePath: Schema.String;
|
|
21
32
|
readonly tokenEnv: Schema.optionalKey<Schema.String>;
|
|
33
|
+
readonly trustedPublishing: Schema.optionalKey<typeof NpmTrustedPublishingConfig>;
|
|
22
34
|
readonly access: Schema.optionalKey<Schema.Literals<readonly ["public", "restricted"]>>;
|
|
23
35
|
readonly provenance: Schema.optionalKey<Schema.Boolean>;
|
|
24
36
|
readonly dryRunSupport: Schema.Literals<readonly ["none", "native", "simulated"]>;
|
|
@@ -88,14 +100,32 @@ export declare class ScoopBucketTarget extends ScoopBucketTarget_base {
|
|
|
88
100
|
}
|
|
89
101
|
export declare const TargetConfig: Schema.Union<readonly [typeof NpmRegistryTarget, typeof GitHubReleaseTarget, typeof HomebrewTapTarget, typeof PyPiRegistryTarget, typeof ScoopBucketTarget]>;
|
|
90
102
|
export type TargetConfig = typeof TargetConfig.Type;
|
|
103
|
+
export declare const TargetRunsIn: Schema.Literals<readonly ["ci"]>;
|
|
104
|
+
export type TargetRunsIn = typeof TargetRunsIn.Type;
|
|
105
|
+
declare const TargetRequiredPermission_base: Schema.Class<TargetRequiredPermission, Schema.Struct<{
|
|
106
|
+
readonly name: Schema.String;
|
|
107
|
+
readonly value: Schema.String;
|
|
108
|
+
}>, {}>;
|
|
109
|
+
export declare class TargetRequiredPermission extends TargetRequiredPermission_base {
|
|
110
|
+
}
|
|
111
|
+
declare const TargetAuthSetup_base: Schema.Class<TargetAuthSetup, Schema.Struct<{
|
|
112
|
+
readonly runsIn: Schema.Literals<readonly ["ci"]>;
|
|
113
|
+
readonly provider: Schema.Literals<readonly ["github-actions"]>;
|
|
114
|
+
readonly workflow: Schema.String;
|
|
115
|
+
readonly requiredPermissions: Schema.$Array<typeof TargetRequiredPermission>;
|
|
116
|
+
readonly prerequisites: Schema.$Array<Schema.String>;
|
|
117
|
+
}>, {}>;
|
|
118
|
+
export declare class TargetAuthSetup extends TargetAuthSetup_base {
|
|
119
|
+
}
|
|
91
120
|
declare const TargetCapabilities_base: Schema.Class<TargetCapabilities, Schema.Struct<{
|
|
92
121
|
readonly targetId: Schema.String;
|
|
93
122
|
readonly targetTag: Schema.String;
|
|
94
|
-
readonly authRequirement: Schema.Literals<readonly ["none", "env-token", "cli-auth"]>;
|
|
123
|
+
readonly authRequirement: Schema.Literals<readonly ["none", "env-token", "cli-auth", "trusted-publishing"]>;
|
|
95
124
|
readonly dryRunSupport: Schema.Literals<readonly ["none", "native", "simulated"]>;
|
|
96
125
|
readonly mutability: Schema.Literals<readonly ["immutable", "mutable-release", "mutable-index"]>;
|
|
97
126
|
readonly recovery: Schema.Literals<readonly ["publish-new-version", "delete-and-recreate", "manual"]>;
|
|
98
127
|
readonly validationStrategy: Schema.Literals<readonly ["native-command", "simulated-plan", "skipped"]>;
|
|
128
|
+
readonly authSetup: Schema.optionalKey<typeof TargetAuthSetup>;
|
|
99
129
|
}>, {}>;
|
|
100
130
|
export declare class TargetCapabilities extends TargetCapabilities_base {
|
|
101
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../src/domain/target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,mBAAmB,6BAA6B,CAAA;AAEhD,eAAO,MAAM,QAAQ,eAAgB,CAAA;AACrC,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAE3C,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../../src/domain/target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,mBAAmB,6BAA6B,CAAA;AAEhD,eAAO,MAAM,QAAQ,eAAgB,CAAA;AACrC,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAE3C,eAAO,MAAM,qBAAqB,mFAKhC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AAErE,eAAO,MAAM,mBAAmB,2DAAmD,CAAA;AACnF,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,IAAI,CAAA;AAEjE,eAAO,MAAM,gBAAgB,6EAAqE,CAAA;AAClG,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AAE3D,eAAO,MAAM,cAAc,oFAA4E,CAAA;AACvG,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD,eAAO,MAAM,wBAAwB,2EAAmE,CAAA;AACxG,MAAM,MAAM,wBAAwB,GAAG,OAAO,wBAAwB,CAAC,IAAI,CAAA;AAE3E,eAAO,MAAM,SAAS,oDAA4C,CAAA;AAClE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C,eAAO,MAAM,4BAA4B,8CAAsC,CAAA;AAC/E,MAAM,MAAM,4BAA4B,GAAG,OAAO,4BAA4B,CAAC,IAAI,CAAA;;;;;;;AAEnF,qBAAa,0BAA2B,SAAQ,+BAO9C;CAAG;;;;;;;;;;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAYrC;CAAG;;;;;;;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBASvC;CAAG;;;;;;;;;;;;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAcrC;CAAG;;;;;;;;;;AAEL,qBAAa,kBAAmB,SAAQ,uBAQtC;CAAG;;;;;;;;;;;;;;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAgBrC;CAAG;AAEL,eAAO,MAAM,YAAY,8JAMvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,YAAY,kCAA0B,CAAA;AACnD,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;;;;;AAEnD,qBAAa,wBAAyB,SAAQ,6BAG5C;CAAG;;;;;;;;AAEL,qBAAa,eAAgB,SAAQ,oBAMnC;CAAG;;;;;;;;;;;AAEL,qBAAa,kBAAmB,SAAQ,uBAStC;CAAG;AAEL,eAAO,MAAM,WAAW,GAAI,MAAM,YAAY,EAAE,OAAO,YAAY,KAAG,MACrC,CAAA;AAEjC,eAAO,MAAM,uBAAuB,GAAI,MAAM,kBAAkB,EAAE,OAAO,kBAAkB,KAAG,MACjD,CAAA;AAE7C,eAAO,MAAM,qBAAqB,GAAI,QAAQ,YAAY,KAAG,qBAW5D,CAAA"}
|
package/dist/domain/target.js
CHANGED
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
import * as Schema from "effect/Schema";
|
|
2
2
|
export const TargetId = Schema.String;
|
|
3
|
-
export const TargetAuthRequirement = Schema.Literals([
|
|
3
|
+
export const TargetAuthRequirement = Schema.Literals([
|
|
4
|
+
"none",
|
|
5
|
+
"env-token",
|
|
6
|
+
"cli-auth",
|
|
7
|
+
"trusted-publishing"
|
|
8
|
+
]);
|
|
4
9
|
export const TargetDryRunSupport = Schema.Literals(["none", "native", "simulated"]);
|
|
5
10
|
export const TargetMutability = Schema.Literals(["immutable", "mutable-release", "mutable-index"]);
|
|
6
11
|
export const TargetRecovery = Schema.Literals(["publish-new-version", "delete-and-recreate", "manual"]);
|
|
7
12
|
export const TargetValidationStrategy = Schema.Literals(["native-command", "simulated-plan", "skipped"]);
|
|
8
13
|
export const NpmAccess = Schema.Literals(["public", "restricted"]);
|
|
14
|
+
export const NpmTrustedPublishingProvider = Schema.Literals(["github-actions"]);
|
|
15
|
+
export class NpmTrustedPublishingConfig extends Schema.Class("NpmTrustedPublishingConfig")({
|
|
16
|
+
provider: NpmTrustedPublishingProvider,
|
|
17
|
+
workflow: Schema.String,
|
|
18
|
+
packageExists: Schema.Literal(true),
|
|
19
|
+
verifyPackageExists: Schema.optionalKey(Schema.Boolean)
|
|
20
|
+
}) {
|
|
21
|
+
}
|
|
9
22
|
export class NpmRegistryTarget extends Schema.TaggedClass()("NpmRegistryTarget", {
|
|
10
23
|
id: TargetId,
|
|
11
24
|
registry: Schema.String,
|
|
25
|
+
packageName: Schema.String,
|
|
12
26
|
packagePath: Schema.String,
|
|
13
27
|
tokenEnv: Schema.optionalKey(Schema.String),
|
|
28
|
+
trustedPublishing: Schema.optionalKey(NpmTrustedPublishingConfig),
|
|
14
29
|
access: Schema.optionalKey(NpmAccess),
|
|
15
30
|
provenance: Schema.optionalKey(Schema.Boolean),
|
|
16
31
|
dryRunSupport: TargetDryRunSupport,
|
|
@@ -80,6 +95,20 @@ export const TargetConfig = Schema.Union([
|
|
|
80
95
|
PyPiRegistryTarget,
|
|
81
96
|
ScoopBucketTarget
|
|
82
97
|
]);
|
|
98
|
+
export const TargetRunsIn = Schema.Literals(["ci"]);
|
|
99
|
+
export class TargetRequiredPermission extends Schema.Class("TargetRequiredPermission")({
|
|
100
|
+
name: Schema.String,
|
|
101
|
+
value: Schema.String
|
|
102
|
+
}) {
|
|
103
|
+
}
|
|
104
|
+
export class TargetAuthSetup extends Schema.Class("TargetAuthSetup")({
|
|
105
|
+
runsIn: TargetRunsIn,
|
|
106
|
+
provider: NpmTrustedPublishingProvider,
|
|
107
|
+
workflow: Schema.String,
|
|
108
|
+
requiredPermissions: Schema.Array(TargetRequiredPermission),
|
|
109
|
+
prerequisites: Schema.Array(Schema.String)
|
|
110
|
+
}) {
|
|
111
|
+
}
|
|
83
112
|
export class TargetCapabilities extends Schema.Class("TargetCapabilities")({
|
|
84
113
|
targetId: TargetId,
|
|
85
114
|
targetTag: Schema.String,
|
|
@@ -87,12 +116,16 @@ export class TargetCapabilities extends Schema.Class("TargetCapabilities")({
|
|
|
87
116
|
dryRunSupport: TargetDryRunSupport,
|
|
88
117
|
mutability: TargetMutability,
|
|
89
118
|
recovery: TargetRecovery,
|
|
90
|
-
validationStrategy: TargetValidationStrategy
|
|
119
|
+
validationStrategy: TargetValidationStrategy,
|
|
120
|
+
authSetup: Schema.optionalKey(TargetAuthSetup)
|
|
91
121
|
}) {
|
|
92
122
|
}
|
|
93
123
|
export const targetOrder = (left, right) => left.id.localeCompare(right.id);
|
|
94
124
|
export const targetCapabilitiesOrder = (left, right) => left.targetId.localeCompare(right.targetId);
|
|
95
125
|
export const targetAuthRequirement = (target) => {
|
|
126
|
+
if (target._tag === "NpmRegistryTarget" && target.trustedPublishing !== undefined) {
|
|
127
|
+
return "trusted-publishing";
|
|
128
|
+
}
|
|
96
129
|
if (target._tag === "PyPiRegistryTarget") {
|
|
97
130
|
return target.usernameEnv === undefined && target.passwordEnv === undefined ? "cli-auth" : "env-token";
|
|
98
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/domain/target.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAA;AAGrC,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/domain/target.ts"],"names":[],"mappings":"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"}
|
package/dist/host/host.d.ts
CHANGED
|
@@ -2,22 +2,13 @@ import * as Context from "effect/Context";
|
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import * as Layer from "effect/Layer";
|
|
4
4
|
import * as Schema from "effect/Schema";
|
|
5
|
-
import { ChecksumAlgorithm } from "../domain/artifact.js";
|
|
6
5
|
import { CommandSpec } from "../domain/operation.js";
|
|
7
6
|
export type * from "../types/effect-internal.js";
|
|
8
|
-
declare const
|
|
7
|
+
declare const CommandRunnerError_base: Schema.Class<CommandRunnerError, Schema.TaggedStruct<"CommandRunnerError", {
|
|
9
8
|
readonly operation: Schema.String;
|
|
10
|
-
readonly path: Schema.optionalKey<Schema.String>;
|
|
11
9
|
readonly reason: Schema.String;
|
|
12
10
|
}>, import("effect/Cause").YieldableError>;
|
|
13
|
-
export declare class
|
|
14
|
-
}
|
|
15
|
-
declare const FileInfo_base: Schema.Class<FileInfo, Schema.Struct<{
|
|
16
|
-
readonly path: Schema.String;
|
|
17
|
-
readonly sizeBytes: Schema.Number;
|
|
18
|
-
readonly kind: Schema.Literals<readonly ["file", "directory", "other"]>;
|
|
19
|
-
}>, {}>;
|
|
20
|
-
export declare class FileInfo extends FileInfo_base {
|
|
11
|
+
export declare class CommandRunnerError extends CommandRunnerError_base {
|
|
21
12
|
}
|
|
22
13
|
declare const CommandResult_base: Schema.Class<CommandResult, Schema.Struct<{
|
|
23
14
|
readonly command: typeof CommandSpec;
|
|
@@ -30,18 +21,11 @@ declare const CommandResult_base: Schema.Class<CommandResult, Schema.Struct<{
|
|
|
30
21
|
}>, {}>;
|
|
31
22
|
export declare class CommandResult extends CommandResult_base {
|
|
32
23
|
}
|
|
33
|
-
export interface
|
|
34
|
-
readonly
|
|
35
|
-
readonly writeFileString: (path: string, contents: string) => Effect.Effect<void, HostError>;
|
|
36
|
-
readonly stat: (path: string) => Effect.Effect<FileInfo, HostError>;
|
|
37
|
-
readonly hashFile: (path: string, algorithm: ChecksumAlgorithm) => Effect.Effect<string, HostError>;
|
|
38
|
-
readonly readEnv: (name: string) => Effect.Effect<string | undefined, never>;
|
|
39
|
-
readonly runCommand: (command: CommandSpec) => Effect.Effect<CommandResult, HostError>;
|
|
40
|
-
readonly now: Effect.Effect<string, never>;
|
|
24
|
+
export interface ReleaseCommandRunnerShape {
|
|
25
|
+
readonly runCommand: (command: CommandSpec) => Effect.Effect<CommandResult, CommandRunnerError>;
|
|
41
26
|
}
|
|
42
|
-
declare const
|
|
43
|
-
export declare class
|
|
27
|
+
declare const ReleaseCommandRunner_base: Context.ServiceClass<ReleaseCommandRunner, "ReleaseCommandRunner", ReleaseCommandRunnerShape>;
|
|
28
|
+
export declare class ReleaseCommandRunner extends ReleaseCommandRunner_base {
|
|
44
29
|
}
|
|
45
|
-
export declare const
|
|
46
|
-
export declare const missingEnvNames: (command: CommandSpec) => Effect.Effect<string[], never, ReleaseHost>;
|
|
30
|
+
export declare const ReleaseCommandRunnerTestLayer: (commandRunner: ReleaseCommandRunnerShape) => Layer.Layer<ReleaseCommandRunner>;
|
|
47
31
|
//# sourceMappingURL=host.d.ts.map
|
package/dist/host/host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/host/host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/host/host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,mBAAmB,6BAA6B,CAAA;;;;;AAEhD,qBAAa,kBAAmB,SAAQ,uBAGtC;CAAG;;;;;;;;;;AAEL,qBAAa,aAAc,SAAQ,kBAQjC;CAAG;AAEL,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAA;CAChG;;AAED,qBAAa,oBAAqB,SAAQ,yBAGf;CAAG;AAE9B,eAAO,MAAM,6BAA6B,GACxC,eAAe,yBAAyB,KACvC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CACiB,CAAA"}
|
package/dist/host/host.js
CHANGED
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
import * as Context from "effect/Context";
|
|
2
|
-
import * as Effect from "effect/Effect";
|
|
3
2
|
import * as Layer from "effect/Layer";
|
|
4
3
|
import * as Schema from "effect/Schema";
|
|
5
4
|
import { CommandSpec } from "../domain/operation.js";
|
|
6
|
-
export class
|
|
5
|
+
export class CommandRunnerError extends Schema.TaggedErrorClass()("CommandRunnerError", {
|
|
7
6
|
operation: Schema.String,
|
|
8
|
-
path: Schema.optionalKey(Schema.String),
|
|
9
7
|
reason: Schema.String
|
|
10
8
|
}) {
|
|
11
9
|
}
|
|
12
|
-
export class FileInfo extends Schema.Class("FileInfo")({
|
|
13
|
-
path: Schema.String,
|
|
14
|
-
sizeBytes: Schema.Number,
|
|
15
|
-
kind: Schema.Literals(["file", "directory", "other"])
|
|
16
|
-
}) {
|
|
17
|
-
}
|
|
18
10
|
export class CommandResult extends Schema.Class("CommandResult")({
|
|
19
11
|
command: CommandSpec,
|
|
20
12
|
exitCode: Schema.Number,
|
|
@@ -25,18 +17,7 @@ export class CommandResult extends Schema.Class("CommandResult")({
|
|
|
25
17
|
durationMillis: Schema.Number
|
|
26
18
|
}) {
|
|
27
19
|
}
|
|
28
|
-
export class
|
|
20
|
+
export class ReleaseCommandRunner extends Context.Service()("ReleaseCommandRunner") {
|
|
29
21
|
}
|
|
30
|
-
export const
|
|
31
|
-
export const missingEnvNames = Effect.fn("missingEnvNames")(function* (command) {
|
|
32
|
-
const host = yield* ReleaseHost;
|
|
33
|
-
const missing = [];
|
|
34
|
-
for (const name of command.requiredEnv) {
|
|
35
|
-
const value = yield* host.readEnv(name);
|
|
36
|
-
if (value === undefined) {
|
|
37
|
-
missing.push(name);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return missing;
|
|
41
|
-
});
|
|
22
|
+
export const ReleaseCommandRunnerTestLayer = (commandRunner) => Layer.succeed(ReleaseCommandRunner)(commandRunner);
|
|
42
23
|
//# sourceMappingURL=host.js.map
|
package/dist/host/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/host/host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/host/host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAIpD,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,gBAAgB,EAAsB,CAAC,oBAAoB,EAAE;IAC1G,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC;CAAG;AAEL,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,KAAK,CAAgB,eAAe,CAAC,CAAC;IAC9E,OAAO,EAAE,WAAW;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,cAAc,EAAE,MAAM,CAAC,MAAM;CAC9B,CAAC;CAAG;AAML,MAAM,OAAO,oBAAqB,SAAQ,OAAO,CAAC,OAAO,EAGtD,CAAC,sBAAsB,CAAC;CAAG;AAE9B,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,aAAwC,EACL,EAAE,CACrC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,aAAa,CAAC,CAAA"}
|
package/dist/host/http-live.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as Layer from "effect/Layer";
|
|
2
2
|
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
3
|
-
import { ReleaseHost } from "./host.js";
|
|
4
3
|
import { ReleaseHttp } from "./http.js";
|
|
5
4
|
export type * from "../types/effect-internal.js";
|
|
6
|
-
export declare const LiveReleaseHttpLayer: Layer.Layer<ReleaseHttp, never,
|
|
5
|
+
export declare const LiveReleaseHttpLayer: Layer.Layer<ReleaseHttp, never, HttpClient.HttpClient>;
|
|
7
6
|
//# sourceMappingURL=http-live.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-live.d.ts","sourceRoot":"","sources":["../../src/host/http-live.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-live.d.ts","sourceRoot":"","sources":["../../src/host/http-live.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAA;AAG7D,OAAO,EAAyB,WAAW,EAAE,MAAM,WAAW,CAAA;AAE9D,mBAAmB,6BAA6B,CAAA;AAsDhD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CA4CrF,CAAA"}
|
package/dist/host/http-live.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
+
import * as Config from "effect/Config";
|
|
1
2
|
import * as Effect from "effect/Effect";
|
|
2
3
|
import * as Layer from "effect/Layer";
|
|
4
|
+
import * as Option from "effect/Option";
|
|
3
5
|
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
4
6
|
import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
|
|
5
|
-
import { ReleaseHost } from "./host.js";
|
|
6
7
|
import { HttpError, HttpResult, ReleaseHttp } from "./http.js";
|
|
7
8
|
const formatUnknown = (cause) => cause instanceof Error ? cause.message : String(cause);
|
|
8
|
-
const
|
|
9
|
+
const nowIso = Effect.fn("http.nowIso")(function* () {
|
|
10
|
+
const millis = yield* Effect.clockWith((clock) => clock.currentTimeMillis);
|
|
11
|
+
return new Date(millis).toISOString();
|
|
12
|
+
});
|
|
13
|
+
const readOptionalEnv = (name) => Config.string(name).pipe(Effect.option, Effect.map(Option.getOrUndefined));
|
|
14
|
+
const resolveHeaders = Effect.fn("resolveHeaders")(function* (request) {
|
|
9
15
|
const envNames = new Set([
|
|
10
16
|
...request.requiredEnv,
|
|
11
17
|
...request.envHeaders.map((header) => header.valueEnv)
|
|
@@ -13,7 +19,7 @@ const resolveHeaders = Effect.fn("resolveHeaders")(function* (host, request) {
|
|
|
13
19
|
const env = new Map();
|
|
14
20
|
const missing = [];
|
|
15
21
|
for (const name of envNames) {
|
|
16
|
-
const value = yield*
|
|
22
|
+
const value = yield* readOptionalEnv(name);
|
|
17
23
|
if (value === undefined) {
|
|
18
24
|
missing.push(name);
|
|
19
25
|
}
|
|
@@ -41,13 +47,12 @@ const resolveHeaders = Effect.fn("resolveHeaders")(function* (host, request) {
|
|
|
41
47
|
return headers;
|
|
42
48
|
});
|
|
43
49
|
export const LiveReleaseHttpLayer = Layer.effect(ReleaseHttp)(Effect.gen(function* () {
|
|
44
|
-
const host = yield* ReleaseHost;
|
|
45
50
|
const client = yield* HttpClient.HttpClient;
|
|
46
51
|
return {
|
|
47
52
|
runJson: (request) => Effect.gen(function* () {
|
|
48
|
-
const headers = yield* resolveHeaders(
|
|
49
|
-
const startedAt =
|
|
50
|
-
const started =
|
|
53
|
+
const headers = yield* resolveHeaders(request);
|
|
54
|
+
const startedAt = yield* nowIso();
|
|
55
|
+
const started = yield* Effect.clockWith((clock) => clock.currentTimeMillis);
|
|
51
56
|
const httpRequest = HttpClientRequest.make(request.method)(request.url, { headers });
|
|
52
57
|
const response = yield* client.execute(httpRequest).pipe(Effect.mapError((error) => HttpError.make({
|
|
53
58
|
operation: "execute",
|
|
@@ -61,14 +66,15 @@ export const LiveReleaseHttpLayer = Layer.effect(ReleaseHttp)(Effect.gen(functio
|
|
|
61
66
|
url: request.url,
|
|
62
67
|
reason: formatUnknown(error)
|
|
63
68
|
})));
|
|
64
|
-
const endedAt =
|
|
69
|
+
const endedAt = yield* nowIso();
|
|
70
|
+
const ended = yield* Effect.clockWith((clock) => clock.currentTimeMillis);
|
|
65
71
|
return HttpResult.make({
|
|
66
72
|
request,
|
|
67
73
|
status: response.status,
|
|
68
74
|
json,
|
|
69
75
|
startedAt,
|
|
70
76
|
endedAt,
|
|
71
|
-
durationMillis: Math.
|
|
77
|
+
durationMillis: Math.max(0, ended - started)
|
|
72
78
|
});
|
|
73
79
|
})
|
|
74
80
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-live.js","sourceRoot":"","sources":["../../src/host/http-live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"http-live.js","sourceRoot":"","sources":["../../src/host/http-live.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner";
|
|
3
|
+
import { ReleaseCommandRunner } from "./host.js";
|
|
4
|
+
export type * from "../types/effect-internal.js";
|
|
5
|
+
export interface PlatformCommandRunnerOptions {
|
|
6
|
+
readonly root?: string | undefined;
|
|
7
|
+
}
|
|
8
|
+
export declare const makePlatformCommandRunnerLayer: (options?: PlatformCommandRunnerOptions) => Layer.Layer<ReleaseCommandRunner, never, ChildProcessSpawner>;
|
|
9
|
+
export declare const PlatformCommandRunnerLayer: Layer.Layer<ReleaseCommandRunner, never, ChildProcessSpawner>;
|
|
10
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/host/platform.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAA;AAEjF,OAAO,EAAqC,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEnF,mBAAmB,6BAA6B,CAAA;AAEhD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAoFD,eAAO,MAAM,8BAA8B,GACzC,UAAS,4BAAiC,KACzC,KAAK,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,EAAE,mBAAmB,CAyD5D,CAAA;AAEH,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,KAAK,CAClD,oBAAoB,EACpB,KAAK,EACL,mBAAmB,CACe,CAAA"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import * as Config from "effect/Config";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import * as Option from "effect/Option";
|
|
5
|
+
import * as Stream from "effect/Stream";
|
|
6
|
+
import * as ChildProcess from "effect/unstable/process/ChildProcess";
|
|
7
|
+
import { ChildProcessSpawner } from "effect/unstable/process/ChildProcessSpawner";
|
|
8
|
+
import { CommandResult, CommandRunnerError, ReleaseCommandRunner } from "./host.js";
|
|
9
|
+
const inheritedEnvNames = [
|
|
10
|
+
"PATH",
|
|
11
|
+
"HOME",
|
|
12
|
+
"USERPROFILE",
|
|
13
|
+
"SystemRoot",
|
|
14
|
+
"TEMP",
|
|
15
|
+
"TMP",
|
|
16
|
+
"CI",
|
|
17
|
+
"GITHUB_ACTIONS",
|
|
18
|
+
"GITHUB_API_URL",
|
|
19
|
+
"GITHUB_EVENT_NAME",
|
|
20
|
+
"GITHUB_GRAPHQL_URL",
|
|
21
|
+
"GITHUB_REF",
|
|
22
|
+
"GITHUB_REF_NAME",
|
|
23
|
+
"GITHUB_REF_TYPE",
|
|
24
|
+
"GITHUB_REPOSITORY",
|
|
25
|
+
"GITHUB_REPOSITORY_ID",
|
|
26
|
+
"GITHUB_REPOSITORY_OWNER",
|
|
27
|
+
"GITHUB_REPOSITORY_OWNER_ID",
|
|
28
|
+
"GITHUB_RUN_ATTEMPT",
|
|
29
|
+
"GITHUB_RUN_ID",
|
|
30
|
+
"GITHUB_RUN_NUMBER",
|
|
31
|
+
"GITHUB_SERVER_URL",
|
|
32
|
+
"GITHUB_SHA",
|
|
33
|
+
"GITHUB_WORKFLOW",
|
|
34
|
+
"GITHUB_WORKFLOW_REF",
|
|
35
|
+
"GITHUB_WORKFLOW_SHA",
|
|
36
|
+
"RUNNER_ENVIRONMENT",
|
|
37
|
+
"RUNNER_OS"
|
|
38
|
+
];
|
|
39
|
+
const formatUnknown = (cause) => cause instanceof Error ? cause.message : String(cause);
|
|
40
|
+
const readOptionalEnv = (name) => Config.string(name).pipe(Effect.option, Effect.map(Option.getOrUndefined));
|
|
41
|
+
const commandEnv = Effect.fn("platform.commandEnv")(function* (command) {
|
|
42
|
+
const names = new Set([
|
|
43
|
+
...inheritedEnvNames,
|
|
44
|
+
...command.requiredEnv
|
|
45
|
+
]);
|
|
46
|
+
const env = {};
|
|
47
|
+
for (const name of names) {
|
|
48
|
+
const value = yield* readOptionalEnv(name);
|
|
49
|
+
if (value !== undefined) {
|
|
50
|
+
env[name] = value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return env;
|
|
54
|
+
});
|
|
55
|
+
const validateEnv = (command) => Effect.gen(function* () {
|
|
56
|
+
const missing = [];
|
|
57
|
+
for (const name of command.requiredEnv) {
|
|
58
|
+
const value = yield* readOptionalEnv(name);
|
|
59
|
+
if (value === undefined) {
|
|
60
|
+
missing.push(name);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (missing.length > 0) {
|
|
64
|
+
return yield* Effect.fail(CommandRunnerError.make({
|
|
65
|
+
operation: "runCommand",
|
|
66
|
+
reason: `Missing required environment variables: ${missing.join(", ")}`
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const nowIso = Effect.fn("platform.nowIso")(function* () {
|
|
71
|
+
const millis = yield* Effect.clockWith((clock) => clock.currentTimeMillis);
|
|
72
|
+
return new Date(millis).toISOString();
|
|
73
|
+
});
|
|
74
|
+
const commandOutput = (stream) => Stream.mkString(Stream.decodeText(stream));
|
|
75
|
+
export const makePlatformCommandRunnerLayer = (options = {}) => Layer.effect(ReleaseCommandRunner)(Effect.gen(function* () {
|
|
76
|
+
const spawner = yield* ChildProcessSpawner;
|
|
77
|
+
const commandCwd = (command) => command.cwd === undefined
|
|
78
|
+
? options.root
|
|
79
|
+
: command.cwd;
|
|
80
|
+
return {
|
|
81
|
+
runCommand: (command) => Effect.gen(function* () {
|
|
82
|
+
yield* validateEnv(command);
|
|
83
|
+
const startedAt = yield* nowIso();
|
|
84
|
+
const startedMillis = yield* Effect.clockWith((clock) => clock.currentTimeMillis);
|
|
85
|
+
const env = yield* commandEnv(command);
|
|
86
|
+
const cwd = commandCwd(command);
|
|
87
|
+
const childCommand = ChildProcess.make(command.executable, command.args, {
|
|
88
|
+
...(cwd === undefined ? {} : { cwd }),
|
|
89
|
+
env,
|
|
90
|
+
extendEnv: false,
|
|
91
|
+
stdin: "ignore",
|
|
92
|
+
stdout: "pipe",
|
|
93
|
+
stderr: "pipe"
|
|
94
|
+
});
|
|
95
|
+
const output = yield* Effect.scoped(Effect.gen(function* () {
|
|
96
|
+
const handle = yield* spawner.spawn(childCommand);
|
|
97
|
+
return yield* Effect.all({
|
|
98
|
+
stdout: commandOutput(handle.stdout),
|
|
99
|
+
stderr: commandOutput(handle.stderr),
|
|
100
|
+
exitCode: handle.exitCode
|
|
101
|
+
}, { concurrency: "unbounded" });
|
|
102
|
+
})).pipe(Effect.mapError((cause) => CommandRunnerError.make({
|
|
103
|
+
operation: "runCommand",
|
|
104
|
+
reason: formatUnknown(cause)
|
|
105
|
+
})));
|
|
106
|
+
const endedAt = yield* nowIso();
|
|
107
|
+
const endedMillis = yield* Effect.clockWith((clock) => clock.currentTimeMillis);
|
|
108
|
+
return CommandResult.make({
|
|
109
|
+
command,
|
|
110
|
+
exitCode: Number(output.exitCode),
|
|
111
|
+
stdout: output.stdout,
|
|
112
|
+
stderr: output.stderr,
|
|
113
|
+
startedAt,
|
|
114
|
+
endedAt,
|
|
115
|
+
durationMillis: Math.max(0, endedMillis - startedMillis)
|
|
116
|
+
});
|
|
117
|
+
})
|
|
118
|
+
};
|
|
119
|
+
}));
|
|
120
|
+
export const PlatformCommandRunnerLayer = makePlatformCommandRunnerLayer();
|
|
121
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/host/platform.ts"],"names":[],"mappings":"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"}
|
package/dist/host/test.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
import * as Crypto from "effect/Crypto";
|
|
2
|
+
import * as FileSystem from "effect/FileSystem";
|
|
1
3
|
import * as Layer from "effect/Layer";
|
|
4
|
+
import * as Path from "effect/Path";
|
|
2
5
|
import { CommandSpec } from "../domain/operation.js";
|
|
3
|
-
import {
|
|
6
|
+
import { ReleaseCommandRunner } from "./host.js";
|
|
4
7
|
export type * from "../types/effect-internal.js";
|
|
5
8
|
export interface TestCommandResponse {
|
|
6
9
|
readonly exitCode: number;
|
|
7
10
|
readonly stdout: string;
|
|
8
11
|
readonly stderr: string;
|
|
9
12
|
}
|
|
10
|
-
export interface
|
|
13
|
+
export interface TestCommandRunnerOptions {
|
|
11
14
|
readonly files?: ReadonlyMap<string, string> | undefined;
|
|
12
15
|
readonly directories?: ReadonlySet<string> | undefined;
|
|
13
16
|
readonly env?: ReadonlyMap<string, string> | undefined;
|
|
@@ -15,5 +18,5 @@ export interface TestReleaseHostOptions {
|
|
|
15
18
|
readonly timestamps?: ReadonlyArray<string> | undefined;
|
|
16
19
|
}
|
|
17
20
|
export declare const commandKey: (command: CommandSpec) => string;
|
|
18
|
-
export declare const
|
|
21
|
+
export declare const makeTestCommandRunnerLayer: (options?: TestCommandRunnerOptions) => Layer.Layer<FileSystem.FileSystem | Path.Path | ReleaseCommandRunner | Crypto.Crypto, never, never>;
|
|
19
22
|
//# sourceMappingURL=test.d.ts.map
|
package/dist/host/test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/host/test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/host/test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAqC,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEnF,mBAAmB,6BAA6B,CAAA;AAEhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,SAAS,CAAA;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;CACxD;AAED,eAAO,MAAM,UAAU,GAAI,SAAS,WAAW,KAAG,MACI,CAAA;AAiFtD,eAAO,MAAM,0BAA0B,GACrC,UAAS,wBAA6B,wGAqHvC,CAAA"}
|