@pob/version 1.2.1 → 1.3.0

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/index-node.mjs +45 -22
  3. package/dist/index-node.mjs.map +1 -1
  4. package/package.json +6 -1
  5. package/src/commands/version.ts +14 -2
  6. package/src/pm/BunPackageManager.ts +20 -3
  7. package/src/pm/PackageManager.ts +12 -2
  8. package/src/pm/YarnPackageManager.ts +28 -18
  9. package/.editorconfig +0 -13
  10. package/.yo-rc.json +0 -13
  11. package/__fixtures__/bun-basic/package.json +0 -4
  12. package/__fixtures__/bun-no-version/package.json +0 -3
  13. package/__fixtures__/yarn-basic/package.json +0 -4
  14. package/__fixtures__/yarn-basic/yarn.lock +0 -12
  15. package/__fixtures__/yarn-monorepo/package.json +0 -7
  16. package/__fixtures__/yarn-monorepo/packages/package-1/package.json +0 -4
  17. package/__fixtures__/yarn-monorepo/packages/package-2/package.json +0 -7
  18. package/__fixtures__/yarn-monorepo/packages/package-3/package.json +0 -7
  19. package/__fixtures__/yarn-monorepo/packages/package-4/package.json +0 -7
  20. package/__fixtures__/yarn-monorepo/packages/package-5/package.json +0 -8
  21. package/__fixtures__/yarn-monorepo/yarn.lock +0 -0
  22. package/__fixtures__/yarn-monorepo-duplicate-names/package.json +0 -7
  23. package/__fixtures__/yarn-monorepo-duplicate-names/packages/pkg-a/package.json +0 -4
  24. package/__fixtures__/yarn-monorepo-duplicate-names/packages/pkg-b/package.json +0 -4
  25. package/__fixtures__/yarn-monorepo-invalid-package-json/package.json +0 -7
  26. package/__fixtures__/yarn-monorepo-invalid-package-json/packages/pkg-with-invalid-json/package.json +0 -5
  27. package/__fixtures__/yarn-monorepo-nested/package.json +0 -9
  28. package/__fixtures__/yarn-monorepo-nested/packages/deep-nested/package.json +0 -4
  29. package/__fixtures__/yarn-monorepo-nested/packages/nested-1/packages/package-nested.json +0 -4
  30. package/__fixtures__/yarn-monorepo-nested/packages/nested-1/packages/package.json +0 -4
  31. package/__fixtures__/yarn-monorepo-nested/packages/package-1/package.json +0 -4
  32. package/__fixtures__/yarn-monorepo-no-name/package.json +0 -7
  33. package/__fixtures__/yarn-monorepo-no-name/packages/no-name-package/package.json +0 -3
  34. package/__fixtures__/yarn-monorepo-object-form/package.json +0 -9
  35. package/__fixtures__/yarn-monorepo-object-form/packages/package-1/package.json +0 -4
  36. package/__fixtures__/yarn-monorepo-object-form/packages/package-2/package.json +0 -4
  37. package/__fixtures__/yarn-monorepo-object-form/packages/package-3/package.json +0 -4
  38. package/__fixtures__/yarn-monorepo-object-form/packages/package-4/package.json +0 -4
  39. package/__fixtures__/yarn-monorepo-object-form/packages/package-5/package.json +0 -4
  40. package/__fixtures__/yarn-no-version/package.json +0 -3
  41. package/__fixtures__/yarn-no-version/yarn.lock +0 -0
  42. package/__fixtures__/yarn-with-lifecycle/package.json +0 -7
  43. package/__fixtures__/yarn-with-lifecycle/yarn.lock +0 -11
  44. package/rollup.config.mjs +0 -12
  45. package/tsconfig.json +0 -21
  46. package/vitest.config.js +0 -9
@@ -78,6 +78,7 @@ export interface VersionCommandOptions {
78
78
  cwdIsRoot?: boolean;
79
79
  packageManager?: "bun" | "yarn";
80
80
  publish?: boolean;
81
+ publishProvenance?: boolean;
81
82
  }
82
83
 
