@mannyc1/ts-release 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -13
- package/dist/cli/command.d.ts.map +1 -1
- package/dist/cli/command.js +37 -2
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/main.js +5 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/programmatic.d.ts +1 -1
- package/dist/cli/programmatic.d.ts.map +1 -1
- package/dist/cli/programmatic.js +7 -2
- package/dist/cli/programmatic.js.map +1 -1
- package/dist/domain/evidence.d.ts +49 -3
- package/dist/domain/evidence.d.ts.map +1 -1
- package/dist/domain/evidence.js +43 -2
- package/dist/domain/evidence.js.map +1 -1
- package/dist/domain/operation.d.ts +56 -2
- package/dist/domain/operation.d.ts.map +1 -1
- package/dist/domain/operation.js +47 -1
- package/dist/domain/operation.js.map +1 -1
- package/dist/domain/release.d.ts +4 -4
- package/dist/domain/target.d.ts +31 -1
- package/dist/domain/target.d.ts.map +1 -1
- package/dist/domain/target.js +40 -3
- package/dist/domain/target.js.map +1 -1
- package/dist/host/http-live.d.ts +7 -0
- package/dist/host/http-live.d.ts.map +1 -0
- package/dist/host/http-live.js +76 -0
- package/dist/host/http-live.js.map +1 -0
- package/dist/host/http.d.ts +40 -0
- package/dist/host/http.d.ts.map +1 -0
- package/dist/host/http.js +56 -0
- package/dist/host/http.js.map +1 -0
- package/dist/planner/errors.d.ts +4 -2
- package/dist/planner/errors.d.ts.map +1 -1
- package/dist/planner/errors.js +5 -3
- package/dist/planner/errors.js.map +1 -1
- package/dist/planner/evidence-recorder.d.ts +6 -3
- package/dist/planner/evidence-recorder.d.ts.map +1 -1
- package/dist/planner/evidence-recorder.js +149 -2
- package/dist/planner/evidence-recorder.js.map +1 -1
- package/dist/planner/executor.d.ts +41 -14
- package/dist/planner/executor.d.ts.map +1 -1
- package/dist/planner/executor.js +102 -36
- package/dist/planner/executor.js.map +1 -1
- package/dist/planner/normalize-release.d.ts.map +1 -1
- package/dist/planner/normalize-release.js +43 -2
- package/dist/planner/normalize-release.js.map +1 -1
- package/dist/planner/render-plan.d.ts.map +1 -1
- package/dist/planner/render-plan.js +9 -0
- package/dist/planner/render-plan.js.map +1 -1
- package/dist/targets/adapter-helpers.d.ts +31 -0
- package/dist/targets/adapter-helpers.d.ts.map +1 -0
- package/dist/targets/adapter-helpers.js +67 -0
- package/dist/targets/adapter-helpers.js.map +1 -0
- package/dist/targets/adapter.d.ts +3 -1
- package/dist/targets/adapter.d.ts.map +1 -1
- package/dist/targets/github.d.ts +2 -2
- package/dist/targets/github.d.ts.map +1 -1
- package/dist/targets/github.js +65 -78
- package/dist/targets/github.js.map +1 -1
- package/dist/targets/homebrew.d.ts +2 -2
- package/dist/targets/homebrew.d.ts.map +1 -1
- package/dist/targets/homebrew.js +45 -75
- package/dist/targets/homebrew.js.map +1 -1
- package/dist/targets/live.d.ts.map +1 -1
- package/dist/targets/live.js +10 -0
- package/dist/targets/live.js.map +1 -1
- package/dist/targets/npm.d.ts +2 -3
- package/dist/targets/npm.d.ts.map +1 -1
- package/dist/targets/npm.js +24 -49
- package/dist/targets/npm.js.map +1 -1
- package/dist/targets/pypi.d.ts +11 -0
- package/dist/targets/pypi.d.ts.map +1 -0
- package/dist/targets/pypi.js +115 -0
- package/dist/targets/pypi.js.map +1 -0
- package/dist/targets/registry.d.ts +3 -3
- package/dist/targets/registry.d.ts.map +1 -1
- package/dist/targets/scoop.d.ts +11 -0
- package/dist/targets/scoop.d.ts.map +1 -0
- package/dist/targets/scoop.js +93 -0
- package/dist/targets/scoop.js.map +1 -0
- package/examples/README.md +17 -3
- package/examples/github-release/release.config.json +2 -1
- package/examples/multi-target/artifacts/release-example-multi-target-0.1.0.tgz +1 -0
- package/examples/multi-target/index.js +1 -0
- package/examples/multi-target/package.json +7 -0
- package/examples/multi-target/release.config.json +62 -0
- package/examples/non-strict-skips/release.config.json +1 -0
- package/examples/pypi-registry/artifacts/release_example_pypi-0.1.0-py3-none-any.whl +1 -0
- package/examples/pypi-registry/release.config.json +30 -0
- package/examples/scoop-bucket/artifacts/release-example-scoop-0.1.0.zip +1 -0
- package/examples/scoop-bucket/release.config.json +36 -0
- package/package.json +19 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"homebrew.js","sourceRoot":"","sources":["../../src/targets/homebrew.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,cAAc,EAEd,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"homebrew.js","sourceRoot":"","sources":["../../src/targets/homebrew.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/targets/live.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/targets/live.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAOrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAG9C,mBAAmB,6BAA6B,CAAA;AAmChD,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,CAG9D,CAAA"}
|
package/dist/targets/live.js
CHANGED
|
@@ -3,7 +3,9 @@ import * as Layer from "effect/Layer";
|
|
|
3
3
|
import { GitHubAdapter } from "./github.js";
|
|
4
4
|
import { HomebrewAdapter } from "./homebrew.js";
|
|
5
5
|
import { NpmAdapter } from "./npm.js";
|
|
6
|
+
import { PyPiAdapter } from "./pypi.js";
|
|
6
7
|
import { TargetRegistry } from "./registry.js";
|
|
8
|
+
import { ScoopAdapter } from "./scoop.js";
|
|
7
9
|
const planLiveTargetOperations = Effect.fn("planLiveTargetOperations")(function* (target, model) {
|
|
8
10
|
switch (target._tag) {
|
|
9
11
|
case "NpmRegistryTarget":
|
|
@@ -12,6 +14,10 @@ const planLiveTargetOperations = Effect.fn("planLiveTargetOperations")(function*
|
|
|
12
14
|
return yield* GitHubAdapter.planOperations(target, model);
|
|
13
15
|
case "HomebrewTapTarget":
|
|
14
16
|
return yield* HomebrewAdapter.planOperations(target, model);
|
|
17
|
+
case "PyPiRegistryTarget":
|
|
18
|
+
return yield* PyPiAdapter.planOperations(target, model);
|
|
19
|
+
case "ScoopBucketTarget":
|
|
20
|
+
return yield* ScoopAdapter.planOperations(target, model);
|
|
15
21
|
}
|
|
16
22
|
});
|
|
17
23
|
const liveTargetCapabilities = (target) => {
|
|
@@ -22,6 +28,10 @@ const liveTargetCapabilities = (target) => {
|
|
|
22
28
|
return GitHubAdapter.capabilities(target);
|
|
23
29
|
case "HomebrewTapTarget":
|
|
24
30
|
return HomebrewAdapter.capabilities(target);
|
|
31
|
+
case "PyPiRegistryTarget":
|
|
32
|
+
return PyPiAdapter.capabilities(target);
|
|
33
|
+
case "ScoopBucketTarget":
|
|
34
|
+
return ScoopAdapter.capabilities(target);
|
|
25
35
|
}
|
|
26
36
|
};
|
|
27
37
|
export const LiveTargetRegistryLayer = Layer.succeed(TargetRegistry)({
|
package/dist/targets/live.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/targets/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/targets/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIzC,MAAM,wBAAwB,GAAG,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EAC9E,MAAoB,EACpB,KAAmB;IAEnB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,mBAAmB;YACtB,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACxD,KAAK,qBAAqB;YACxB,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC3D,KAAK,mBAAmB;YACtB,OAAO,KAAK,CAAC,CAAC,eAAe,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC7D,KAAK,oBAAoB;YACvB,OAAO,KAAK,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACzD,KAAK,mBAAmB;YACtB,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAoB,EAAE,EAAE;IACtD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,mBAAmB;YACtB,OAAO,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QACxC,KAAK,qBAAqB;YACxB,OAAO,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAC3C,KAAK,mBAAmB;YACtB,OAAO,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAC7C,KAAK,oBAAoB;YACvB,OAAO,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QACzC,KAAK,mBAAmB;YACtB,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAgC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAChG,kBAAkB,EAAE,sBAAsB;IAC1C,oBAAoB,EAAE,wBAAwB;CAC/C,CAAC,CAAA"}
|
package/dist/targets/npm.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import { PublishCommandOperation, ValidateCommandOperation
|
|
2
|
+
import { PublishCommandOperation, ValidateCommandOperation } from "../domain/operation.js";
|
|
3
3
|
import { ReleaseModel } from "../domain/release.js";
|
|
4
4
|
import { NpmRegistryTarget, TargetCapabilities } from "../domain/target.js";
|
|
5
|
-
import { PlanConstructionError } from "../planner/errors.js";
|
|
6
5
|
import { NpmTargetAdapter } from "./adapter.js";
|
|
7
6
|
export type * from "../types/effect-internal.js";
|
|
8
7
|
export declare const npmTargetCapabilities: (target: NpmRegistryTarget) => TargetCapabilities;
|
|
9
|
-
export declare const planNpmOperations: (target: NpmRegistryTarget, model: ReleaseModel) => Effect.Effect<(import("../domain/operation.js").RenderFileOperation | ValidateCommandOperation | ValidationNoteOperation | PublishCommandOperation | import("../domain/operation.js").VerifyRemoteOperation)[], PlanConstructionError, never>;
|
|
8
|
+
export declare const planNpmOperations: (target: NpmRegistryTarget, model: ReleaseModel) => Effect.Effect<(import("../domain/operation.js").RenderFileOperation | ValidateCommandOperation | import("../domain/operation.js").ValidationNoteOperation | PublishCommandOperation | import("../domain/operation.js").VerifyRemoteOperation | import("../domain/operation.js").VerifyHttpOperation)[], import("../planner/errors.js").PlanConstructionError, never>;
|
|
10
9
|
export declare const NpmAdapter: NpmTargetAdapter;
|
|
11
10
|
//# sourceMappingURL=npm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../../src/targets/npm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAKL,uBAAuB,EACvB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../../src/targets/npm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAKL,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAQ/C,mBAAmB,6BAA6B,CAAA;AAmBhD,eAAO,MAAM,qBAAqB,GAAI,QAAQ,iBAAiB,KAAG,kBACgB,CAAA;AAoClF,eAAO,MAAM,iBAAiB,0ZAkC5B,CAAA;AAEF,eAAO,MAAM,UAAU,EAAE,gBAIxB,CAAA"}
|
package/dist/targets/npm.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import { CommandSpec, irreversibleGate, noApprovalGate, PublishCommandOperation, ValidateCommandOperation
|
|
3
|
-
import {
|
|
4
|
-
import { PlanConstructionError } from "../planner/errors.js";
|
|
2
|
+
import { CommandSpec, irreversibleGate, noApprovalGate, PublishCommandOperation, ValidateCommandOperation } from "../domain/operation.js";
|
|
3
|
+
import { rejectNoDryRunInStrictMode, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
5
4
|
const envNames = (target) => target.tokenEnv === undefined ? [] : [target.tokenEnv];
|
|
6
5
|
const npmCommand = (target, args, cwd, includeAuth) => CommandSpec.make({
|
|
7
6
|
executable: "npm",
|
|
@@ -10,47 +9,28 @@ const npmCommand = (target, args, cwd, includeAuth) => CommandSpec.make({
|
|
|
10
9
|
requiredEnv: includeAuth ? envNames(target) : [],
|
|
11
10
|
redactedEnv: includeAuth ? envNames(target) : []
|
|
12
11
|
});
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
12
|
+
export const npmTargetCapabilities = (target) => targetCapabilitiesFor(target, validationStrategyForDryRun(target.dryRunSupport));
|
|
13
|
+
const npmDryRunOperation = (target) => {
|
|
14
|
+
const dryRunSupport = target.dryRunSupport;
|
|
15
|
+
return dryRunSupport === "native"
|
|
16
|
+
? ValidateCommandOperation.make({
|
|
17
|
+
id: `${target.id}:npm-pack-dry-run`,
|
|
18
|
+
targetId: target.id,
|
|
19
|
+
description: "Validate npm package contents with npm pack dry-run.",
|
|
20
|
+
risk: "read-only",
|
|
21
|
+
gate: noApprovalGate("npm pack --dry-run validates package contents without publishing."),
|
|
22
|
+
command: npmCommand(target, ["pack", "--dry-run", "--json", target.packagePath], undefined, false)
|
|
23
|
+
})
|
|
24
|
+
: validationNoteOperation({
|
|
25
|
+
id: `${target.id}:npm-pack-dry-run`,
|
|
26
|
+
targetId: target.id,
|
|
27
|
+
dryRunSupport,
|
|
28
|
+
simulatedDescription: "Record simulated npm dry-run validation.",
|
|
29
|
+
skippedDescription: "Record skipped npm dry-run validation.",
|
|
30
|
+
simulatedMessage: "npm dry-run validation is marked as simulated by target configuration; no npm pack --dry-run command was planned.",
|
|
31
|
+
skippedMessage: "npm dry-run validation was skipped because this target declares no dry-run support."
|
|
32
|
+
});
|
|
21
33
|
};
|
|
22
|
-
export const npmTargetCapabilities = (target) => TargetCapabilities.make({
|
|
23
|
-
targetId: target.id,
|
|
24
|
-
targetTag: target._tag,
|
|
25
|
-
authRequirement: targetAuthRequirement(target),
|
|
26
|
-
dryRunSupport: target.dryRunSupport,
|
|
27
|
-
mutability: target.mutability,
|
|
28
|
-
recovery: target.recovery,
|
|
29
|
-
validationStrategy: npmValidationStrategy(target)
|
|
30
|
-
});
|
|
31
|
-
const npmDryRunOperation = (target) => target.dryRunSupport === "native"
|
|
32
|
-
? ValidateCommandOperation.make({
|
|
33
|
-
id: `${target.id}:npm-pack-dry-run`,
|
|
34
|
-
targetId: target.id,
|
|
35
|
-
description: "Validate npm package contents with npm pack dry-run.",
|
|
36
|
-
risk: "read-only",
|
|
37
|
-
gate: noApprovalGate("npm pack --dry-run validates package contents without publishing."),
|
|
38
|
-
command: npmCommand(target, ["pack", "--dry-run", "--json", target.packagePath], undefined, false)
|
|
39
|
-
})
|
|
40
|
-
: ValidationNoteOperation.make({
|
|
41
|
-
id: `${target.id}:npm-pack-dry-run`,
|
|
42
|
-
targetId: target.id,
|
|
43
|
-
description: target.dryRunSupport === "simulated"
|
|
44
|
-
? "Record simulated npm dry-run validation."
|
|
45
|
-
: "Record skipped npm dry-run validation.",
|
|
46
|
-
risk: "read-only",
|
|
47
|
-
gate: noApprovalGate("Validation notes do not modify local or remote state."),
|
|
48
|
-
message: target.dryRunSupport === "simulated"
|
|
49
|
-
? "npm dry-run validation is marked as simulated by target configuration; no npm pack --dry-run command was planned."
|
|
50
|
-
: "npm dry-run validation was skipped because this target declares no dry-run support.",
|
|
51
|
-
skipped: target.dryRunSupport === "none",
|
|
52
|
-
severity: "warning"
|
|
53
|
-
});
|
|
54
34
|
const npmPublishArgs = (target) => {
|
|
55
35
|
const args = ["publish", target.packagePath, "--registry", target.registry];
|
|
56
36
|
if (target.access !== undefined) {
|
|
@@ -62,12 +42,7 @@ const npmPublishArgs = (target) => {
|
|
|
62
42
|
return args;
|
|
63
43
|
};
|
|
64
44
|
export const planNpmOperations = Effect.fn("planNpmOperations")(function* (target, model) {
|
|
65
|
-
|
|
66
|
-
return yield* Effect.fail(PlanConstructionError.make({
|
|
67
|
-
targetId: target.id,
|
|
68
|
-
reason: "npm target declares no dry-run support in strict mode."
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
45
|
+
yield* rejectNoDryRunInStrictMode(target, model, "npm target declares no dry-run support in strict mode.");
|
|
71
46
|
const operations = [
|
|
72
47
|
ValidateCommandOperation.make({
|
|
73
48
|
id: `${target.id}:npm-version`,
|
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,11 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { PublishCommandOperation, ValidateCommandOperation } from "../domain/operation.js";
|
|
3
|
+
import { ReleaseModel } from "../domain/release.js";
|
|
4
|
+
import { PyPiRegistryTarget, TargetCapabilities } from "../domain/target.js";
|
|
5
|
+
import { PlanConstructionError } from "../planner/errors.js";
|
|
6
|
+
import { PyPiTargetAdapter } from "./adapter.js";
|
|
7
|
+
export type * from "../types/effect-internal.js";
|
|
8
|
+
export declare const pypiTargetCapabilities: (target: PyPiRegistryTarget) => TargetCapabilities;
|
|
9
|
+
export declare const planPyPiOperations: (target: PyPiRegistryTarget, model: ReleaseModel) => Effect.Effect<(import("../domain/operation.js").RenderFileOperation | ValidateCommandOperation | import("../domain/operation.js").ValidationNoteOperation | PublishCommandOperation | import("../domain/operation.js").VerifyRemoteOperation | import("../domain/operation.js").VerifyHttpOperation)[], PlanConstructionError, never>;
|
|
10
|
+
export declare const PyPiAdapter: PyPiTargetAdapter;
|
|
11
|
+
//# sourceMappingURL=pypi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pypi.d.ts","sourceRoot":"","sources":["../../src/targets/pypi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAKL,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAQhD,mBAAmB,6BAA6B,CAAA;AA2BhD,eAAO,MAAM,sBAAsB,GAAI,QAAQ,kBAAkB,KAAG,kBACc,CAAA;AAiElF,eAAO,MAAM,kBAAkB,4XAsD7B,CAAA;AAEF,eAAO,MAAM,WAAW,EAAE,iBAIzB,CAAA"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { CommandSpec, irreversibleGate, noApprovalGate, PublishCommandOperation, ValidateCommandOperation } from "../domain/operation.js";
|
|
3
|
+
import { PlanConstructionError } from "../planner/errors.js";
|
|
4
|
+
import { rejectNoDryRunInStrictMode, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
5
|
+
const twineUsernameEnv = "TWINE_USERNAME";
|
|
6
|
+
const twinePasswordEnv = "TWINE_PASSWORD";
|
|
7
|
+
const envNames = (target) => target.usernameEnv === undefined || target.passwordEnv === undefined ? [] : [target.usernameEnv, target.passwordEnv];
|
|
8
|
+
const pythonCommand = (target, args, includeAuth) => CommandSpec.make({
|
|
9
|
+
executable: "python",
|
|
10
|
+
args: [...args],
|
|
11
|
+
requiredEnv: includeAuth ? envNames(target) : [],
|
|
12
|
+
redactedEnv: includeAuth ? envNames(target) : []
|
|
13
|
+
});
|
|
14
|
+
const twineCommand = (target, args, includeAuth) => pythonCommand(target, ["-m", "twine", ...args], includeAuth);
|
|
15
|
+
export const pypiTargetCapabilities = (target) => targetCapabilitiesFor(target, validationStrategyForDryRun(target.dryRunSupport));
|
|
16
|
+
const targetArtifacts = (target, model) => model.artifacts.filter((artifact) => artifact.consumers.includes(target.id));
|
|
17
|
+
const pypiDryRunOperation = (target, artifactPaths) => {
|
|
18
|
+
const dryRunSupport = target.dryRunSupport;
|
|
19
|
+
return dryRunSupport === "native"
|
|
20
|
+
? ValidateCommandOperation.make({
|
|
21
|
+
id: `${target.id}:twine-check`,
|
|
22
|
+
targetId: target.id,
|
|
23
|
+
description: "Validate Python distribution metadata with twine check.",
|
|
24
|
+
risk: "read-only",
|
|
25
|
+
gate: noApprovalGate("twine check validates built distributions without publishing."),
|
|
26
|
+
command: twineCommand(target, ["check", ...artifactPaths], false)
|
|
27
|
+
})
|
|
28
|
+
: validationNoteOperation({
|
|
29
|
+
id: `${target.id}:twine-check`,
|
|
30
|
+
targetId: target.id,
|
|
31
|
+
dryRunSupport,
|
|
32
|
+
simulatedDescription: "Record simulated PyPI distribution validation.",
|
|
33
|
+
skippedDescription: "Record skipped PyPI distribution validation.",
|
|
34
|
+
simulatedMessage: "PyPI distribution validation is simulated by the deterministic release plan; no twine check command was planned.",
|
|
35
|
+
skippedMessage: "PyPI distribution validation was skipped because this target declares no dry-run support."
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
const pypiPublishArgs = (target, artifactPaths) => [
|
|
39
|
+
"upload",
|
|
40
|
+
"--repository-url",
|
|
41
|
+
target.repositoryUrl,
|
|
42
|
+
...artifactPaths
|
|
43
|
+
];
|
|
44
|
+
const validateAuthConfig = (target) => {
|
|
45
|
+
const hasUsername = target.usernameEnv !== undefined;
|
|
46
|
+
const hasPassword = target.passwordEnv !== undefined;
|
|
47
|
+
if (!hasUsername && !hasPassword) {
|
|
48
|
+
return Effect.void;
|
|
49
|
+
}
|
|
50
|
+
if (hasUsername !== hasPassword) {
|
|
51
|
+
return Effect.fail(PlanConstructionError.make({
|
|
52
|
+
targetId: target.id,
|
|
53
|
+
reason: "PyPI token auth must configure both usernameEnv and passwordEnv, or neither."
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
if (target.usernameEnv === twineUsernameEnv && target.passwordEnv === twinePasswordEnv) {
|
|
57
|
+
return Effect.void;
|
|
58
|
+
}
|
|
59
|
+
return Effect.fail(PlanConstructionError.make({
|
|
60
|
+
targetId: target.id,
|
|
61
|
+
reason: "PyPI token auth only supports usernameEnv TWINE_USERNAME and passwordEnv TWINE_PASSWORD because Twine reads those environment variables directly; this adapter keeps secrets out of argv and does not remap env names."
|
|
62
|
+
}));
|
|
63
|
+
};
|
|
64
|
+
export const planPyPiOperations = Effect.fn("planPyPiOperations")(function* (target, model) {
|
|
65
|
+
yield* validateAuthConfig(target);
|
|
66
|
+
yield* rejectNoDryRunInStrictMode(target, model, "PyPI target declares no dry-run support in strict mode.");
|
|
67
|
+
const artifacts = targetArtifacts(target, model);
|
|
68
|
+
if (artifacts.length === 0) {
|
|
69
|
+
return yield* Effect.fail(PlanConstructionError.make({
|
|
70
|
+
targetId: target.id,
|
|
71
|
+
reason: "PyPI target must have at least one artifact consumer."
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
const directoryArtifact = artifacts.find((artifact) => artifact.format === "directory");
|
|
75
|
+
if (directoryArtifact !== undefined) {
|
|
76
|
+
return yield* Effect.fail(PlanConstructionError.make({
|
|
77
|
+
targetId: target.id,
|
|
78
|
+
reason: `PyPI target artifact ${directoryArtifact.id} must be a built distribution file, not a directory.`
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
const artifactPaths = artifacts.map((artifact) => artifact.path);
|
|
82
|
+
return [
|
|
83
|
+
ValidateCommandOperation.make({
|
|
84
|
+
id: `${target.id}:python-version`,
|
|
85
|
+
targetId: target.id,
|
|
86
|
+
description: "Check Python CLI availability.",
|
|
87
|
+
risk: "read-only",
|
|
88
|
+
gate: noApprovalGate("CLI availability validation is read-only."),
|
|
89
|
+
command: pythonCommand(target, ["--version"], false)
|
|
90
|
+
}),
|
|
91
|
+
ValidateCommandOperation.make({
|
|
92
|
+
id: `${target.id}:twine-version`,
|
|
93
|
+
targetId: target.id,
|
|
94
|
+
description: "Check Twine CLI availability.",
|
|
95
|
+
risk: "read-only",
|
|
96
|
+
gate: noApprovalGate("Twine availability validation is read-only."),
|
|
97
|
+
command: twineCommand(target, ["--version"], false)
|
|
98
|
+
}),
|
|
99
|
+
pypiDryRunOperation(target, artifactPaths),
|
|
100
|
+
PublishCommandOperation.make({
|
|
101
|
+
id: `${target.id}:twine-upload`,
|
|
102
|
+
targetId: target.id,
|
|
103
|
+
description: `Publish ${model.identity.name}@${model.identity.version} to PyPI-compatible registry.`,
|
|
104
|
+
risk: "irreversible",
|
|
105
|
+
gate: irreversibleGate("PyPI package versions are immutable once published."),
|
|
106
|
+
command: twineCommand(target, pypiPublishArgs(target, artifactPaths), true)
|
|
107
|
+
})
|
|
108
|
+
];
|
|
109
|
+
});
|
|
110
|
+
export const PyPiAdapter = {
|
|
111
|
+
targetTag: "PyPiRegistryTarget",
|
|
112
|
+
capabilities: pypiTargetCapabilities,
|
|
113
|
+
planOperations: planPyPiOperations
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=pypi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pypi.js","sourceRoot":"","sources":["../../src/targets/pypi.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,8 @@ export interface TargetRegistryShape {
|
|
|
18
18
|
declare const TargetRegistry_base: Context.ServiceClass<TargetRegistry, "TargetRegistry", TargetRegistryShape>;
|
|
19
19
|
export declare class TargetRegistry extends TargetRegistry_base {
|
|
20
20
|
}
|
|
21
|
-
export declare const targetCapabilities: (target: import("../domain/target.js").NpmRegistryTarget | import("../domain/target.js").GitHubReleaseTarget | import("../domain/target.js").HomebrewTapTarget) => Effect.Effect<TargetCapabilities, never, TargetRegistry>;
|
|
21
|
+
export declare const targetCapabilities: (target: import("../domain/target.js").NpmRegistryTarget | import("../domain/target.js").GitHubReleaseTarget | import("../domain/target.js").HomebrewTapTarget | import("../domain/target.js").PyPiRegistryTarget | import("../domain/target.js").ScoopBucketTarget) => Effect.Effect<TargetCapabilities, never, TargetRegistry>;
|
|
22
22
|
export declare const allTargetCapabilities: (model: ReleaseModel) => Effect.Effect<TargetCapabilities[], never, TargetRegistry>;
|
|
23
|
-
export declare const planTargetOperations: (target: import("../domain/target.js").NpmRegistryTarget | import("../domain/target.js").GitHubReleaseTarget | import("../domain/target.js").HomebrewTapTarget, model: ReleaseModel) => Effect.Effect<readonly (import("../domain/operation.js").RenderFileOperation | import("../domain/operation.js").ValidateCommandOperation | import("../domain/operation.js").ValidationNoteOperation | import("../domain/operation.js").PublishCommandOperation | import("../domain/operation.js").VerifyRemoteOperation)[], PlanConstructionError | MissingTargetAdapterError, TargetRegistry>;
|
|
24
|
-
export declare const planAllTargetOperations: (model: ReleaseModel) => Effect.Effect<(import("../domain/operation.js").RenderFileOperation | import("../domain/operation.js").ValidateCommandOperation | import("../domain/operation.js").ValidationNoteOperation | import("../domain/operation.js").PublishCommandOperation | import("../domain/operation.js").VerifyRemoteOperation)[], PlanConstructionError | MissingTargetAdapterError, TargetRegistry>;
|
|
23
|
+
export declare const planTargetOperations: (target: import("../domain/target.js").NpmRegistryTarget | import("../domain/target.js").GitHubReleaseTarget | import("../domain/target.js").HomebrewTapTarget | import("../domain/target.js").PyPiRegistryTarget | import("../domain/target.js").ScoopBucketTarget, model: ReleaseModel) => Effect.Effect<readonly (import("../domain/operation.js").RenderFileOperation | import("../domain/operation.js").ValidateCommandOperation | import("../domain/operation.js").ValidationNoteOperation | import("../domain/operation.js").PublishCommandOperation | import("../domain/operation.js").VerifyRemoteOperation | import("../domain/operation.js").VerifyHttpOperation)[], PlanConstructionError | MissingTargetAdapterError, TargetRegistry>;
|
|
24
|
+
export declare const planAllTargetOperations: (model: ReleaseModel) => Effect.Effect<(import("../domain/operation.js").RenderFileOperation | import("../domain/operation.js").ValidateCommandOperation | import("../domain/operation.js").ValidationNoteOperation | import("../domain/operation.js").PublishCommandOperation | import("../domain/operation.js").VerifyRemoteOperation | import("../domain/operation.js").VerifyHttpOperation)[], PlanConstructionError | MissingTargetAdapterError, TargetRegistry>;
|
|
25
25
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/targets/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAA2B,MAAM,qBAAqB,CAAA;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,mBAAmB,6BAA6B,CAAA;;;;AAEhD,qBAAa,yBAA0B,SAAQ,8BAK9C;CAAG;AAEJ,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,kBAAkB,CAAA;IACzE,QAAQ,CAAC,oBAAoB,EAAE,CAC7B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,KAChB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,yBAAyB,GAAG,qBAAqB,CAAC,CAAA;CAChG;;AAED,qBAAa,cAAe,SAAQ,mBAAwE;CAAG;AAE/G,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/targets/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAA2B,MAAM,qBAAqB,CAAA;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,mBAAmB,6BAA6B,CAAA;;;;AAEhD,qBAAa,yBAA0B,SAAQ,8BAK9C;CAAG;AAEJ,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,kBAAkB,CAAA;IACzE,QAAQ,CAAC,oBAAoB,EAAE,CAC7B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,YAAY,KAChB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,yBAAyB,GAAG,qBAAqB,CAAC,CAAA;CAChG;;AAED,qBAAa,cAAe,SAAQ,mBAAwE;CAAG;AAE/G,eAAO,MAAM,kBAAkB,kUAG7B,CAAA;AAEF,eAAO,MAAM,qBAAqB,qFAMhC,CAAA;AAEF,eAAO,MAAM,oBAAoB,otBAG/B,CAAA;AAEF,eAAO,MAAM,uBAAuB,ucASlC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { PublishCommandOperation, RenderFileOperation } from "../domain/operation.js";
|
|
3
|
+
import { ReleaseModel } from "../domain/release.js";
|
|
4
|
+
import { ScoopBucketTarget, TargetCapabilities } from "../domain/target.js";
|
|
5
|
+
import { PlanConstructionError } from "../planner/errors.js";
|
|
6
|
+
import { ScoopTargetAdapter } from "./adapter.js";
|
|
7
|
+
export type * from "../types/effect-internal.js";
|
|
8
|
+
export declare const scoopTargetCapabilities: (target: ScoopBucketTarget) => TargetCapabilities;
|
|
9
|
+
export declare const planScoopOperations: (target: ScoopBucketTarget, model: ReleaseModel) => Effect.Effect<(RenderFileOperation | import("../domain/operation.js").ValidateCommandOperation | import("../domain/operation.js").ValidationNoteOperation | PublishCommandOperation | import("../domain/operation.js").VerifyRemoteOperation | import("../domain/operation.js").VerifyHttpOperation)[], PlanConstructionError, never>;
|
|
10
|
+
export declare const ScoopAdapter: ScoopTargetAdapter;
|
|
11
|
+
//# sourceMappingURL=scoop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoop.d.ts","sourceRoot":"","sources":["../../src/targets/scoop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAML,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAUjD,mBAAmB,6BAA6B,CAAA;AAyBhD,eAAO,MAAM,uBAAuB,GAAI,QAAQ,iBAAiB,KAAG,kBACc,CAAA;AA0DlF,eAAO,MAAM,mBAAmB,2XA2C9B,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,kBAI1B,CAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { CommandSpec, executeGate, irreversibleGate, PublishCommandOperation, RenderFileOperation, } from "../domain/operation.js";
|
|
3
|
+
import { PlanConstructionError } from "../planner/errors.js";
|
|
4
|
+
import { findRequiredArtifact, requireSha256FileArtifact, rejectNoDryRunInStrictMode, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
5
|
+
const command = (executable, args) => CommandSpec.make({
|
|
6
|
+
executable,
|
|
7
|
+
args: [...args],
|
|
8
|
+
requiredEnv: [],
|
|
9
|
+
redactedEnv: []
|
|
10
|
+
});
|
|
11
|
+
const rejectUnsupportedTokenEnv = Effect.fn("rejectUnsupportedScoopTokenEnv")(function* (target) {
|
|
12
|
+
if (target.tokenEnv !== undefined) {
|
|
13
|
+
return yield* Effect.fail(PlanConstructionError.make({
|
|
14
|
+
targetId: target.id,
|
|
15
|
+
reason: "Scoop bucket targets currently publish with plain git push and require Git credentials to be configured outside the release plan; tokenEnv is not supported yet."
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
export const scoopTargetCapabilities = (target) => targetCapabilitiesFor(target, validationStrategyForDryRun(target.dryRunSupport));
|
|
20
|
+
const pathBaseName = (path) => {
|
|
21
|
+
const parts = path.replaceAll("\\", "/").split("/");
|
|
22
|
+
return parts[parts.length - 1] ?? path;
|
|
23
|
+
};
|
|
24
|
+
const renderManifest = (target, model) => Effect.gen(function* () {
|
|
25
|
+
const artifact = yield* findRequiredArtifact(model, target.id, target.artifactId, `Scoop target references missing artifact ${target.artifactId}.`);
|
|
26
|
+
const validated = yield* requireSha256FileArtifact(artifact, {
|
|
27
|
+
targetId: target.id,
|
|
28
|
+
directoryReason: "Scoop manifest artifacts must be file-like, not directories.",
|
|
29
|
+
checksumReason: "Scoop manifest rendering requires a sha256 artifact checksum."
|
|
30
|
+
});
|
|
31
|
+
const manifest = {
|
|
32
|
+
version: model.identity.version,
|
|
33
|
+
description: target.description ?? `${model.identity.name} ${model.identity.version} release artifact`,
|
|
34
|
+
homepage: target.homepage ?? `https://github.com/${target.repository}`,
|
|
35
|
+
...(target.license === undefined ? {} : { license: target.license }),
|
|
36
|
+
url: target.url ?? validated.artifact.path,
|
|
37
|
+
hash: validated.checksum.value,
|
|
38
|
+
...(target.bin === undefined ? {} : { bin: target.bin })
|
|
39
|
+
};
|
|
40
|
+
return `${JSON.stringify(manifest, null, 2)}\n`;
|
|
41
|
+
});
|
|
42
|
+
const dryRunOperation = (target, dryRunSupport) => validationNoteOperation({
|
|
43
|
+
id: `${target.id}:scoop-manifest-validation`,
|
|
44
|
+
targetId: target.id,
|
|
45
|
+
dryRunSupport,
|
|
46
|
+
simulatedDescription: "Record simulated Scoop manifest validation.",
|
|
47
|
+
skippedDescription: "Record skipped Scoop manifest validation.",
|
|
48
|
+
simulatedMessage: "Scoop manifest validation is simulated by the deterministic release plan.",
|
|
49
|
+
skippedMessage: "Scoop manifest validation was skipped because this target declares no dry-run support."
|
|
50
|
+
});
|
|
51
|
+
export const planScoopOperations = Effect.fn("planScoopOperations")(function* (target, model) {
|
|
52
|
+
yield* rejectUnsupportedTokenEnv(target);
|
|
53
|
+
const dryRunSupport = target.dryRunSupport;
|
|
54
|
+
if (dryRunSupport === "native") {
|
|
55
|
+
return yield* Effect.fail(PlanConstructionError.make({
|
|
56
|
+
targetId: target.id,
|
|
57
|
+
reason: "Scoop bucket targets do not support native validation in the portable adapter yet."
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
yield* rejectNoDryRunInStrictMode(target, model, "Scoop bucket target declares no dry-run support in strict mode.");
|
|
61
|
+
const manifest = yield* renderManifest(target, model);
|
|
62
|
+
const publishRisk = target.mutability === "immutable" ? "irreversible" : "externally-visible";
|
|
63
|
+
const publishGate = publishRisk === "irreversible"
|
|
64
|
+
? irreversibleGate("Pushing a Scoop bucket update is configured as irreversible.")
|
|
65
|
+
: executeGate("Pushing a Scoop bucket update is externally visible.");
|
|
66
|
+
const bucketDirectory = target.bucketDirectory ?? ".";
|
|
67
|
+
return [
|
|
68
|
+
RenderFileOperation.make({
|
|
69
|
+
id: `${target.id}:scoop-render-manifest`,
|
|
70
|
+
targetId: target.id,
|
|
71
|
+
description: `Render Scoop manifest ${pathBaseName(target.manifestPath)}.`,
|
|
72
|
+
risk: "writes-local",
|
|
73
|
+
gate: executeGate("Rendering a Scoop manifest writes a local generated file."),
|
|
74
|
+
path: target.manifestPath,
|
|
75
|
+
contents: manifest
|
|
76
|
+
}),
|
|
77
|
+
dryRunOperation(target, dryRunSupport),
|
|
78
|
+
PublishCommandOperation.make({
|
|
79
|
+
id: `${target.id}:scoop-push`,
|
|
80
|
+
targetId: target.id,
|
|
81
|
+
description: `Push Scoop bucket update for ${model.identity.name}@${model.identity.version}.`,
|
|
82
|
+
risk: publishRisk,
|
|
83
|
+
gate: publishGate,
|
|
84
|
+
command: command("git", ["-C", bucketDirectory, "push"])
|
|
85
|
+
})
|
|
86
|
+
];
|
|
87
|
+
});
|
|
88
|
+
export const ScoopAdapter = {
|
|
89
|
+
targetTag: "ScoopBucketTarget",
|
|
90
|
+
capabilities: scoopTargetCapabilities,
|
|
91
|
+
planOperations: planScoopOperations
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=scoop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoop.js","sourceRoot":"","sources":["../../src/targets/scoop.ts"],"names":[],"mappings":"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"}
|
package/examples/README.md
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
# release examples
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Start with the coordinated release example:
|
|
4
4
|
|
|
5
5
|
```sh
|
|
6
|
-
cd examples/
|
|
6
|
+
cd examples/multi-target
|
|
7
7
|
bun ../../dist/cli/main.js plan --config release.config.json --format text
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
That plan shows one release split across the target classes this package models:
|
|
11
|
+
a release host (`github`), package registries (`npm`, `pypi`), and installer
|
|
12
|
+
catalogs (`homebrew`, `scoop`). Inspect the artifact inventory, target
|
|
13
|
+
capabilities, `argv` lines, approval gates, and generated catalog-file
|
|
14
|
+
operations. `plan` is safe: publish operations stay data until a caller passes
|
|
15
|
+
explicit execution approval.
|
|
11
16
|
|
|
17
|
+
Focused examples:
|
|
18
|
+
|
|
19
|
+
- `multi-target`: one release coordinated across GitHub Releases, npm, and Homebrew.
|
|
12
20
|
- `npm-only`: npm package directory with native npm dry-run validation.
|
|
13
21
|
- `github-release`: GitHub release asset with simulated GitHub dry-run validation.
|
|
14
22
|
- `homebrew-tap`: Homebrew tap formula rendering with simulated formula validation.
|
|
23
|
+
- `pypi-registry`: prebuilt Python distribution planned for TestPyPI with Twine.
|
|
24
|
+
- `scoop-bucket`: Scoop bucket manifest rendering with simulated validation.
|
|
15
25
|
- `non-strict-skips`: non-strict config that records skipped dry-run evidence.
|
|
26
|
+
|
|
27
|
+
TestPyPI is still a real registry publish target, not a dry-run. The example
|
|
28
|
+
only renders the plan; do not run publish operations without intentional
|
|
29
|
+
credentials and approval flags.
|
|
@@ -19,9 +19,10 @@
|
|
|
19
19
|
"_tag": "GitHubReleaseTarget",
|
|
20
20
|
"id": "github",
|
|
21
21
|
"repository": "owner/repo",
|
|
22
|
+
"tokenEnv": "GH_TOKEN",
|
|
22
23
|
"draft": true,
|
|
23
24
|
"prerelease": false,
|
|
24
|
-
"dryRunSupport": "
|
|
25
|
+
"dryRunSupport": "simulated",
|
|
25
26
|
"mutability": "mutable-release",
|
|
26
27
|
"recovery": "delete-and-recreate"
|
|
27
28
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
example multi-target release artifact
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const message = "release example"
|