@mannyc1/ts-release 0.0.3 → 0.0.6
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 +1 -1
- package/README.md +73 -8
- package/SPEC.md +15 -1
- package/dist/config/errors.d.ts +2 -1
- package/dist/config/errors.d.ts.map +1 -1
- package/dist/config/errors.js +4 -3
- package/dist/config/errors.js.map +1 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +5 -3
- package/dist/config/load.js.map +1 -1
- package/dist/domain/artifact.d.ts +3 -3
- package/dist/domain/artifact.d.ts.map +1 -1
- package/dist/domain/artifact.js +1 -1
- package/dist/domain/artifact.js.map +1 -1
- package/dist/domain/evidence.d.ts +14 -14
- package/dist/domain/evidence.d.ts.map +1 -1
- package/dist/domain/evidence.js +4 -3
- package/dist/domain/evidence.js.map +1 -1
- package/dist/domain/operation.d.ts +14 -14
- package/dist/domain/operation.d.ts.map +1 -1
- package/dist/domain/operation.js +8 -13
- package/dist/domain/operation.js.map +1 -1
- package/dist/domain/release.d.ts +83 -9
- package/dist/domain/release.d.ts.map +1 -1
- package/dist/domain/release.js +75 -5
- package/dist/domain/release.js.map +1 -1
- package/dist/domain/remote-state.d.ts +20 -25
- package/dist/domain/remote-state.d.ts.map +1 -1
- package/dist/domain/remote-state.js +14 -22
- package/dist/domain/remote-state.js.map +1 -1
- package/dist/domain/status.d.ts +4 -4
- package/dist/domain/status.d.ts.map +1 -1
- package/dist/domain/status.js +3 -2
- package/dist/domain/status.js.map +1 -1
- package/dist/domain/target.d.ts +7 -7
- package/dist/domain/target.d.ts.map +1 -1
- package/dist/domain/target.js +1 -1
- package/dist/domain/target.js.map +1 -1
- package/dist/host/host.d.ts +1 -0
- package/dist/host/host.d.ts.map +1 -1
- package/dist/host/host.js +2 -1
- package/dist/host/host.js.map +1 -1
- package/dist/host/http-live.d.ts.map +1 -1
- package/dist/host/http-live.js +4 -3
- package/dist/host/http-live.js.map +1 -1
- package/dist/host/http.d.ts +1 -0
- package/dist/host/http.d.ts.map +1 -1
- package/dist/host/http.js +2 -1
- package/dist/host/http.js.map +1 -1
- package/dist/host/platform.d.ts.map +1 -1
- package/dist/host/platform.js +6 -13
- package/dist/host/platform.js.map +1 -1
- package/dist/host/test.d.ts.map +1 -1
- package/dist/host/test.js +43 -0
- package/dist/host/test.js.map +1 -1
- package/dist/internal/workflow-phases.d.ts +3 -0
- package/dist/internal/workflow-phases.d.ts.map +1 -0
- package/dist/internal/workflow-phases.js +2 -0
- package/dist/internal/workflow-phases.js.map +1 -0
- package/dist/internal/workspace-path.d.ts +4 -5
- package/dist/internal/workspace-path.d.ts.map +1 -1
- package/dist/internal/workspace-path.js +3 -0
- package/dist/internal/workspace-path.js.map +1 -1
- package/dist/planner/artifact-inventory.d.ts.map +1 -1
- package/dist/planner/artifact-inventory.js +6 -7
- package/dist/planner/artifact-inventory.js.map +1 -1
- package/dist/planner/errors.d.ts +12 -6
- package/dist/planner/errors.d.ts.map +1 -1
- package/dist/planner/errors.js +20 -12
- package/dist/planner/errors.js.map +1 -1
- package/dist/planner/evidence-recorder.d.ts.map +1 -1
- package/dist/planner/evidence-recorder.js +26 -36
- package/dist/planner/evidence-recorder.js.map +1 -1
- package/dist/planner/executor.d.ts.map +1 -1
- package/dist/planner/executor.js +2 -13
- package/dist/planner/executor.js.map +1 -1
- package/dist/planner/normalize-release.d.ts +11 -2
- package/dist/planner/normalize-release.d.ts.map +1 -1
- package/dist/planner/normalize-release.js +88 -10
- package/dist/planner/normalize-release.js.map +1 -1
- package/dist/planner/reconcile.d.ts.map +1 -1
- package/dist/planner/reconcile.js +5 -81
- package/dist/planner/reconcile.js.map +1 -1
- package/dist/planner/release-eligibility.d.ts +18 -13
- package/dist/planner/release-eligibility.d.ts.map +1 -1
- package/dist/planner/release-eligibility.js +428 -29
- package/dist/planner/release-eligibility.js.map +1 -1
- package/dist/planner/render-plan.d.ts +1 -1
- package/dist/planner/render-plan.js +2 -1
- package/dist/planner/render-plan.js.map +1 -1
- package/dist/planner/status.d.ts +8 -8
- package/dist/planner/status.d.ts.map +1 -1
- package/dist/planner/status.js +57 -86
- package/dist/planner/status.js.map +1 -1
- package/dist/targets/adapter-helpers.d.ts +36 -3
- package/dist/targets/adapter-helpers.d.ts.map +1 -1
- package/dist/targets/adapter-helpers.js +60 -3
- package/dist/targets/adapter-helpers.js.map +1 -1
- package/dist/targets/github-release.d.ts +25 -0
- package/dist/targets/github-release.d.ts.map +1 -0
- package/dist/targets/github-release.js +82 -0
- package/dist/targets/github-release.js.map +1 -0
- package/dist/targets/github.d.ts +2 -2
- package/dist/targets/github.d.ts.map +1 -1
- package/dist/targets/github.js +24 -75
- 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 +28 -54
- package/dist/targets/homebrew.js.map +1 -1
- package/dist/targets/live.d.ts.map +1 -1
- package/dist/targets/live.js +29 -20
- package/dist/targets/live.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 +37 -59
- package/dist/targets/npm.js.map +1 -1
- package/dist/targets/pypi.d.ts +2 -2
- package/dist/targets/pypi.d.ts.map +1 -1
- package/dist/targets/pypi.js +25 -37
- package/dist/targets/pypi.js.map +1 -1
- package/dist/targets/scoop.d.ts +2 -2
- package/dist/targets/scoop.d.ts.map +1 -1
- package/dist/targets/scoop.js +13 -28
- package/dist/targets/scoop.js.map +1 -1
- package/dist/workflows/config.d.ts +123 -24
- package/dist/workflows/config.d.ts.map +1 -1
- package/dist/workflows/config.js +217 -53
- package/dist/workflows/config.js.map +1 -1
- package/dist/workflows/diagnostics.d.ts +6 -6
- package/dist/workflows/diagnostics.d.ts.map +1 -1
- package/dist/workflows/diagnostics.js +136 -83
- package/dist/workflows/diagnostics.js.map +1 -1
- package/dist/workflows/evidence.d.ts +8 -3
- package/dist/workflows/evidence.d.ts.map +1 -1
- package/dist/workflows/evidence.js +14 -15
- package/dist/workflows/evidence.js.map +1 -1
- package/dist/workflows/init.d.ts +14 -1
- package/dist/workflows/init.d.ts.map +1 -1
- package/dist/workflows/init.js +138 -81
- package/dist/workflows/init.js.map +1 -1
- package/package.json +7 -3
- package/templates/README.md +5 -0
- package/templates/github-actions/plan-and-approved-execute.yml +10 -5
- package/templates/github-actions/plan-only.yml +5 -2
- package/templates/github-actions/trusted-publishing.yml +7 -5
package/dist/targets/npm.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import { CommandSpec, irreversibleGate, noApprovalGate, PublishCommandOperation,
|
|
3
|
-
import { TargetAuthSetup,
|
|
4
|
-
import { rejectNoDryRunInStrictMode, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
2
|
+
import { CommandSpec, irreversibleGate, noApprovalGate, PublishCommandOperation, VerifyRemoteOperation } from "../domain/operation.js";
|
|
3
|
+
import { TargetAuthSetup, TargetRequiredPermission } from "../domain/target.js";
|
|
4
|
+
import { dryRunValidationOperation, readOnlyCommandValidationOperation, rejectNoDryRunInStrictMode, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
5
5
|
const isTrustedPublishing = (target) => target.trustedPublishing !== undefined;
|
|
6
|
-
const
|
|
7
|
-
const trustedPublishingRequiredEnvNames = [
|
|
6
|
+
const trustedPublishingAuthEnvNames = [
|
|
8
7
|
"ACTIONS_ID_TOKEN_REQUEST_URL",
|
|
9
8
|
"ACTIONS_ID_TOKEN_REQUEST_TOKEN"
|
|
10
9
|
];
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
const authEnvNames = (target) => {
|
|
11
|
+
if (isTrustedPublishing(target)) {
|
|
12
|
+
return trustedPublishingAuthEnvNames;
|
|
13
|
+
}
|
|
14
|
+
return target.tokenEnv === undefined ? [] : [target.tokenEnv];
|
|
15
|
+
};
|
|
16
|
+
const npmCommand = (target, args, includeAuth) => CommandSpec.make({
|
|
14
17
|
executable: "npm",
|
|
15
18
|
args: [...args],
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
redactedEnv: includeAuth ? redactedAuthEnvNames(target) : []
|
|
19
|
+
requiredEnv: includeAuth ? authEnvNames(target) : [],
|
|
20
|
+
redactedEnv: includeAuth ? authEnvNames(target) : []
|
|
19
21
|
});
|
|
20
22
|
const trustedPublishingAuthSetup = (workflow) => TargetAuthSetup.make({
|
|
21
23
|
runsIn: "ci",
|
|
@@ -28,41 +30,20 @@ const trustedPublishingAuthSetup = (workflow) => TargetAuthSetup.make({
|
|
|
28
30
|
});
|
|
29
31
|
export const npmTargetCapabilities = (target) => {
|
|
30
32
|
const trustedPublishing = target.trustedPublishing;
|
|
31
|
-
|
|
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
|
-
};
|
|
45
|
-
const npmDryRunOperation = (target) => {
|
|
46
|
-
const dryRunSupport = target.dryRunSupport;
|
|
47
|
-
return dryRunSupport === "native"
|
|
48
|
-
? ValidateCommandOperation.make({
|
|
49
|
-
id: `${target.id}:npm-pack-dry-run`,
|
|
50
|
-
targetId: target.id,
|
|
51
|
-
description: "Validate npm package contents with npm pack dry-run.",
|
|
52
|
-
risk: "read-only",
|
|
53
|
-
gate: noApprovalGate("npm pack --dry-run validates package contents without publishing."),
|
|
54
|
-
command: npmCommand(target, ["pack", "--dry-run", "--json", target.packagePath], undefined, false)
|
|
55
|
-
})
|
|
56
|
-
: validationNoteOperation({
|
|
57
|
-
id: `${target.id}:npm-pack-dry-run`,
|
|
58
|
-
targetId: target.id,
|
|
59
|
-
dryRunSupport,
|
|
60
|
-
simulatedDescription: "Record simulated npm dry-run validation.",
|
|
61
|
-
skippedDescription: "Record skipped npm dry-run validation.",
|
|
62
|
-
simulatedMessage: "npm dry-run validation is marked as simulated by target configuration; no npm pack --dry-run command was planned.",
|
|
63
|
-
skippedMessage: "npm dry-run validation was skipped because this target declares no dry-run support."
|
|
64
|
-
});
|
|
33
|
+
return targetCapabilitiesFor(target, validationStrategyForDryRun(target.dryRunSupport), trustedPublishing === undefined ? undefined : trustedPublishingAuthSetup(trustedPublishing.workflow));
|
|
65
34
|
};
|
|
35
|
+
const npmDryRunOperation = (target) => dryRunValidationOperation({
|
|
36
|
+
id: `${target.id}:npm-pack-dry-run`,
|
|
37
|
+
targetId: target.id,
|
|
38
|
+
dryRunSupport: target.dryRunSupport,
|
|
39
|
+
nativeDescription: "Validate npm package contents with npm pack dry-run.",
|
|
40
|
+
nativeGateReason: "npm pack --dry-run validates package contents without publishing.",
|
|
41
|
+
command: npmCommand(target, ["pack", "--dry-run", "--json", target.packagePath], false),
|
|
42
|
+
simulatedDescription: "Record simulated npm dry-run validation.",
|
|
43
|
+
skippedDescription: "Record skipped npm dry-run validation.",
|
|
44
|
+
simulatedMessage: "npm dry-run validation is marked as simulated by target configuration; no npm pack --dry-run command was planned.",
|
|
45
|
+
skippedMessage: "npm dry-run validation was skipped because this target declares no dry-run support."
|
|
46
|
+
});
|
|
66
47
|
const npmAuthOperation = (target) => target.trustedPublishing !== undefined
|
|
67
48
|
? validationNoteOperation({
|
|
68
49
|
id: `${target.id}:npm-trusted-publishing-auth`,
|
|
@@ -73,21 +54,19 @@ const npmAuthOperation = (target) => target.trustedPublishing !== undefined
|
|
|
73
54
|
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
55
|
skippedMessage: "NPM trusted publishing authentication validation was skipped."
|
|
75
56
|
})
|
|
76
|
-
:
|
|
57
|
+
: readOnlyCommandValidationOperation({
|
|
77
58
|
id: `${target.id}:npm-whoami`,
|
|
78
59
|
targetId: target.id,
|
|
79
60
|
description: "Validate npm CLI authentication.",
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
command: npmCommand(target, ["whoami", "--registry", target.registry], undefined, true)
|
|
61
|
+
gateReason: "npm whoami checks CLI authentication without publishing.",
|
|
62
|
+
command: npmCommand(target, ["whoami", "--registry", target.registry], true)
|
|
83
63
|
});
|
|
84
|
-
const npmPackageExistsOperation = (target) =>
|
|
64
|
+
const npmPackageExistsOperation = (target) => readOnlyCommandValidationOperation({
|
|
85
65
|
id: `${target.id}:npm-package-exists`,
|
|
86
66
|
targetId: target.id,
|
|
87
67
|
description: "Verify npm package exists before trusted publishing.",
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
command: npmCommand(target, ["view", target.packageName, "name", "--registry", target.registry], undefined, false)
|
|
68
|
+
gateReason: "npm view checks package metadata without publishing.",
|
|
69
|
+
command: npmCommand(target, ["view", target.packageName, "name", "--registry", target.registry], false)
|
|
91
70
|
});
|
|
92
71
|
const npmPublishArgs = (target) => {
|
|
93
72
|
const args = ["publish", target.packagePath, "--registry", target.registry];
|
|
@@ -102,13 +81,12 @@ const npmPublishArgs = (target) => {
|
|
|
102
81
|
export const planNpmOperations = Effect.fn("planNpmOperations")(function* (target, model) {
|
|
103
82
|
yield* rejectNoDryRunInStrictMode(target, model, "npm target declares no dry-run support in strict mode.");
|
|
104
83
|
const operations = [
|
|
105
|
-
|
|
84
|
+
readOnlyCommandValidationOperation({
|
|
106
85
|
id: `${target.id}:npm-version`,
|
|
107
86
|
targetId: target.id,
|
|
108
87
|
description: "Check npm CLI availability.",
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
command: npmCommand(target, ["--version"], undefined, false)
|
|
88
|
+
gateReason: "CLI availability validation is read-only.",
|
|
89
|
+
command: npmCommand(target, ["--version"], false)
|
|
112
90
|
}),
|
|
113
91
|
npmAuthOperation(target),
|
|
114
92
|
...(target.trustedPublishing?.verifyPackageExists === true ? [npmPackageExistsOperation(target)] : []),
|
|
@@ -119,7 +97,7 @@ export const planNpmOperations = Effect.fn("planNpmOperations")(function* (targe
|
|
|
119
97
|
description: `Publish ${target.packageName}@${model.identity.version} to npm.`,
|
|
120
98
|
risk: "irreversible",
|
|
121
99
|
gate: irreversibleGate("npm package versions are immutable once published."),
|
|
122
|
-
command: npmCommand(target, npmPublishArgs(target),
|
|
100
|
+
command: npmCommand(target, npmPublishArgs(target), true)
|
|
123
101
|
}),
|
|
124
102
|
VerifyRemoteOperation.make({
|
|
125
103
|
id: `${target.id}:npm-version-verify`,
|
|
@@ -127,7 +105,7 @@ export const planNpmOperations = Effect.fn("planNpmOperations")(function* (targe
|
|
|
127
105
|
description: `Verify ${target.packageName}@${model.identity.version} exists on npm.`,
|
|
128
106
|
risk: "read-only",
|
|
129
107
|
gate: noApprovalGate("npm view verifies published package metadata without publishing."),
|
|
130
|
-
command: npmCommand(target, ["view", `${target.packageName}@${model.identity.version}`, "version", "--registry", target.registry],
|
|
108
|
+
command: npmCommand(target, ["view", `${target.packageName}@${model.identity.version}`, "version", "--registry", target.registry], false)
|
|
131
109
|
})
|
|
132
110
|
];
|
|
133
111
|
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,
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/targets/npm.ts"],"names":[],"mappings":"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"}
|
package/dist/targets/pypi.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import { PublishCommandOperation
|
|
2
|
+
import { PublishCommandOperation } from "../domain/operation.js";
|
|
3
3
|
import { ReleaseModel } from "../domain/release.js";
|
|
4
4
|
import { PyPiRegistryTarget, TargetCapabilities } from "../domain/target.js";
|
|
5
5
|
import { PlanConstructionError } from "../planner/errors.js";
|
|
6
6
|
import { PyPiTargetAdapter } from "./adapter.js";
|
|
7
7
|
export type * from "../types/effect-internal.js";
|
|
8
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>;
|
|
9
|
+
export declare const planPyPiOperations: (target: PyPiRegistryTarget, model: ReleaseModel) => Effect.Effect<(import("../domain/operation.js").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
10
|
export declare const PyPiAdapter: PyPiTargetAdapter;
|
|
11
11
|
//# sourceMappingURL=pypi.d.ts.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"pypi.d.ts","sourceRoot":"","sources":["../../src/targets/pypi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAIL,uBAAuB,EACxB,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;AAUhD,mBAAmB,6BAA6B,CAAA;AAmBhD,eAAO,MAAM,sBAAsB,GAAI,QAAQ,kBAAkB,KAAG,kBACc,CAAA;AAyDlF,eAAO,MAAM,kBAAkB,6ZAoD7B,CAAA;AAEF,eAAO,MAAM,WAAW,EAAE,iBAIzB,CAAA"}
|
package/dist/targets/pypi.js
CHANGED
|
@@ -1,40 +1,30 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import { CommandSpec, irreversibleGate,
|
|
2
|
+
import { CommandSpec, irreversibleGate, PublishCommandOperation } from "../domain/operation.js";
|
|
3
3
|
import { PlanConstructionError } from "../planner/errors.js";
|
|
4
|
-
import { rejectNoDryRunInStrictMode, targetCapabilitiesFor,
|
|
4
|
+
import { dryRunValidationOperation, noAuthCommand, readOnlyCommandValidationOperation, rejectNoDryRunInStrictMode, targetCapabilitiesFor, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
5
5
|
const twineUsernameEnv = "TWINE_USERNAME";
|
|
6
6
|
const twinePasswordEnv = "TWINE_PASSWORD";
|
|
7
7
|
const envNames = (target) => target.usernameEnv === undefined || target.passwordEnv === undefined ? [] : [target.usernameEnv, target.passwordEnv];
|
|
8
|
-
const
|
|
8
|
+
const twineAuthCommand = (target, args) => CommandSpec.make({
|
|
9
9
|
executable: "python",
|
|
10
|
-
args: [...args],
|
|
11
|
-
requiredEnv:
|
|
12
|
-
redactedEnv:
|
|
10
|
+
args: ["-m", "twine", ...args],
|
|
11
|
+
requiredEnv: envNames(target),
|
|
12
|
+
redactedEnv: envNames(target)
|
|
13
13
|
});
|
|
14
|
-
const twineCommand = (target, args, includeAuth) => pythonCommand(target, ["-m", "twine", ...args], includeAuth);
|
|
15
14
|
export const pypiTargetCapabilities = (target) => targetCapabilitiesFor(target, validationStrategyForDryRun(target.dryRunSupport));
|
|
16
15
|
const targetArtifacts = (target, model) => model.artifacts.filter((artifact) => artifact.consumers.includes(target.id));
|
|
17
|
-
const pypiDryRunOperation = (target, artifactPaths) => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
};
|
|
16
|
+
const pypiDryRunOperation = (target, artifactPaths) => dryRunValidationOperation({
|
|
17
|
+
id: `${target.id}:twine-check`,
|
|
18
|
+
targetId: target.id,
|
|
19
|
+
dryRunSupport: target.dryRunSupport,
|
|
20
|
+
nativeDescription: "Validate Python distribution metadata with twine check.",
|
|
21
|
+
nativeGateReason: "twine check validates built distributions without publishing.",
|
|
22
|
+
command: noAuthCommand("python", ["-m", "twine", "check", ...artifactPaths]),
|
|
23
|
+
simulatedDescription: "Record simulated PyPI distribution validation.",
|
|
24
|
+
skippedDescription: "Record skipped PyPI distribution validation.",
|
|
25
|
+
simulatedMessage: "PyPI distribution validation is simulated by the deterministic release plan; no twine check command was planned.",
|
|
26
|
+
skippedMessage: "PyPI distribution validation was skipped because this target declares no dry-run support."
|
|
27
|
+
});
|
|
38
28
|
const pypiPublishArgs = (target, artifactPaths) => [
|
|
39
29
|
"upload",
|
|
40
30
|
"--repository-url",
|
|
@@ -80,21 +70,19 @@ export const planPyPiOperations = Effect.fn("planPyPiOperations")(function* (tar
|
|
|
80
70
|
}
|
|
81
71
|
const artifactPaths = artifacts.map((artifact) => artifact.path);
|
|
82
72
|
return [
|
|
83
|
-
|
|
73
|
+
readOnlyCommandValidationOperation({
|
|
84
74
|
id: `${target.id}:python-version`,
|
|
85
75
|
targetId: target.id,
|
|
86
76
|
description: "Check Python CLI availability.",
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
command: pythonCommand(target, ["--version"], false)
|
|
77
|
+
gateReason: "CLI availability validation is read-only.",
|
|
78
|
+
command: noAuthCommand("python", ["--version"])
|
|
90
79
|
}),
|
|
91
|
-
|
|
80
|
+
readOnlyCommandValidationOperation({
|
|
92
81
|
id: `${target.id}:twine-version`,
|
|
93
82
|
targetId: target.id,
|
|
94
83
|
description: "Check Twine CLI availability.",
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
command: twineCommand(target, ["--version"], false)
|
|
84
|
+
gateReason: "Twine availability validation is read-only.",
|
|
85
|
+
command: noAuthCommand("python", ["-m", "twine", "--version"])
|
|
98
86
|
}),
|
|
99
87
|
pypiDryRunOperation(target, artifactPaths),
|
|
100
88
|
PublishCommandOperation.make({
|
|
@@ -103,7 +91,7 @@ export const planPyPiOperations = Effect.fn("planPyPiOperations")(function* (tar
|
|
|
103
91
|
description: `Publish ${model.identity.name}@${model.identity.version} to PyPI-compatible registry.`,
|
|
104
92
|
risk: "irreversible",
|
|
105
93
|
gate: irreversibleGate("PyPI package versions are immutable once published."),
|
|
106
|
-
command:
|
|
94
|
+
command: twineAuthCommand(target, pypiPublishArgs(target, artifactPaths))
|
|
107
95
|
})
|
|
108
96
|
];
|
|
109
97
|
});
|
package/dist/targets/pypi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pypi.js","sourceRoot":"","sources":["../../src/targets/pypi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,WAAW,EACX,gBAAgB,
|
|
1
|
+
{"version":3,"file":"pypi.js","sourceRoot":"","sources":["../../src/targets/pypi.ts"],"names":[],"mappings":"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"}
|
package/dist/targets/scoop.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import {
|
|
2
|
+
import { RenderFileOperation } from "../domain/operation.js";
|
|
3
3
|
import { ReleaseModel } from "../domain/release.js";
|
|
4
4
|
import { ScoopBucketTarget, TargetCapabilities } from "../domain/target.js";
|
|
5
5
|
import { PlanConstructionError } from "../planner/errors.js";
|
|
6
6
|
import { ScoopTargetAdapter } from "./adapter.js";
|
|
7
7
|
export type * from "../types/effect-internal.js";
|
|
8
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>;
|
|
9
|
+
export declare const planScoopOperations: (target: ScoopBucketTarget, model: ReleaseModel) => Effect.Effect<(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, never>;
|
|
10
10
|
export declare const ScoopAdapter: ScoopTargetAdapter;
|
|
11
11
|
//# sourceMappingURL=scoop.d.ts.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"scoop.d.ts","sourceRoot":"","sources":["../../src/targets/scoop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAGL,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;AAajD,mBAAmB,6BAA6B,CAAA;AAUhD,eAAO,MAAM,uBAAuB,GAAI,QAAQ,iBAAiB,KAAG,kBACc,CAAA;AAqDlF,eAAO,MAAM,mBAAmB,4ZAuC9B,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,kBAI1B,CAAA"}
|
package/dist/targets/scoop.js
CHANGED
|
@@ -1,26 +1,15 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import {
|
|
2
|
+
import { executeGate, RenderFileOperation, } from "../domain/operation.js";
|
|
3
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
|
-
});
|
|
4
|
+
import { catalogGitPushOperation, catalogPathBaseName, findRequiredArtifact, requireSha256FileArtifact, rejectNoDryRunInStrictMode, rejectUnsupportedCatalogTokenEnv, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
|
|
11
5
|
const rejectUnsupportedTokenEnv = Effect.fn("rejectUnsupportedScoopTokenEnv")(function* (target) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
6
|
+
return yield* rejectUnsupportedCatalogTokenEnv({
|
|
7
|
+
targetId: target.id,
|
|
8
|
+
targetLabel: "Scoop bucket",
|
|
9
|
+
tokenEnv: target.tokenEnv
|
|
10
|
+
});
|
|
18
11
|
});
|
|
19
12
|
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
13
|
const renderManifest = (target, model) => Effect.gen(function* () {
|
|
25
14
|
const artifact = yield* findRequiredArtifact(model, target.id, target.artifactId, `Scoop target references missing artifact ${target.artifactId}.`);
|
|
26
15
|
const validated = yield* requireSha256FileArtifact(artifact, {
|
|
@@ -59,29 +48,25 @@ export const planScoopOperations = Effect.fn("planScoopOperations")(function* (t
|
|
|
59
48
|
}
|
|
60
49
|
yield* rejectNoDryRunInStrictMode(target, model, "Scoop bucket target declares no dry-run support in strict mode.");
|
|
61
50
|
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
51
|
return [
|
|
68
52
|
RenderFileOperation.make({
|
|
69
53
|
id: `${target.id}:scoop-render-manifest`,
|
|
70
54
|
targetId: target.id,
|
|
71
|
-
description: `Render Scoop manifest ${
|
|
55
|
+
description: `Render Scoop manifest ${catalogPathBaseName(target.manifestPath)}.`,
|
|
72
56
|
risk: "writes-local",
|
|
73
57
|
gate: executeGate("Rendering a Scoop manifest writes a local generated file."),
|
|
74
58
|
path: target.manifestPath,
|
|
75
59
|
contents: manifest
|
|
76
60
|
}),
|
|
77
61
|
dryRunOperation(target, dryRunSupport),
|
|
78
|
-
|
|
62
|
+
catalogGitPushOperation({
|
|
79
63
|
id: `${target.id}:scoop-push`,
|
|
80
64
|
targetId: target.id,
|
|
81
65
|
description: `Push Scoop bucket update for ${model.identity.name}@${model.identity.version}.`,
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
66
|
+
mutability: target.mutability,
|
|
67
|
+
directory: target.bucketDirectory,
|
|
68
|
+
irreversibleReason: "Pushing a Scoop bucket update is configured as irreversible.",
|
|
69
|
+
externallyVisibleReason: "Pushing a Scoop bucket update is externally visible."
|
|
85
70
|
})
|
|
86
71
|
];
|
|
87
72
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoop.js","sourceRoot":"","sources":["../../src/targets/scoop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EACL,WAAW,
|
|
1
|
+
{"version":3,"file":"scoop.js","sourceRoot":"","sources":["../../src/targets/scoop.ts"],"names":[],"mappings":"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"}
|