83
84
  interface BumpableWorkspace {
@@ -807,7 +808,9 @@ export const versionCommandAction = async (
807
808
  }
808
809
  await logger.group("Publishing packages", async () => {
809
810
  if (packageManager.publishWorkspaces) {
810
- await packageManager.publishWorkspaces(rootWorkspace);
811
+ await packageManager.publishWorkspaces(rootWorkspace, {
812
+ provenance: options.publishProvenance,
813
+ });
811
814
  } else {
812
815
  for (const [workspace] of bumpedWorkspaces.entries()) {
813
816
  if (workspace.pkg.private) {
@@ -818,7 +821,9 @@ export const versionCommandAction = async (
818
821
  }
819
822
 
820
823
  logger.info(`Publishing ${getWorkspaceName(workspace)}`);
821
- await packageManager.publish(workspace);
824
+ await packageManager.publish(workspace, {
825
+ provenance: options.publishProvenance,
826
+ });
822
827
  }
823
828
  }
824
829
  });
@@ -843,6 +848,7 @@ export const Defaults: VersionCommandOptions = {
843
848
  gitRemote: "origin",
844
849
  verbose: false,
845
850
  publish: false,
851
+ publishProvenance: false,
846
852
  };
847
853
 
848
854
  export default program
@@ -936,4 +942,10 @@ export default program
936
942
  ).choices(["bun", "yarn"]),
937
943
  )
938
944
  .addOption(new Option("--publish", "Publish after versioning").default(false))
945
+ .addOption(
946
+ new Option(
947
+ "--publish-provenance",
948
+ "Generate provenance attestation when publishing (if supported by package manager)",
949
+ ).default(false),
950
+ )
939
951
  .action((options) => versionCommandAction(options));
@@ -1,12 +1,29 @@
1
1
  import { execCommand } from "../utils/execCommand.ts";
2
- import type { PackageManager } from "./PackageManager.ts";
2
+ import type {
3
+ PackageManager,
4
+ PackageManagerPublishOptions,
5
+ } from "./PackageManager.ts";
3
6
 
