@mannyc1/ts-release 0.0.1 → 0.0.3
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 +93 -0
- package/README.md +282 -49
- package/SPEC.md +46 -9
- package/dist/config/schema.d.ts +4 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +13 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/domain/evidence.d.ts +4 -0
- package/dist/domain/evidence.d.ts.map +1 -1
- package/dist/domain/evidence.js +4 -0
- package/dist/domain/evidence.js.map +1 -1
- package/dist/domain/operation.d.ts +1 -0
- package/dist/domain/operation.d.ts.map +1 -1
- package/dist/domain/operation.js +147 -1
- package/dist/domain/operation.js.map +1 -1
- package/dist/domain/release.d.ts +1 -0
- package/dist/domain/release.d.ts.map +1 -1
- package/dist/domain/release.js +1 -0
- package/dist/domain/release.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 +18 -9
- package/dist/host/http-live.js.map +1 -1
- package/dist/host/http.d.ts +3 -1
- package/dist/host/http.d.ts.map +1 -1
- package/dist/host/http.js +3 -1
- package/dist/host/http.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 +7 -3
- package/dist/host/test.d.ts.map +1 -1
- package/dist/host/test.js +128 -25
- package/dist/host/test.js.map +1 -1
- package/dist/internal/workspace-path.d.ts +16 -0
- package/dist/internal/workspace-path.d.ts.map +1 -0
- package/dist/internal/workspace-path.js +33 -0
- package/dist/internal/workspace-path.js.map +1 -0
- 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 +85 -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 +116 -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 +52 -7
- 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 +50 -52
- 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 +337 -0
- package/dist/planner/reconcile.js.map +1 -0
- package/dist/planner/release-eligibility.d.ts +34 -0
- package/dist/planner/release-eligibility.d.ts.map +1 -0
- package/dist/planner/release-eligibility.js +179 -0
- package/dist/planner/release-eligibility.js.map +1 -0
- package/dist/planner/render-plan.d.ts +10 -0
- package/dist/planner/render-plan.d.ts.map +1 -1
- package/dist/planner/render-plan.js +179 -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 +342 -0
- package/dist/planner/status.js.map +1 -0
- package/dist/targets/github.d.ts.map +1 -1
- package/dist/targets/github.js +28 -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/workflows/config.d.ts +153 -0
- package/dist/workflows/config.d.ts.map +1 -0
- package/dist/workflows/config.js +301 -0
- package/dist/workflows/config.js.map +1 -0
- package/dist/workflows/diagnostics.d.ts +62 -0
- package/dist/workflows/diagnostics.d.ts.map +1 -0
- package/dist/workflows/diagnostics.js +474 -0
- package/dist/workflows/diagnostics.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/index.d.ts +7 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +6 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/init.d.ts +71 -0
- package/dist/workflows/init.d.ts.map +1 -0
- package/dist/workflows/init.js +384 -0
- package/dist/workflows/init.js.map +1 -0
- package/dist/workflows/live.d.ts +9 -0
- package/dist/workflows/live.d.ts.map +1 -0
- package/dist/workflows/live.js +7 -0
- package/dist/workflows/live.js.map +1 -0
- package/dist/workflows/options.d.ts +30 -0
- package/dist/workflows/options.d.ts.map +1 -0
- package/dist/workflows/options.js +16 -0
- package/dist/workflows/options.js.map +1 -0
- package/examples/README.md +16 -9
- package/examples/github-release/release.config.json +1 -0
- package/examples/homebrew-tap/release.config.json +1 -0
- package/examples/multi-target/release.config.json +10 -1
- package/examples/non-strict-skips/release.config.json +1 -0
- package/examples/npm-first-publish/release.config.json +33 -0
- package/examples/npm-only/release.config.json +10 -1
- package/examples/pypi-registry/release.config.json +1 -0
- package/examples/scoop-bucket/release.config.json +1 -0
- package/package.json +56 -27
- package/templates/README.md +54 -0
- package/templates/github-actions/plan-and-approved-execute.yml +53 -0
- package/templates/github-actions/plan-only.yml +30 -0
- package/templates/github-actions/trusted-publishing.yml +59 -0
- package/templates/multi-target-homebrew/release.config.json +70 -0
- package/templates/multi-target-scoop/release.config.json +72 -0
- package/templates/npm-github/release.config.json +50 -0
- package/templates/npm-only/release.config.json +39 -0
- package/dist/cli/command.d.ts +0 -4
- package/dist/cli/command.d.ts.map +0 -1
- package/dist/cli/command.js +0 -125
- package/dist/cli/command.js.map +0 -1
- package/dist/cli/main.d.ts +0 -3
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -15
- package/dist/cli/main.js.map +0 -1
- 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,71 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as FileSystem from "effect/FileSystem";
|
|
3
|
+
import * as Path from "effect/Path";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
export type * from "../types/effect-internal.js";
|
|
6
|
+
export declare const ReleaseInitTemplateName: Schema.Literals<readonly ["npm-only", "npm-github", "multi-target-homebrew", "multi-target-scoop"]>;
|
|
7
|
+
export type ReleaseInitTemplateName = typeof ReleaseInitTemplateName.Type;
|
|
8
|
+
export declare const ReleaseInitFormat: Schema.Literals<readonly ["json", "text"]>;
|
|
9
|
+
export type ReleaseInitFormat = typeof ReleaseInitFormat.Type;
|
|
10
|
+
declare const ReleaseInitOptions_base: Schema.Class<ReleaseInitOptions, Schema.Struct<{
|
|
11
|
+
readonly root: Schema.optionalKey<Schema.String>;
|
|
12
|
+
readonly configPath: Schema.optionalKey<Schema.String>;
|
|
13
|
+
readonly template: Schema.optionalKey<Schema.Literals<readonly ["npm-only", "npm-github", "multi-target-homebrew", "multi-target-scoop"]>>;
|
|
14
|
+
readonly package: Schema.optionalKey<Schema.String>;
|
|
15
|
+
readonly repo: Schema.optionalKey<Schema.String>;
|
|
16
|
+
readonly workflow: Schema.optionalKey<Schema.String>;
|
|
17
|
+
readonly tap: Schema.optionalKey<Schema.String>;
|
|
18
|
+
readonly bucket: Schema.optionalKey<Schema.String>;
|
|
19
|
+
readonly githubActions: Schema.optionalKey<Schema.Boolean>;
|
|
20
|
+
readonly write: Schema.optionalKey<Schema.Boolean>;
|
|
21
|
+
readonly overwrite: Schema.optionalKey<Schema.Boolean>;
|
|
22
|
+
readonly format: Schema.optionalKey<Schema.Literals<readonly ["json", "text"]>>;
|
|
23
|
+
}>, {}>;
|
|
24
|
+
export declare class ReleaseInitOptions extends ReleaseInitOptions_base {
|
|
25
|
+
}
|
|
26
|
+
export interface ReleaseInitInput {
|
|
27
|
+
readonly root?: string | undefined;
|
|
28
|
+
readonly configPath?: string | undefined;
|
|
29
|
+
readonly template?: ReleaseInitTemplateName | undefined;
|
|
30
|
+
readonly package?: string | undefined;
|
|
31
|
+
readonly repo?: string | undefined;
|
|
32
|
+
readonly workflow?: string | undefined;
|
|
33
|
+
readonly tap?: string | undefined;
|
|
34
|
+
readonly bucket?: string | undefined;
|
|
35
|
+
readonly githubActions?: boolean | undefined;
|
|
36
|
+
readonly write?: boolean | undefined;
|
|
37
|
+
readonly overwrite?: boolean | undefined;
|
|
38
|
+
readonly format?: ReleaseInitFormat | undefined;
|
|
39
|
+
}
|
|
40
|
+
declare const ReleaseInitProposedFile_base: Schema.Class<ReleaseInitProposedFile, Schema.Struct<{
|
|
41
|
+
readonly path: Schema.String;
|
|
42
|
+
readonly contents: Schema.String;
|
|
43
|
+
readonly alreadyExists: Schema.Boolean;
|
|
44
|
+
}>, {}>;
|
|
45
|
+
export declare class ReleaseInitProposedFile extends ReleaseInitProposedFile_base {
|
|
46
|
+
}
|
|
47
|
+
declare const ReleaseInitPlan_base: Schema.Class<ReleaseInitPlan, Schema.Struct<{
|
|
48
|
+
readonly schemaVersion: Schema.Literal<"release-init/v1">;
|
|
49
|
+
readonly template: Schema.Literals<readonly ["npm-only", "npm-github", "multi-target-homebrew", "multi-target-scoop"]>;
|
|
50
|
+
readonly files: Schema.$Array<typeof ReleaseInitProposedFile>;
|
|
51
|
+
readonly nextCommand: Schema.String;
|
|
52
|
+
}>, {}>;
|
|
53
|
+
export declare class ReleaseInitPlan extends ReleaseInitPlan_base {
|
|
54
|
+
}
|
|
55
|
+
declare const ReleaseInitWriteError_base: Schema.Class<ReleaseInitWriteError, Schema.TaggedStruct<"ReleaseInitWriteError", {
|
|
56
|
+
readonly path: Schema.String;
|
|
57
|
+
readonly reason: Schema.String;
|
|
58
|
+
}>, import("effect/Cause").YieldableError>;
|
|
59
|
+
export declare class ReleaseInitWriteError extends ReleaseInitWriteError_base {
|
|
60
|
+
}
|
|
61
|
+
export declare const TS_RELEASE_ACTION_REFERENCE = "mannyc2/ts-release-action@v1";
|
|
62
|
+
export declare const renderGithubActionsTrustedPublishingWorkflow: (configPath: string) => string;
|
|
63
|
+
export declare const planReleaseInit: (input?: ReleaseInitInput | undefined) => Effect.Effect<ReleaseInitPlan, import("effect/PlatformError").PlatformError | ReleaseInitWriteError, FileSystem.FileSystem | Path.Path>;
|
|
64
|
+
export declare const runReleaseInit: (input?: ReleaseInitInput | undefined) => Effect.Effect<ReleaseInitPlan, import("effect/PlatformError").PlatformError | ReleaseInitWriteError, FileSystem.FileSystem | Path.Path>;
|
|
65
|
+
export declare const renderReleaseInitJson: (plan: ReleaseInitPlan) => string;
|
|
66
|
+
export declare const renderReleaseInitText: (plan: ReleaseInitPlan) => string;
|
|
67
|
+
export declare const renderReleaseInitPlan: (plan: ReleaseInitPlan, format?: ReleaseInitFormat) => string;
|
|
68
|
+
export declare const plan: (input?: ReleaseInitInput | undefined) => Effect.Effect<ReleaseInitPlan, import("effect/PlatformError").PlatformError | ReleaseInitWriteError, FileSystem.FileSystem | Path.Path>;
|
|
69
|
+
export declare const run: (input?: ReleaseInitInput | undefined) => Effect.Effect<ReleaseInitPlan, import("effect/PlatformError").PlatformError | ReleaseInitWriteError, FileSystem.FileSystem | Path.Path>;
|
|
70
|
+
export declare const renderPlan: (plan: ReleaseInitPlan, format?: ReleaseInitFormat) => string;
|
|
71
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/workflows/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAUvC,mBAAmB,6BAA6B,CAAA;AAEhD,eAAO,MAAM,uBAAuB,qGAKlC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC,IAAI,CAAA;AAEzE,eAAO,MAAM,iBAAiB,4CAAoC,CAAA;AAClE,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;AAE7D,qBAAa,kBAAmB,SAAQ,uBAatC;CAAG;AAEL,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAA;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAA;CAChD;;;;;;AAED,qBAAa,uBAAwB,SAAQ,4BAI3C;CAAG;;;;;;;AAEL,qBAAa,eAAgB,SAAQ,oBAKnC;CAAG;;;;;AAEL,qBAAa,qBAAsB,SAAQ,0BAGzC;CAAG;AAEL,eAAO,MAAM,2BAA2B,iCAAiC,CAAA;AAsLzE,eAAO,MAAM,4CAA4C,GAAI,YAAY,MAAM,KAAG,MA8DpE,CAAA;AAsFd,eAAO,MAAM,eAAe,mLAgC1B,CAAA;AAsBF,eAAO,MAAM,cAAc,mLAgBzB,CAAA;AAEF,eAAO,MAAM,qBAAqB,GAAI,MAAM,eAAe,KAAG,MACxB,CAAA;AAEtC,eAAO,MAAM,qBAAqB,GAAI,MAAM,eAAe,KAAG,MAY7D,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,MAAM,eAAe,EAAE,SAAQ,iBAA0B,KAAG,MACnB,CAAA;AAE/E,eAAO,MAAM,IAAI,mLAAkB,CAAA;AACnC,eAAO,MAAM,GAAG,mLAAiB,CAAA;AACjC,eAAO,MAAM,UAAU,SALqB,eAAe,WAAU,iBAAiB,KAAY,MAKnD,CAAA"}
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as FileSystem from "effect/FileSystem";
|
|
3
|
+
import * as Path from "effect/Path";
|
|
4
|
+
import * as Schema from "effect/Schema";
|
|
5
|
+
import { DEFAULT_CONFIG_PATH, RELEASE_CONFIG_SCHEMA_ID } from "../config/schema.js";
|
|
6
|
+
import { hasParentTraversal, isInsidePathBoundary, resolveWorkspacePath, validateWorkspaceWritePath } from "../internal/workspace-path.js";
|
|
7
|
+
import { releaseConfigFields } from "./options.js";
|
|
8
|
+
export const ReleaseInitTemplateName = Schema.Literals([
|
|
9
|
+
"npm-only",
|
|
10
|
+
"npm-github",
|
|
11
|
+
"multi-target-homebrew",
|
|
12
|
+
"multi-target-scoop"
|
|
13
|
+
]);
|
|
14
|
+
export const ReleaseInitFormat = Schema.Literals(["json", "text"]);
|
|
15
|
+
export class ReleaseInitOptions extends Schema.Class("ReleaseInitOptions")({
|
|
16
|
+
root: Schema.optionalKey(Schema.String),
|
|
17
|
+
configPath: Schema.optionalKey(Schema.String),
|
|
18
|
+
template: Schema.optionalKey(ReleaseInitTemplateName),
|
|
19
|
+
package: Schema.optionalKey(Schema.String),
|
|
20
|
+
repo: Schema.optionalKey(Schema.String),
|
|
21
|
+
workflow: Schema.optionalKey(Schema.String),
|
|
22
|
+
tap: Schema.optionalKey(Schema.String),
|
|
23
|
+
bucket: Schema.optionalKey(Schema.String),
|
|
24
|
+
githubActions: Schema.optionalKey(Schema.Boolean),
|
|
25
|
+
write: Schema.optionalKey(Schema.Boolean),
|
|
26
|
+
overwrite: Schema.optionalKey(Schema.Boolean),
|
|
27
|
+
format: Schema.optionalKey(ReleaseInitFormat)
|
|
28
|
+
}) {
|
|
29
|
+
}
|
|
30
|
+
export class ReleaseInitProposedFile extends Schema.Class("ReleaseInitProposedFile")({
|
|
31
|
+
path: Schema.String,
|
|
32
|
+
contents: Schema.String,
|
|
33
|
+
alreadyExists: Schema.Boolean
|
|
34
|
+
}) {
|
|
35
|
+
}
|
|
36
|
+
export class ReleaseInitPlan extends Schema.Class("ReleaseInitPlan")({
|
|
37
|
+
schemaVersion: Schema.Literal("release-init/v1"),
|
|
38
|
+
template: ReleaseInitTemplateName,
|
|
39
|
+
files: Schema.Array(ReleaseInitProposedFile),
|
|
40
|
+
nextCommand: Schema.String
|
|
41
|
+
}) {
|
|
42
|
+
}
|
|
43
|
+
export class ReleaseInitWriteError extends Schema.TaggedErrorClass()("ReleaseInitWriteError", {
|
|
44
|
+
path: Schema.String,
|
|
45
|
+
reason: Schema.String
|
|
46
|
+
}) {
|
|
47
|
+
}
|
|
48
|
+
export const TS_RELEASE_ACTION_REFERENCE = "mannyc2/ts-release-action@v1";
|
|
49
|
+
const releaseInitOptionsFromInput = (input = {}) => ReleaseInitOptions.make({
|
|
50
|
+
...releaseConfigFields(input),
|
|
51
|
+
...(input.template === undefined ? {} : { template: input.template }),
|
|
52
|
+
...(input.package === undefined ? {} : { package: input.package }),
|
|
53
|
+
...(input.repo === undefined ? {} : { repo: input.repo }),
|
|
54
|
+
...(input.workflow === undefined ? {} : { workflow: input.workflow }),
|
|
55
|
+
...(input.tap === undefined ? {} : { tap: input.tap }),
|
|
56
|
+
...(input.bucket === undefined ? {} : { bucket: input.bucket }),
|
|
57
|
+
...(input.githubActions === undefined ? {} : { githubActions: input.githubActions }),
|
|
58
|
+
...(input.write === undefined ? {} : { write: input.write }),
|
|
59
|
+
...(input.overwrite === undefined ? {} : { overwrite: input.overwrite }),
|
|
60
|
+
...(input.format === undefined ? {} : { format: input.format })
|
|
61
|
+
});
|
|
62
|
+
const initRoot = (path, options) => {
|
|
63
|
+
if (options.root !== undefined) {
|
|
64
|
+
return options.root;
|
|
65
|
+
}
|
|
66
|
+
if (options.configPath !== undefined && path.isAbsolute(options.configPath)) {
|
|
67
|
+
return path.dirname(options.configPath);
|
|
68
|
+
}
|
|
69
|
+
return ".";
|
|
70
|
+
};
|
|
71
|
+
const normalizeOptions = (options, root) => ({
|
|
72
|
+
root,
|
|
73
|
+
configPath: options.configPath ?? DEFAULT_CONFIG_PATH,
|
|
74
|
+
template: options.template ?? "npm-only",
|
|
75
|
+
packageName: options["package"] ?? "@scope/pkg",
|
|
76
|
+
repository: options.repo ?? "owner/repo",
|
|
77
|
+
workflow: options.workflow ?? "release.yml",
|
|
78
|
+
tap: options.tap ?? "owner/homebrew-tap",
|
|
79
|
+
bucket: options.bucket ?? "owner/scoop-bucket",
|
|
80
|
+
githubActions: options.githubActions ?? false
|
|
81
|
+
});
|
|
82
|
+
const packageShortName = (packageName) => {
|
|
83
|
+
const withoutScope = packageName.includes("/") ? packageName.split("/").at(-1) ?? packageName : packageName;
|
|
84
|
+
const normalized = withoutScope.replace(/^@/, "").replace(/[^A-Za-z0-9-]+/g, "-");
|
|
85
|
+
return normalized.length === 0 ? "pkg" : normalized;
|
|
86
|
+
};
|
|
87
|
+
const configTargetNpm = (options) => ({
|
|
88
|
+
_tag: "NpmRegistryTarget",
|
|
89
|
+
id: "npm",
|
|
90
|
+
registry: "https://registry.npmjs.org",
|
|
91
|
+
packageName: options.packageName,
|
|
92
|
+
packagePath: ".",
|
|
93
|
+
trustedPublishing: {
|
|
94
|
+
provider: "github-actions",
|
|
95
|
+
workflow: options.workflow,
|
|
96
|
+
packageExists: true,
|
|
97
|
+
verifyPackageExists: true
|
|
98
|
+
},
|
|
99
|
+
access: "public",
|
|
100
|
+
provenance: true,
|
|
101
|
+
dryRunSupport: "native",
|
|
102
|
+
mutability: "immutable",
|
|
103
|
+
recovery: "publish-new-version"
|
|
104
|
+
});
|
|
105
|
+
const configTargetGitHub = (options) => ({
|
|
106
|
+
_tag: "GitHubReleaseTarget",
|
|
107
|
+
id: "github",
|
|
108
|
+
repository: options.repository,
|
|
109
|
+
tokenEnv: "GH_TOKEN",
|
|
110
|
+
draft: true,
|
|
111
|
+
prerelease: false,
|
|
112
|
+
dryRunSupport: "simulated",
|
|
113
|
+
mutability: "mutable-release",
|
|
114
|
+
recovery: "delete-and-recreate"
|
|
115
|
+
});
|
|
116
|
+
const configTargetHomebrew = (options) => {
|
|
117
|
+
const name = packageShortName(options.packageName);
|
|
118
|
+
return {
|
|
119
|
+
_tag: "HomebrewTapTarget",
|
|
120
|
+
id: "homebrew",
|
|
121
|
+
repository: options.tap,
|
|
122
|
+
formulaName: name,
|
|
123
|
+
formulaPath: `.release/generated/${name}.rb`,
|
|
124
|
+
artifactId: "archive",
|
|
125
|
+
homepage: `https://github.com/${options.repository}`,
|
|
126
|
+
url: `https://github.com/${options.repository}/releases/download/v0.1.0/${name}-0.1.0.tgz`,
|
|
127
|
+
installPath: `bin/${name}`,
|
|
128
|
+
dryRunSupport: "simulated",
|
|
129
|
+
mutability: "mutable-index",
|
|
130
|
+
recovery: "manual"
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
const configTargetScoop = (options) => {
|
|
134
|
+
const name = packageShortName(options.packageName);
|
|
135
|
+
return {
|
|
136
|
+
_tag: "ScoopBucketTarget",
|
|
137
|
+
id: "scoop",
|
|
138
|
+
repository: options.bucket,
|
|
139
|
+
manifestName: name,
|
|
140
|
+
manifestPath: `.release/generated/${name}.json`,
|
|
141
|
+
artifactId: "archive",
|
|
142
|
+
homepage: `https://github.com/${options.repository}`,
|
|
143
|
+
description: `Example Scoop manifest for ${name}`,
|
|
144
|
+
license: "MIT",
|
|
145
|
+
url: `https://github.com/${options.repository}/releases/download/v0.1.0/${name}-0.1.0.zip`,
|
|
146
|
+
bin: `${name}.exe`,
|
|
147
|
+
dryRunSupport: "simulated",
|
|
148
|
+
mutability: "mutable-index",
|
|
149
|
+
recovery: "manual"
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
const releaseConfigForTemplate = (options) => {
|
|
153
|
+
const name = packageShortName(options.packageName);
|
|
154
|
+
const artifacts = [
|
|
155
|
+
{
|
|
156
|
+
id: "package",
|
|
157
|
+
path: ".",
|
|
158
|
+
format: "directory",
|
|
159
|
+
consumers: ["npm"]
|
|
160
|
+
}
|
|
161
|
+
];
|
|
162
|
+
const targets = [configTargetNpm(options)];
|
|
163
|
+
if (options.template !== "npm-only") {
|
|
164
|
+
targets.push(configTargetGitHub(options));
|
|
165
|
+
}
|
|
166
|
+
if (options.template === "multi-target-homebrew") {
|
|
167
|
+
artifacts.push({
|
|
168
|
+
id: "archive",
|
|
169
|
+
path: `artifacts/${name}-0.1.0.tgz`,
|
|
170
|
+
format: "tarball",
|
|
171
|
+
consumers: ["github", "homebrew"]
|
|
172
|
+
});
|
|
173
|
+
targets.push(configTargetHomebrew(options));
|
|
174
|
+
}
|
|
175
|
+
if (options.template === "multi-target-scoop") {
|
|
176
|
+
artifacts.push({
|
|
177
|
+
id: "archive",
|
|
178
|
+
path: `artifacts/${name}-0.1.0.zip`,
|
|
179
|
+
format: "zip",
|
|
180
|
+
consumers: ["github", "scoop"]
|
|
181
|
+
});
|
|
182
|
+
targets.push(configTargetScoop(options));
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
$schema: RELEASE_CONFIG_SCHEMA_ID,
|
|
186
|
+
identity: {
|
|
187
|
+
name: options.packageName,
|
|
188
|
+
version: "0.1.0",
|
|
189
|
+
commit: "abc123",
|
|
190
|
+
tag: "v0.1.0"
|
|
191
|
+
},
|
|
192
|
+
artifacts,
|
|
193
|
+
targets,
|
|
194
|
+
strict: true,
|
|
195
|
+
evidenceDirectory: ".release/evidence/{version}"
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
export const renderGithubActionsTrustedPublishingWorkflow = (configPath) => [
|
|
199
|
+
"name: Release",
|
|
200
|
+
"",
|
|
201
|
+
"on:",
|
|
202
|
+
" workflow_dispatch:",
|
|
203
|
+
"",
|
|
204
|
+
"permissions:",
|
|
205
|
+
" contents: read",
|
|
206
|
+
"",
|
|
207
|
+
"jobs:",
|
|
208
|
+
" plan:",
|
|
209
|
+
" runs-on: ubuntu-latest",
|
|
210
|
+
" steps:",
|
|
211
|
+
" - uses: actions/checkout@v4",
|
|
212
|
+
" - uses: oven-sh/setup-bun@v2",
|
|
213
|
+
" - run: bun install --frozen-lockfile",
|
|
214
|
+
` - uses: ${TS_RELEASE_ACTION_REFERENCE}`,
|
|
215
|
+
" with:",
|
|
216
|
+
" command: plan",
|
|
217
|
+
` config: ${configPath}`,
|
|
218
|
+
" format: markdown",
|
|
219
|
+
" write-step-summary: true",
|
|
220
|
+
" plan-path: release-plan.md",
|
|
221
|
+
" - uses: actions/upload-artifact@v4",
|
|
222
|
+
" if: always()",
|
|
223
|
+
" with:",
|
|
224
|
+
" name: release-plan",
|
|
225
|
+
" path: |",
|
|
226
|
+
" release-plan.md",
|
|
227
|
+
" .release/evidence/",
|
|
228
|
+
"",
|
|
229
|
+
" execute:",
|
|
230
|
+
" needs: plan",
|
|
231
|
+
" runs-on: ubuntu-latest",
|
|
232
|
+
" environment: release",
|
|
233
|
+
" permissions:",
|
|
234
|
+
" contents: write",
|
|
235
|
+
" id-token: write",
|
|
236
|
+
" steps:",
|
|
237
|
+
" - uses: actions/checkout@v4",
|
|
238
|
+
" - uses: oven-sh/setup-bun@v2",
|
|
239
|
+
" - uses: actions/setup-node@v4",
|
|
240
|
+
" with:",
|
|
241
|
+
" node-version: 22.14.0",
|
|
242
|
+
" registry-url: https://registry.npmjs.org",
|
|
243
|
+
" - run: npm install -g npm@^11.5.1",
|
|
244
|
+
" - run: bun install --frozen-lockfile",
|
|
245
|
+
" - run: bun run build",
|
|
246
|
+
` - uses: ${TS_RELEASE_ACTION_REFERENCE}`,
|
|
247
|
+
" with:",
|
|
248
|
+
" command: run",
|
|
249
|
+
` config: ${configPath}`,
|
|
250
|
+
" execute: true",
|
|
251
|
+
" approve-irreversible: true",
|
|
252
|
+
" write-step-summary: true",
|
|
253
|
+
" - uses: actions/upload-artifact@v4",
|
|
254
|
+
" if: always()",
|
|
255
|
+
" with:",
|
|
256
|
+
" name: release-evidence",
|
|
257
|
+
" path: .release/evidence/",
|
|
258
|
+
""
|
|
259
|
+
].join("\n");
|
|
260
|
+
const workflowConfigPath = (path, options) => {
|
|
261
|
+
const root = path.resolve(options.root);
|
|
262
|
+
const config = resolveWorkspacePath(path, options.root, options.configPath);
|
|
263
|
+
const relative = path.relative(root, config).replaceAll("\\", "/");
|
|
264
|
+
if (relative.length === 0 || relative === ".." || relative.startsWith("../")) {
|
|
265
|
+
return path.basename(options.configPath);
|
|
266
|
+
}
|
|
267
|
+
return relative;
|
|
268
|
+
};
|
|
269
|
+
const proposedFileSpecs = (path, options) => {
|
|
270
|
+
const config = `${JSON.stringify(releaseConfigForTemplate(options), null, 2)}\n`;
|
|
271
|
+
const files = [
|
|
272
|
+
{
|
|
273
|
+
path: options.configPath,
|
|
274
|
+
contents: config
|
|
275
|
+
}
|
|
276
|
+
];
|
|
277
|
+
if (options.githubActions) {
|
|
278
|
+
files.push({
|
|
279
|
+
path: `.github/workflows/${options.workflow}`,
|
|
280
|
+
contents: renderGithubActionsTrustedPublishingWorkflow(workflowConfigPath(path, options))
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
return files;
|
|
284
|
+
};
|
|
285
|
+
const workspacePath = (path, root, pathName) => {
|
|
286
|
+
const result = validateWorkspaceWritePath(path, root, pathName);
|
|
287
|
+
if (result._tag === "Ok") {
|
|
288
|
+
return Effect.succeed(result.path);
|
|
289
|
+
}
|
|
290
|
+
return Effect.fail(ReleaseInitWriteError.make({
|
|
291
|
+
path: pathName,
|
|
292
|
+
reason: result.reason === "empty-or-parent-traversal"
|
|
293
|
+
? "Path must be non-empty and must not contain parent traversal."
|
|
294
|
+
: "Path must resolve inside the workspace root."
|
|
295
|
+
}));
|
|
296
|
+
};
|
|
297
|
+
const validateWorkflowFileName = (workflow) => {
|
|
298
|
+
const hasPathSeparator = workflow.includes("/") || workflow.includes("\\");
|
|
299
|
+
const hasWorkflowExtension = workflow.endsWith(".yml") || workflow.endsWith(".yaml");
|
|
300
|
+
if (workflow.trim().length > 0 && !hasPathSeparator && !hasParentTraversal(workflow) && hasWorkflowExtension) {
|
|
301
|
+
return Effect.void;
|
|
302
|
+
}
|
|
303
|
+
return Effect.fail(ReleaseInitWriteError.make({
|
|
304
|
+
path: workflow,
|
|
305
|
+
reason: "Workflow must be a .yml or .yaml filename without path separators."
|
|
306
|
+
}));
|
|
307
|
+
};
|
|
308
|
+
const validateInitOptions = Effect.fn("workflows.init.validateInitOptions")(function* (path, options) {
|
|
309
|
+
yield* workspacePath(path, options.root, options.configPath);
|
|
310
|
+
if (!options.githubActions) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
yield* validateWorkflowFileName(options.workflow);
|
|
314
|
+
const workflowsRoot = resolveWorkspacePath(path, options.root, ".github/workflows");
|
|
315
|
+
const workflowPath = yield* workspacePath(path, options.root, `.github/workflows/${options.workflow}`);
|
|
316
|
+
if (isInsidePathBoundary(path, workflowsRoot, workflowPath)) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
return yield* Effect.fail(ReleaseInitWriteError.make({
|
|
320
|
+
path: options.workflow,
|
|
321
|
+
reason: "Workflow output must resolve inside .github/workflows."
|
|
322
|
+
}));
|
|
323
|
+
});
|
|
324
|
+
export const planReleaseInit = Effect.fn("workflows.init.planReleaseInit")(function* (input = {}) {
|
|
325
|
+
const options = releaseInitOptionsFromInput(input);
|
|
326
|
+
const fs = yield* FileSystem.FileSystem;
|
|
327
|
+
const path = yield* Path.Path;
|
|
328
|
+
const normalized = normalizeOptions(options, initRoot(path, options));
|
|
329
|
+
yield* validateInitOptions(path, normalized);
|
|
330
|
+
const files = yield* Effect.forEach(proposedFileSpecs(path, normalized), (file) => workspacePath(path, normalized.root, file.path).pipe(Effect.flatMap((targetPath) => fs.exists(targetPath).pipe(Effect.map((alreadyExists) => ReleaseInitProposedFile.make({
|
|
331
|
+
path: file.path,
|
|
332
|
+
contents: file.contents,
|
|
333
|
+
alreadyExists
|
|
334
|
+
}))))));
|
|
335
|
+
return ReleaseInitPlan.make({
|
|
336
|
+
schemaVersion: "release-init/v1",
|
|
337
|
+
template: normalized.template,
|
|
338
|
+
files,
|
|
339
|
+
nextCommand: `release plan --config ${normalized.configPath} --format text`
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
const writeInitFile = Effect.fn("workflows.init.writeInitFile")(function* (root, file, overwrite) {
|
|
343
|
+
if (file.alreadyExists && !overwrite) {
|
|
344
|
+
return yield* Effect.fail(ReleaseInitWriteError.make({
|
|
345
|
+
path: file.path,
|
|
346
|
+
reason: "File already exists. Pass --overwrite to replace it."
|
|
347
|
+
}));
|
|
348
|
+
}
|
|
349
|
+
const fs = yield* FileSystem.FileSystem;
|
|
350
|
+
const path = yield* Path.Path;
|
|
351
|
+
const outputPath = yield* workspacePath(path, root, file.path);
|
|
352
|
+
yield* fs.makeDirectory(path.dirname(outputPath), { recursive: true });
|
|
353
|
+
yield* fs.writeFileString(outputPath, file.contents);
|
|
354
|
+
});
|
|
355
|
+
export const runReleaseInit = Effect.fn("workflows.init.runReleaseInit")(function* (input = {}) {
|
|
356
|
+
const options = releaseInitOptionsFromInput(input);
|
|
357
|
+
const path = yield* Path.Path;
|
|
358
|
+
const normalized = normalizeOptions(options, initRoot(path, options));
|
|
359
|
+
const plan = yield* planReleaseInit(options);
|
|
360
|
+
if (options.write !== true) {
|
|
361
|
+
return plan;
|
|
362
|
+
}
|
|
363
|
+
yield* Effect.forEach(plan.files, (file) => writeInitFile(normalized.root, file, options.overwrite === true), { discard: true });
|
|
364
|
+
return plan;
|
|
365
|
+
});
|
|
366
|
+
export const renderReleaseInitJson = (plan) => `${JSON.stringify(plan, null, 2)}\n`;
|
|
367
|
+
export const renderReleaseInitText = (plan) => {
|
|
368
|
+
const lines = [
|
|
369
|
+
`template: ${plan.template}`,
|
|
370
|
+
"files:"
|
|
371
|
+
];
|
|
372
|
+
for (const file of plan.files) {
|
|
373
|
+
lines.push(` - ${file.path}${file.alreadyExists ? " (exists)" : " (new)"}`);
|
|
374
|
+
lines.push(`--- ${file.path}`);
|
|
375
|
+
lines.push(file.contents.trimEnd());
|
|
376
|
+
}
|
|
377
|
+
lines.push(`next: ${plan.nextCommand}`);
|
|
378
|
+
return `${lines.join("\n")}\n`;
|
|
379
|
+
};
|
|
380
|
+
export const renderReleaseInitPlan = (plan, format = "text") => format === "json" ? renderReleaseInitJson(plan) : renderReleaseInitText(plan);
|
|
381
|
+
export const plan = planReleaseInit;
|
|
382
|
+
export const run = runReleaseInit;
|
|
383
|
+
export const renderPlan = renderReleaseInitPlan;
|
|
384
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/workflows/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
3
|
+
import { ReleaseHttp } from "../host/http.js";
|
|
4
|
+
import type { PlatformCommandRunnerOptions } from "../host/platform.js";
|
|
5
|
+
import { TargetRegistry } from "../targets/registry.js";
|
|
6
|
+
export type * from "../types/effect-internal.js";
|
|
7
|
+
export declare const LiveReleaseWorkflowLayer: Layer.Layer<ReleaseHttp | TargetRegistry, never, HttpClient.HttpClient>;
|
|
8
|
+
export declare const makeLayer: (options?: PlatformCommandRunnerOptions) => Layer.Layer<import("../host/host.js").ReleaseCommandRunner | ReleaseHttp | TargetRegistry, never, HttpClient.HttpClient | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>;
|
|
9
|
+
//# sourceMappingURL=live.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/workflows/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAG7C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,mBAAmB,6BAA6B,CAAA;AAEhD,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,KAAK,CAChD,WAAW,GAAG,cAAc,EAC5B,KAAK,EACL,UAAU,CAAC,UAAU,CAItB,CAAA;AAED,eAAO,MAAM,SAAS,GACpB,UAAS,4BAAiC,yMAKzC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { LiveReleaseHttpLayer } from "../host/http-live.js";
|
|
3
|
+
import { makePlatformCommandRunnerLayer } from "../host/platform.js";
|
|
4
|
+
import { LiveTargetRegistryLayer } from "../targets/live.js";
|
|
5
|
+
export const LiveReleaseWorkflowLayer = Layer.mergeAll(LiveReleaseHttpLayer, LiveTargetRegistryLayer);
|
|
6
|
+
export const makeLayer = (options = {}) => Layer.mergeAll(makePlatformCommandRunnerLayer(options), LiveReleaseWorkflowLayer);
|
|
7
|
+
//# sourceMappingURL=live.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/workflows/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAA;AAEpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAK5D,MAAM,CAAC,MAAM,wBAAwB,GAIjC,KAAK,CAAC,QAAQ,CAChB,oBAAoB,EACpB,uBAAuB,CACxB,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,UAAwC,EAAE,EAC1C,EAAE,CACF,KAAK,CAAC,QAAQ,CACZ,8BAA8B,CAAC,OAAO,CAAC,EACvC,wBAAwB,CACzB,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface ReleaseConfigFields {
|
|
2
|
+
readonly root?: string | undefined;
|
|
3
|
+
readonly configPath?: string | undefined;
|
|
4
|
+
}
|
|
5
|
+
export interface ReleaseFormatField<Format extends string> {
|
|
6
|
+
readonly format?: Format | undefined;
|
|
7
|
+
}
|
|
8
|
+
export interface ReleaseExecutionFields extends ReleaseConfigFields {
|
|
9
|
+
readonly execute?: boolean | undefined;
|
|
10
|
+
readonly approveIrreversible?: boolean | undefined;
|
|
11
|
+
}
|
|
12
|
+
export declare const releaseConfigFields: (input: ReleaseConfigFields) => {
|
|
13
|
+
configPath?: string;
|
|
14
|
+
root?: string;
|
|
15
|
+
};
|
|
16
|
+
export declare const releaseFormatField: <Format extends string>(input: ReleaseFormatField<Format>) => {
|
|
17
|
+
format?: Format;
|
|
18
|
+
};
|
|
19
|
+
export declare const releaseExecuteField: (input: {
|
|
20
|
+
readonly execute?: boolean | undefined;
|
|
21
|
+
}) => {
|
|
22
|
+
execute?: boolean;
|
|
23
|
+
};
|
|
24
|
+
export declare const releaseExecutionFields: (input: ReleaseExecutionFields) => {
|
|
25
|
+
approveIrreversible?: boolean;
|
|
26
|
+
execute?: boolean;
|
|
27
|
+
configPath?: string;
|
|
28
|
+
root?: string;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/workflows/options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACzC;AAED,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,MAAM;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACnD;AAED,eAAO,MAAM,mBAAmB,GAC9B,OAAO,mBAAmB;;;CAI1B,CAAA;AAEF,eAAO,MAAM,kBAAkB,GAAI,MAAM,SAAS,MAAM,EACtD,OAAO,kBAAkB,CAAC,MAAM,CAAC;;CAGjC,CAAA;AAEF,eAAO,MAAM,mBAAmB,GAC9B,OAAO;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE;;CAGjD,CAAA;AAEF,eAAO,MAAM,sBAAsB,GACjC,OAAO,sBAAsB;;;;;CAK7B,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const releaseConfigFields = (input) => ({
|
|
2
|
+
...(input.root === undefined ? {} : { root: input.root }),
|
|
3
|
+
...(input.configPath === undefined ? {} : { configPath: input.configPath })
|
|
4
|
+
});
|
|
5
|
+
export const releaseFormatField = (input) => ({
|
|
6
|
+
...(input.format === undefined ? {} : { format: input.format })
|
|
7
|
+
});
|
|
8
|
+
export const releaseExecuteField = (input) => ({
|
|
9
|
+
...(input.execute === undefined ? {} : { execute: input.execute })
|
|
10
|
+
});
|
|
11
|
+
export const releaseExecutionFields = (input) => ({
|
|
12
|
+
...releaseConfigFields(input),
|
|
13
|
+
...releaseExecuteField(input),
|
|
14
|
+
...(input.approveIrreversible === undefined ? {} : { approveIrreversible: input.approveIrreversible })
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/workflows/options.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAA0B,EAC1B,EAAE,CAAC,CAAC;IACJ,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IACzD,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;CAC5E,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAiC,EACjC,EAAE,CAAC,CAAC;IACJ,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;CAChE,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAiD,EACjD,EAAE,CAAC,CAAC;IACJ,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;CACnE,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAA6B,EAC7B,EAAE,CAAC,CAAC;IACJ,GAAG,mBAAmB,CAAC,KAAK,CAAC;IAC7B,GAAG,mBAAmB,CAAC,KAAK,CAAC;IAC7B,GAAG,CAAC,KAAK,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE,CAAC;CACvG,CAAC,CAAA"}
|
package/examples/README.md
CHANGED
|
@@ -4,26 +4,33 @@ Start with the coordinated release example:
|
|
|
4
4
|
|
|
5
5
|
```sh
|
|
6
6
|
cd examples/multi-target
|
|
7
|
-
bun ../../
|
|
7
|
+
bun ../../apps/release-ts/src/cli/main.ts plan --config release.config.json --format text
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
That plan shows one release split across
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
That plan shows one release split across GitHub Releases, npm, and a Homebrew
|
|
11
|
+
tap. Inspect the artifact inventory, target capabilities, `argv` lines,
|
|
12
|
+
approval gates, and generated catalog-file operations. `plan` is safe: publish
|
|
13
|
+
operations stay data until a caller passes explicit execution approval.
|
|
14
|
+
|
|
15
|
+
Templates live in `../templates/` and are copyable starting points for new
|
|
16
|
+
repositories. These examples are runnable fixtures for this repository's
|
|
17
|
+
checks.
|
|
16
18
|
|
|
17
19
|
Focused examples:
|
|
18
20
|
|
|
19
21
|
- `multi-target`: one release coordinated across GitHub Releases, npm, and Homebrew.
|
|
20
22
|
- `npm-only`: npm package directory with native npm dry-run validation.
|
|
23
|
+
- `npm-first-publish`: token-based npm bootstrap config for the first version before switching to trusted publishing.
|
|
21
24
|
- `github-release`: GitHub release asset with simulated GitHub dry-run validation.
|
|
22
25
|
- `homebrew-tap`: Homebrew tap formula rendering with simulated formula validation.
|
|
23
26
|
- `pypi-registry`: prebuilt Python distribution planned for TestPyPI with Twine.
|
|
24
27
|
- `scoop-bucket`: Scoop bucket manifest rendering with simulated validation.
|
|
25
28
|
- `non-strict-skips`: non-strict config that records skipped dry-run evidence.
|
|
26
29
|
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
Trusted-publishing npm examples use `provenance` and
|
|
31
|
+
`verifyPackageExists`. `npm-first-publish` demonstrates only the bootstrap shape
|
|
32
|
+
for a package that does not exist on npm yet, so it stays token-based and omits
|
|
33
|
+
`trustedPublishing`. Replace it with trusted publishing after the first version
|
|
34
|
+
exists. TestPyPI is still a real registry publish target, not a dry-run. The
|
|
35
|
+
examples only render plans; do not run publish operations without intentional
|
|
29
36
|
credentials and approval flags.
|