From 8f56a416b07ded15b89d5fb3994561391901c51a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 4 Mar 2026 08:38:02 +0000 Subject: [PATCH 1/3] Initial plan -- 2.49.1 From f9d2c362637c500e0563893e43996b08f9f974c3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 4 Mar 2026 08:43:51 +0000 Subject: [PATCH 2/3] test: add workspace monorepo bun install test Co-authored-by: Eriyc <50216491+Eriyc@users.noreply.github.com> --- tests/install_test/BUILD.bazel | 19 +++++++++++++ tests/install_test/workspaces.sh | 46 ++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100755 tests/install_test/workspaces.sh diff --git a/tests/install_test/BUILD.bazel b/tests/install_test/BUILD.bazel index 92ac944..d8758dd 100644 --- a/tests/install_test/BUILD.bazel +++ b/tests/install_test/BUILD.bazel @@ -76,3 +76,22 @@ sh_test( args = ["$(location //internal:bun_install.bzl)"], data = ["//internal:bun_install.bzl"], ) + +sh_test( + name = "bun_install_workspaces_test", + srcs = ["workspaces.sh"], + args = select({ + ":linux_x86_64": ["$(location @bun_linux_x64//:bun)"], + ":linux_aarch64": ["$(location @bun_linux_aarch64//:bun)"], + ":darwin_x86_64": ["$(location @bun_darwin_x64//:bun)"], + ":darwin_aarch64": ["$(location @bun_darwin_aarch64//:bun)"], + "//conditions:default": ["$(location @bun_linux_x64//:bun)"], + }), + data = select({ + ":linux_x86_64": ["@bun_linux_x64//:bun"], + ":linux_aarch64": ["@bun_linux_aarch64//:bun"], + ":darwin_x86_64": ["@bun_darwin_x64//:bun"], + ":darwin_aarch64": ["@bun_darwin_aarch64//:bun"], + "//conditions:default": ["@bun_linux_x64//:bun"], + }), +) diff --git a/tests/install_test/workspaces.sh b/tests/install_test/workspaces.sh new file mode 100755 index 0000000..30ce9ef --- /dev/null +++ b/tests/install_test/workspaces.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +set -euo pipefail + +bun_path="$1" +workdir="$(mktemp -d)" +trap 'rm -rf "${workdir}"' EXIT + +mkdir -p "${workdir}/packages/pkg-a" "${workdir}/packages/pkg-b" + +cat >"${workdir}/package.json" <<'JSON' +{ + "name": "workspace-root", + "private": true, + "workspaces": ["packages/*"] +} +JSON + +cat >"${workdir}/packages/pkg-a/package.json" <<'JSON' +{ + "name": "@workspace/pkg-a", + "version": "1.0.0", + "main": "index.js" +} +JSON + +cat >"${workdir}/packages/pkg-a/index.js" <<'JS' +module.exports = { value: 42 }; +JS + +cat >"${workdir}/packages/pkg-b/package.json" <<'JSON' +{ + "name": "@workspace/pkg-b", + "version": "1.0.0", + "dependencies": { + "@workspace/pkg-a": "workspace:*" + }, + "scripts": { + "check": "bun -e \"const { value } = require('@workspace/pkg-a'); if (value !== 42) process.exit(1)\"" + } +} +JSON + +"${bun_path}" install --cwd "${workdir}" >/dev/null +rm -rf "${workdir}/node_modules" "${workdir}/packages/pkg-b/node_modules" +"${bun_path}" install --cwd "${workdir}" --frozen-lockfile >/dev/null +"${bun_path}" run --cwd "${workdir}/packages/pkg-b" check >/dev/null -- 2.49.1 From 481acd9f84f40e78affa2552a8ca4247868d610f Mon Sep 17 00:00:00 2001 From: eric Date: Wed, 4 Mar 2026 09:53:19 +0100 Subject: [PATCH 3/3] test: add bun workspace tests --- examples/workspace/BUILD.bazel | 22 +++++++++++++++++++ examples/workspace/README.md | 14 ++++++++++++ examples/workspace/package.json | 10 +++++++++ examples/workspace/packages/pkg-a/index.ts | 3 +++ .../workspace/packages/pkg-a/package.json | 8 +++++++ examples/workspace/packages/pkg-b/main.ts | 3 +++ .../workspace/packages/pkg-b/package.json | 8 +++++++ tests/integration_test/BUILD.bazel | 22 +++++++++++++++++++ .../examples_workspace_bundle_e2e_test.sh | 7 ++++++ .../examples_workspace_catalog_shape_test.sh | 11 ++++++++++ 10 files changed, 108 insertions(+) create mode 100644 examples/workspace/BUILD.bazel create mode 100644 examples/workspace/README.md create mode 100644 examples/workspace/package.json create mode 100644 examples/workspace/packages/pkg-a/index.ts create mode 100644 examples/workspace/packages/pkg-a/package.json create mode 100644 examples/workspace/packages/pkg-b/main.ts create mode 100644 examples/workspace/packages/pkg-b/package.json create mode 100755 tests/integration_test/examples_workspace_bundle_e2e_test.sh create mode 100755 tests/integration_test/examples_workspace_catalog_shape_test.sh diff --git a/examples/workspace/BUILD.bazel b/examples/workspace/BUILD.bazel new file mode 100644 index 0000000..1f5da58 --- /dev/null +++ b/examples/workspace/BUILD.bazel @@ -0,0 +1,22 @@ +load("//bun:defs.bzl", "bun_bundle", "ts_library") + +package(default_visibility = ["//visibility:public"]) + +exports_files([ + "README.md", + "package.json", + "packages/pkg-a/package.json", + "packages/pkg-b/package.json", +]) + +ts_library( + name = "pkg_a_lib", + srcs = ["packages/pkg-a/index.ts"], +) + +bun_bundle( + name = "pkg_b_bundle", + entry_points = ["packages/pkg-b/main.ts"], + deps = [":pkg_a_lib"], + target = "bun", +) diff --git a/examples/workspace/README.md b/examples/workspace/README.md new file mode 100644 index 0000000..ad13c79 --- /dev/null +++ b/examples/workspace/README.md @@ -0,0 +1,14 @@ +# workspace example + +Minimal Bun workspace-style layout with two packages: + +- `@workspace/pkg-a`: exports a string helper +- `@workspace/pkg-b`: imports from `pkg-a` and prints the message + +The workspace root also defines a Bun `catalog` pin for `lodash`, and both packages consume it via `"lodash": "catalog:"` to keep versions consistent across packages. + +This example demonstrates building a target from a workspace-shaped directory tree with Bazel: + +```bash +bazel build //examples/workspace:pkg_b_bundle +``` diff --git a/examples/workspace/package.json b/examples/workspace/package.json new file mode 100644 index 0000000..a6b3bf6 --- /dev/null +++ b/examples/workspace/package.json @@ -0,0 +1,10 @@ +{ + "name": "workspace-root", + "private": true, + "workspaces": [ + "packages/*" + ], + "catalog": { + "lodash": "^4.17.21" + } +} diff --git a/examples/workspace/packages/pkg-a/index.ts b/examples/workspace/packages/pkg-a/index.ts new file mode 100644 index 0000000..a857140 --- /dev/null +++ b/examples/workspace/packages/pkg-a/index.ts @@ -0,0 +1,3 @@ +export function workspaceMessage(): string { + return "workspace-pkg-a"; +} diff --git a/examples/workspace/packages/pkg-a/package.json b/examples/workspace/packages/pkg-a/package.json new file mode 100644 index 0000000..ec5dcd6 --- /dev/null +++ b/examples/workspace/packages/pkg-a/package.json @@ -0,0 +1,8 @@ +{ + "name": "@workspace/pkg-a", + "version": "1.0.0", + "main": "index.ts", + "dependencies": { + "lodash": "catalog:" + } +} diff --git a/examples/workspace/packages/pkg-b/main.ts b/examples/workspace/packages/pkg-b/main.ts new file mode 100644 index 0000000..4711bee --- /dev/null +++ b/examples/workspace/packages/pkg-b/main.ts @@ -0,0 +1,3 @@ +import { workspaceMessage } from "../pkg-a/index"; + +console.log(`hello-${workspaceMessage()}`); diff --git a/examples/workspace/packages/pkg-b/package.json b/examples/workspace/packages/pkg-b/package.json new file mode 100644 index 0000000..534c407 --- /dev/null +++ b/examples/workspace/packages/pkg-b/package.json @@ -0,0 +1,8 @@ +{ + "name": "@workspace/pkg-b", + "version": "1.0.0", + "dependencies": { + "@workspace/pkg-a": "workspace:*", + "lodash": "catalog:" + } +} diff --git a/tests/integration_test/BUILD.bazel b/tests/integration_test/BUILD.bazel index 05443aa..729ad60 100644 --- a/tests/integration_test/BUILD.bazel +++ b/tests/integration_test/BUILD.bazel @@ -13,6 +13,28 @@ sh_test( ], ) +sh_test( + name = "examples_workspace_bundle_e2e_test", + srcs = ["examples_workspace_bundle_e2e_test.sh"], + args = ["$(location //examples/workspace:pkg_b_bundle)"], + data = ["//examples/workspace:pkg_b_bundle"], +) + +sh_test( + name = "examples_workspace_catalog_shape_test", + srcs = ["examples_workspace_catalog_shape_test.sh"], + args = [ + "$(location //examples/workspace:package.json)", + "$(location //examples/workspace:packages/pkg-a/package.json)", + "$(location //examples/workspace:packages/pkg-b/package.json)", + ], + data = [ + "//examples/workspace:package.json", + "//examples/workspace:packages/pkg-a/package.json", + "//examples/workspace:packages/pkg-b/package.json", + ], +) + sh_test( name = "repo_all_targets_test", srcs = ["repo_all_targets_test.sh"], diff --git a/tests/integration_test/examples_workspace_bundle_e2e_test.sh b/tests/integration_test/examples_workspace_bundle_e2e_test.sh new file mode 100755 index 0000000..25a651b --- /dev/null +++ b/tests/integration_test/examples_workspace_bundle_e2e_test.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -euo pipefail + +bundle_file="$1" + +[[ -f ${bundle_file} ]] +grep -Eq 'hello-workspace-pkg-a|workspace-pkg-a' "${bundle_file}" diff --git a/tests/integration_test/examples_workspace_catalog_shape_test.sh b/tests/integration_test/examples_workspace_catalog_shape_test.sh new file mode 100755 index 0000000..9d50aa0 --- /dev/null +++ b/tests/integration_test/examples_workspace_catalog_shape_test.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -euo pipefail + +root_package_json="$1" +pkg_a_package_json="$2" +pkg_b_package_json="$3" + +grep -Eq '"catalog"[[:space:]]*:[[:space:]]*\{' "${root_package_json}" +grep -Eq '"lodash"[[:space:]]*:[[:space:]]*"\^4\.17\.21"' "${root_package_json}" +grep -Eq '"lodash"[[:space:]]*:[[:space:]]*"catalog:"' "${pkg_a_package_json}" +grep -Eq '"lodash"[[:space:]]*:[[:space:]]*"catalog:"' "${pkg_b_package_json}" -- 2.49.1