4
7
  export const BunPackageManager: PackageManager = {
5
8
  async runScript(workspace, scriptName) {
6
9
  await execCommand(workspace, ["bun", "run", scriptName], "inherit");
7
10
  },
8
11
 
9
- async publish(workspace) {
10
- await execCommand(workspace, ["bun", "publish"], "inherit");
12
+ async publish(workspace, options?: PackageManagerPublishOptions) {
13
+ if (options?.provenance) {
14
+ // Use bun pack for provenance support
15
+ // See: https://github.com/oven-sh/bun/issues/15601
16
+ const packResult = await execCommand(workspace, ["bun", "pack"]);
17
+ // Extract .tgz filename from output (find line ending with .tgz)
18
+ const lines = packResult.stdout.trim().split("\n");
19
+ const tgzPath =
20
+ lines.find((line) => line.endsWith(".tgz")) ?? lines.at(-1);
21
+ if (!tgzPath) {
22
+ throw new Error("Failed to extract .tgz path from bun pack output");
23
+ }
24
+ await execCommand(workspace, ["npm", "publish", "--provenance", tgzPath]);
25
+ } else {
26
+ await execCommand(workspace, ["bun", "publish"], "inherit");
27
+ }
11
28
  },
12
29
  };
@@ -3,11 +3,21 @@ import type { Workspace } from "../utils/packageUtils.ts";
3
3
  import { BunPackageManager } from "./BunPackageManager.ts";
4
4
  import { YarnPackageManager } from "./YarnPackageManager.ts";
5
5
 
6
+ export interface PackageManagerPublishOptions {
7
+ provenance?: boolean;
8
+ }
9
+
6
10
  export interface PackageManager {
7
11
  installOnPackageContentChange?: (rootWorkspace: Workspace) => Promise<void>;
8
12
  runScript: (workspace: Workspace, scriptName: string) => Promise<void>;
9
- publish: (workspace: Workspace) => Promise<void>;
10
- publishWorkspaces?: (rootWorkspace: Workspace) => Promise<void>;
13
+ publish: (
14
+ workspace: Workspace,
15
+ options?: PackageManagerPublishOptions,
16
+ ) => Promise<void>;
17
+ publishWorkspaces?: (
18
+ rootWorkspace: Workspace,
19
+ options?: PackageManagerPublishOptions,
20
+ ) => Promise<void>;
11
21
  }
12
22
 
13
23
  export const autoDetectPackageManager = (
@@ -1,6 +1,9 @@
1
1
  import { execCommand } from "../utils/execCommand.ts";
2
2
  import type { Workspace } from "../utils/packageUtils.ts";
3
- import type { PackageManager } from "./PackageManager.ts";
3
+ import type {
4
+ PackageManager,
5
+ PackageManagerPublishOptions,
6
+ } from "./PackageManager.ts";
4
7
 
5
8
  export const YarnPackageManager: PackageManager = {
6
9
  async installOnPackageContentChange(rootWorkspace: Workspace) {
@@ -11,24 +14,31 @@ export const YarnPackageManager: PackageManager = {
11
14
  await execCommand(workspace, ["yarn", "run", scriptName], "inherit");
12
15
  },
13
16
 
14
- async publish(workspace: Workspace) {
15
- await execCommand(workspace, ["yarn", "npm", "publish"], "inherit");
17
+ async publish(workspace: Workspace, options?: PackageManagerPublishOptions) {
18
+ const publishArgs = ["yarn", "npm", "publish"];
19
+ if (options?.provenance) {
20
+ publishArgs.push("--provenance");
21
+ }
22
+ await execCommand(workspace, publishArgs, "inherit");
16
23
  },
17
24
 
18
- async publishWorkspaces(rootWorkspace: Workspace) {
19
- await execCommand(
20
- rootWorkspace,
21
- [
22
- "yarn",
23
- "workspaces",
24
- "foreach",
25
- "--all",
26
- "--parallel",
27
- "--no-private",
28
- "npm",
29
- "publish",
30
- ],
31
- "inherit",
32
- );
25
+ async publishWorkspaces(
26
+ rootWorkspace: Workspace,
27
+ options?: PackageManagerPublishOptions,
28
+ ) {
29
+ const publishArgs = [
30
+ "yarn",
31
+ "workspaces",
32
+ "foreach",
33
+ "--all",
34
+ "--parallel",
35
+ "--no-private",
36
+ "npm",
37
+ "publish",
38
+ ];
39
+ if (options?.provenance) {
40
+ publishArgs.push("--provenance");
41
+ }
42
+ await execCommand(rootWorkspace, publishArgs, "inherit");
33
43
  },
34
44
  };
package/.editorconfig DELETED
@@ -1,13 +0,0 @@
1
- # EditorConfig helps developers define and maintain consistent
2
- # coding styles between different editors and IDEs
3
- # http://editorconfig.org
4
-
5
- root = true
6
-
7
- [*]
8
- indent_style = space
9
- indent_size = 2
10
- end_of_line = lf
11
- charset = utf-8
12
- trim_trailing_whitespace = true
13
- insert_final_newline = true
package/.yo-rc.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "pob": {
3
- "app": {
4
- "type": "node",
5
- "testing": true,
6
- "codecov": true,
7
- "distribute": true
8
- },
9
- "project": {
10
- "type": "app"
11
- }
12
- }
13
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "bun-basic",
3
- "version": "1.0.0"
4
- }
@@ -1,3 +0,0 @@
1
- {
2
- "name": "bun-no-version"
3
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "yarn-basic",
3
- "version": "1.0.0"
4
- }
@@ -1,12 +0,0 @@
1
- # This file is generated by running "yarn install" inside your project.
2
- # Manual changes might be lost - proceed with caution!
3
-
4
- __metadata:
5
- version: 8
6
- cacheKey: 10c0
7
-
8
- "basic@workspace:.":
9
- version: 0.0.0-use.local
10
- resolution: "basic@workspace:."
11
- languageName: unknown
12
- linkType: soft
@@ -1,7 +0,0 @@
1
- {
2
- "name": "yarn-monorepo",
3
- "version": "1.0.0",
4
- "workspaces": [
5
- "packages/*"
6
- ]
7
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "package-1",
3
- "version": "1.0.0"
4
- }
@@ -1,7 +0,0 @@
1
- {
2
- "name": "package-2",
3
- "version": "1.0.0",
4
- "dependencies": {
5
- "package-1": "^1.0.0"
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "name": "package-3",
3
- "version": "1.0.0",
4
- "devDependencies": {
5
- "package-2": "^1.0.0"
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "name": "package-4",
3
- "version": "1.0.0",
4
- "dependencies": {
5
- "package-1": "^0.0.0"
6
- }
7
- }
@@ -1,8 +0,0 @@
1
- {
2
- "name": "package-5",
3
- "private": true,
4
- "version": "1.0.0",
5
- "dependencies": {
6
- "package-1": "^1.0.0"
7
- }
8
- }
File without changes
@@ -1,7 +0,0 @@
1
- {
2
- "name": "monorepo-duplicate-names",
3
- "version": "1.0.0",
4
- "workspaces": [
5
- "packages/*"
6
- ]
7
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "duplicate-name",
3
- "version": "1.0.0"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "duplicate-name",
3
- "version": "2.0.0"
4
- }
@@ -1,7 +0,0 @@
1
- {
2
- "name": "monorepo-invalid-package-json",
3
- "version": "1.0.0",
4
- "workspaces": [
5
- "packages/*"
6
- ]
7
- }
@@ -1,5 +0,0 @@
1
- {
2
- "name": "invalid-json-package",
3
- "version": "1.0.0",
4
- // invalid comment
5
- }
@@ -1,9 +0,0 @@
1
- {
2
- "name": "monorepo-nested",
3
- "version": "1.0.0",
4
- "workspaces": [
5
- "packages/*",
6
- "packages/nested-1/packages/*",
7
- "packages/**"
8
- ]
9
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "deep-nested-package",
3
- "version": "1.0.0"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "nested-package-2",
3
- "version": "1.0.0"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "nested-package-2",
3
- "version": "1.0.0"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "nested-package-1",
3
- "version": "1.0.0"
4
- }
@@ -1,7 +0,0 @@
1
- {
2
- "name": "monorepo-no-name",
3
- "version": "1.0.0",
4
- "workspaces": [
5
- "packages/*"
6
- ]
7
- }
@@ -1,9 +0,0 @@
1
- {
2
- "name": "monorepo-object-form",
3
- "version": "1.0.0",
4
- "workspaces": {
5
- "packages": [
6
- "packages/*"
7
- ]
8
- }
9
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "package-1",
3
- "version": "1.0.0"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "package-2",
3
- "version": "1.0.0"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "package-3",
3
- "version": "1.0.0"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "package-4",
3
- "version": "1.0.0"
4
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "package-5",
3
- "version": "1.0.0"
4
- }
@@ -1,3 +0,0 @@
1
- {
2
- "name": "no-version"
3
- }
File without changes
@@ -1,7 +0,0 @@
1
- {
2
- "name": "with-lifecycle",
3
- "version": "1.0.0",
4
- "scripts": {
5
- "preversion": "echo preversion"
6
- }
7
- }
@@ -1,11 +0,0 @@
1
- # This file is generated by running "yarn install" inside your project.
2
- # Manual changes might be lost - proceed with caution!
3
-
4
- __metadata:
5
- version: 6
6
-
7
- "with-lifecycle@workspace:.":
8
- version: 0.0.0-use.local
9
- resolution: "with-lifecycle@workspace:."
10
- languageName: unknown
11
- linkType: soft
package/rollup.config.mjs DELETED
@@ -1,12 +0,0 @@
1
- import { dirname } from "node:path";
2
- import { fileURLToPath } from "node:url";
3
- import createRollupConfig from "@pob/rollup-esbuild/createRollupConfig.js";
4
- import run from "@pob/rollup-esbuild/plugin-run.cjs";
5
-
6
- const watch = process.env.ROLLUP_WATCH === "true";
7
-
8
- export default createRollupConfig({
9
- cwd: dirname(fileURLToPath(import.meta.url)),
10
- outDirectory: "dist",
11
- plugins: [watch && run({ execArgv: ["--enable-source-maps"] })],
12
- });
package/tsconfig.json DELETED
@@ -1,21 +0,0 @@
1
- {
2
- "extends": [
3
- "@pob/root/tsconfigs/strict.json",
4
- "@pob/root/tsconfigs/targets/rollup-node-22.json"
5
- ],
6
- "include": ["src/**/*.ts"],
7
- "compilerOptions": {
8
- "rootDir": "src",
9
- "baseUrl": "" /* Base directory to resolve non-absolute module names. */,
10
- "noEmit": true,
11
- "tsBuildInfoFile": "node_modules/.cache/tsc/tsbuildinfo",
12
- "incremental": true,
13
-
14
- "resolveJsonModule": true,
15
-
16
- "paths": {
17
- "@pob/rollup-esbuild": ["../../@pob/rollup-esbuild/lib"],
18
- "@pob/rollup-esbuild/*": ["../../@pob/rollup-esbuild/lib/*"]
19
- }
20
- }
21
- }
package/vitest.config.js DELETED
@@ -1,9 +0,0 @@
1
- import { defineConfig } from "vitest/config";
2
-
3
- export default defineConfig({
4
- test: {
5
- globals: true,
6
- environment: "node",
7
- include: ["src/**/*.test.ts"],
8
- },
9
- });