feat: proper windows support
This commit is contained in:
@@ -1,32 +1,37 @@
|
||||
load("//bun:defs.bzl", "bun_script")
|
||||
load("@rules_shell//shell:sh_test.bzl", "sh_test")
|
||||
load("//bun:defs.bzl", "bun_script")
|
||||
|
||||
bun_script(
|
||||
name = "hello_script",
|
||||
script = "hello",
|
||||
package_json = "package.json",
|
||||
data = ["hello.ts"],
|
||||
package_json = "package.json",
|
||||
script = "hello",
|
||||
)
|
||||
|
||||
sh_test(
|
||||
name = "bun_script_ts_test",
|
||||
size = "small",
|
||||
srcs = ["run_script.sh"],
|
||||
args = ["$(location :hello_script)", "hello-script"],
|
||||
args = [
|
||||
"$(location :hello_script)",
|
||||
"hello-script",
|
||||
],
|
||||
data = [":hello_script"],
|
||||
)
|
||||
|
||||
bun_script(
|
||||
name = "env_script",
|
||||
script = "print-env",
|
||||
package_json = "package.json",
|
||||
data = [
|
||||
".env",
|
||||
"env.ts",
|
||||
],
|
||||
package_json = "package.json",
|
||||
script = "print-env",
|
||||
)
|
||||
|
||||
sh_test(
|
||||
name = "bun_script_package_cwd_test",
|
||||
size = "small",
|
||||
srcs = ["run_env_script.sh"],
|
||||
args = ["$(location :env_script)"],
|
||||
data = [":env_script"],
|
||||
@@ -34,17 +39,18 @@ sh_test(
|
||||
|
||||
bun_script(
|
||||
name = "vite_dev_server",
|
||||
script = "dev",
|
||||
package_json = "vite_app/package.json",
|
||||
node_modules = "@script_test_vite_node_modules//:node_modules",
|
||||
data = [
|
||||
"vite_app/index.html",
|
||||
"vite_app/main.js",
|
||||
],
|
||||
node_modules = "@script_test_vite_node_modules//:node_modules",
|
||||
package_json = "vite_app/package.json",
|
||||
script = "dev",
|
||||
)
|
||||
|
||||
sh_test(
|
||||
name = "bun_script_vite_app_test",
|
||||
size = "small",
|
||||
srcs = ["run_vite_app.sh"],
|
||||
args = ["$(location :vite_dev_server)"],
|
||||
data = [":vite_dev_server"],
|
||||
@@ -52,28 +58,29 @@ sh_test(
|
||||
|
||||
bun_script(
|
||||
name = "vite_monorepo_app_a_dev_server",
|
||||
script = "dev",
|
||||
package_json = "vite_monorepo/apps/app-a/package.json",
|
||||
node_modules = "@script_test_vite_monorepo_node_modules//:node_modules",
|
||||
data = [
|
||||
"vite_monorepo/apps/app-a/index.html",
|
||||
"vite_monorepo/apps/app-a/main.js",
|
||||
],
|
||||
node_modules = "@script_test_vite_monorepo_node_modules//:node_modules",
|
||||
package_json = "vite_monorepo/apps/app-a/package.json",
|
||||
script = "dev",
|
||||
)
|
||||
|
||||
bun_script(
|
||||
name = "vite_monorepo_app_b_dev_server",
|
||||
script = "dev",
|
||||
package_json = "vite_monorepo/apps/app-b/package.json",
|
||||
node_modules = "@script_test_vite_monorepo_node_modules//:node_modules",
|
||||
data = [
|
||||
"vite_monorepo/apps/app-b/index.html",
|
||||
"vite_monorepo/apps/app-b/main.js",
|
||||
],
|
||||
node_modules = "@script_test_vite_monorepo_node_modules//:node_modules",
|
||||
package_json = "vite_monorepo/apps/app-b/package.json",
|
||||
script = "dev",
|
||||
)
|
||||
|
||||
sh_test(
|
||||
name = "bun_script_vite_monorepo_apps_test",
|
||||
size = "small",
|
||||
srcs = ["run_vite_monorepo_apps.sh"],
|
||||
args = [
|
||||
"$(location :vite_monorepo_app_a_dev_server)",
|
||||
@@ -85,54 +92,69 @@ sh_test(
|
||||
],
|
||||
)
|
||||
|
||||
sh_test(
|
||||
name = "bun_script_monorepo_launcher_shape_test",
|
||||
size = "small",
|
||||
srcs = ["verify_monorepo_launcher_shape.sh"],
|
||||
args = [
|
||||
"$(location :vite_monorepo_app_a_dev_server)",
|
||||
"$(location :paraglide_monorepo_app_a_build)",
|
||||
],
|
||||
data = [
|
||||
":paraglide_monorepo_app_a_build",
|
||||
":vite_monorepo_app_a_dev_server",
|
||||
],
|
||||
)
|
||||
|
||||
bun_script(
|
||||
name = "paraglide_monorepo_app_a_build",
|
||||
script = "build:app-a",
|
||||
package_json = "paraglide_monorepo/package.json",
|
||||
node_modules = "@script_test_paraglide_monorepo_node_modules//:node_modules",
|
||||
data = [
|
||||
"paraglide_monorepo/scripts/build-app-a.mjs",
|
||||
"paraglide_monorepo/scripts/build-app-b.mjs",
|
||||
"paraglide_monorepo/packages/i18n/package.json",
|
||||
"paraglide_monorepo/packages/i18n/project.inlang/settings.json",
|
||||
"paraglide_monorepo/packages/i18n/messages/en.json",
|
||||
"paraglide_monorepo/packages/i18n/messages/sv.json",
|
||||
"paraglide_monorepo/packages/app-a/package.json",
|
||||
"paraglide_monorepo/packages/app-a/index.html",
|
||||
"paraglide_monorepo/packages/app-a/main.js",
|
||||
"paraglide_monorepo/packages/app-a/package.json",
|
||||
"paraglide_monorepo/packages/app-a/vite.config.js",
|
||||
"paraglide_monorepo/packages/app-b/package.json",
|
||||
"paraglide_monorepo/packages/app-b/index.html",
|
||||
"paraglide_monorepo/packages/app-b/main.js",
|
||||
"paraglide_monorepo/packages/app-b/package.json",
|
||||
"paraglide_monorepo/packages/app-b/vite.config.js",
|
||||
"paraglide_monorepo/packages/i18n/messages/en.json",
|
||||
"paraglide_monorepo/packages/i18n/messages/sv.json",
|
||||
"paraglide_monorepo/packages/i18n/package.json",
|
||||
"paraglide_monorepo/packages/i18n/project.inlang/settings.json",
|
||||
"paraglide_monorepo/scripts/build-app-a.mjs",
|
||||
"paraglide_monorepo/scripts/build-app-b.mjs",
|
||||
],
|
||||
node_modules = "@script_test_paraglide_monorepo_node_modules//:node_modules",
|
||||
package_json = "paraglide_monorepo/package.json",
|
||||
script = "build:app-a",
|
||||
)
|
||||
|
||||
bun_script(
|
||||
name = "paraglide_monorepo_app_b_build",
|
||||
script = "build:app-b",
|
||||
package_json = "paraglide_monorepo/package.json",
|
||||
node_modules = "@script_test_paraglide_monorepo_node_modules//:node_modules",
|
||||
data = [
|
||||
"paraglide_monorepo/scripts/build-app-a.mjs",
|
||||
"paraglide_monorepo/scripts/build-app-b.mjs",
|
||||
"paraglide_monorepo/packages/i18n/package.json",
|
||||
"paraglide_monorepo/packages/i18n/project.inlang/settings.json",
|
||||
"paraglide_monorepo/packages/i18n/messages/en.json",
|
||||
"paraglide_monorepo/packages/i18n/messages/sv.json",
|
||||
"paraglide_monorepo/packages/app-a/package.json",
|
||||
"paraglide_monorepo/packages/app-a/index.html",
|
||||
"paraglide_monorepo/packages/app-a/main.js",
|
||||
"paraglide_monorepo/packages/app-a/package.json",
|
||||
"paraglide_monorepo/packages/app-a/vite.config.js",
|
||||
"paraglide_monorepo/packages/app-b/package.json",
|
||||
"paraglide_monorepo/packages/app-b/index.html",
|
||||
"paraglide_monorepo/packages/app-b/main.js",
|
||||
"paraglide_monorepo/packages/app-b/package.json",
|
||||
"paraglide_monorepo/packages/app-b/vite.config.js",
|
||||
"paraglide_monorepo/packages/i18n/messages/en.json",
|
||||
"paraglide_monorepo/packages/i18n/messages/sv.json",
|
||||
"paraglide_monorepo/packages/i18n/package.json",
|
||||
"paraglide_monorepo/packages/i18n/project.inlang/settings.json",
|
||||
"paraglide_monorepo/scripts/build-app-a.mjs",
|
||||
"paraglide_monorepo/scripts/build-app-b.mjs",
|
||||
],
|
||||
node_modules = "@script_test_paraglide_monorepo_node_modules//:node_modules",
|
||||
package_json = "paraglide_monorepo/package.json",
|
||||
script = "build:app-b",
|
||||
)
|
||||
|
||||
sh_test(
|
||||
name = "bun_script_paraglide_monorepo_build_test",
|
||||
size = "small",
|
||||
srcs = ["run_paraglide_monorepo_builds.sh"],
|
||||
args = [
|
||||
"$(location :paraglide_monorepo_app_a_build)",
|
||||
@@ -146,21 +168,22 @@ sh_test(
|
||||
|
||||
bun_script(
|
||||
name = "workspace_filtered_script",
|
||||
script = "say",
|
||||
package_json = "workspace_run/package.json",
|
||||
data = [
|
||||
"workspace_run/packages/pkg-a/package.json",
|
||||
"workspace_run/packages/pkg-a/say.ts",
|
||||
"workspace_run/packages/pkg-b/package.json",
|
||||
"workspace_run/packages/pkg-b/say.ts",
|
||||
],
|
||||
filters = ["./packages/pkg-a"],
|
||||
execution_mode = "sequential",
|
||||
filters = ["./packages/pkg-a"],
|
||||
package_json = "workspace_run/package.json",
|
||||
script = "say",
|
||||
silent = True,
|
||||
)
|
||||
|
||||
sh_test(
|
||||
name = "bun_script_workspace_filter_test",
|
||||
size = "small",
|
||||
srcs = ["run_workspace_script.sh"],
|
||||
args = ["$(location :workspace_filtered_script)"],
|
||||
data = [":workspace_filtered_script"],
|
||||
@@ -168,20 +191,21 @@ sh_test(
|
||||
|
||||
bun_script(
|
||||
name = "workspace_parallel_script",
|
||||
script = "say",
|
||||
package_json = "workspace_run/package.json",
|
||||
data = [
|
||||
"workspace_run/packages/pkg-a/package.json",
|
||||
"workspace_run/packages/pkg-a/say.ts",
|
||||
"workspace_run/packages/pkg-b/package.json",
|
||||
"workspace_run/packages/pkg-b/say.ts",
|
||||
],
|
||||
workspaces = True,
|
||||
execution_mode = "parallel",
|
||||
package_json = "workspace_run/package.json",
|
||||
script = "say",
|
||||
workspaces = True,
|
||||
)
|
||||
|
||||
sh_test(
|
||||
name = "bun_script_workspace_parallel_test",
|
||||
size = "small",
|
||||
srcs = ["run_workspace_parallel.sh"],
|
||||
args = ["$(location :workspace_parallel_script)"],
|
||||
data = [":workspace_parallel_script"],
|
||||
@@ -189,22 +213,24 @@ sh_test(
|
||||
|
||||
bun_script(
|
||||
name = "workspace_flagged_script",
|
||||
script = "say",
|
||||
package_json = "workspace_run/package.json",
|
||||
data = [
|
||||
"workspace_run/packages/pkg-a/package.json",
|
||||
"workspace_run/packages/pkg-a/say.ts",
|
||||
"workspace_run/packages/pkg-b/package.json",
|
||||
"workspace_run/packages/pkg-b/say.ts",
|
||||
],
|
||||
workspaces = True,
|
||||
execution_mode = "parallel",
|
||||
no_exit_on_error = True,
|
||||
package_json = "workspace_run/package.json",
|
||||
script = "say",
|
||||
shell = "system",
|
||||
visibility = ["//tests/ci_test:__pkg__"],
|
||||
workspaces = True,
|
||||
)
|
||||
|
||||
sh_test(
|
||||
name = "bun_script_workspace_flag_shape_test",
|
||||
size = "small",
|
||||
srcs = ["verify_launcher_flags.sh"],
|
||||
args = [
|
||||
"$(location :workspace_flagged_script)",
|
||||
|
||||
@@ -2,7 +2,23 @@
|
||||
set -euo pipefail
|
||||
|
||||
binary="$1"
|
||||
output="$(${binary})"
|
||||
|
||||
run_launcher() {
|
||||
local launcher="$1"
|
||||
shift
|
||||
if [[ ${launcher} == *.cmd ]]; then
|
||||
local command
|
||||
printf -v command '"%s"' "${launcher}"
|
||||
for arg in "$@"; do
|
||||
printf -v command '%s "%s"' "${command}" "${arg}"
|
||||
done
|
||||
cmd.exe /c "${command}" | tr -d '\r'
|
||||
return 0
|
||||
fi
|
||||
"${launcher}" "$@"
|
||||
}
|
||||
|
||||
output="$(run_launcher "${binary}")"
|
||||
|
||||
if [[ ${output} != "from-dotenv" ]]; then
|
||||
echo "Expected .env value from package directory, got: ${output}" >&2
|
||||
|
||||
@@ -10,13 +10,28 @@ cleanup() {
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
run_launcher() {
|
||||
local launcher="$1"
|
||||
shift
|
||||
if [[ ${launcher} == *.cmd ]]; then
|
||||
local command
|
||||
printf -v command '"%s"' "${launcher}"
|
||||
for arg in "$@"; do
|
||||
printf -v command '%s "%s"' "${command}" "${arg}"
|
||||
done
|
||||
cmd.exe /c "${command}" | tr -d '\r'
|
||||
return 0
|
||||
fi
|
||||
"${launcher}" "$@"
|
||||
}
|
||||
|
||||
verify_build() {
|
||||
local binary="$1"
|
||||
local out_dir="$2"
|
||||
local expected_title="$3"
|
||||
local expected_text="$4"
|
||||
|
||||
"${binary}" --outDir "${out_dir}" >/dev/null
|
||||
run_launcher "${binary}" --outDir "${out_dir}" >/dev/null
|
||||
|
||||
if [[ ! -f "${out_dir}/index.html" ]]; then
|
||||
echo "missing build output index.html for ${binary}" >&2
|
||||
|
||||
@@ -3,7 +3,23 @@ set -euo pipefail
|
||||
|
||||
binary="$1"
|
||||
expected="$2"
|
||||
output="$(${binary})"
|
||||
|
||||
run_launcher() {
|
||||
local launcher="$1"
|
||||
shift
|
||||
if [[ ${launcher} == *.cmd ]]; then
|
||||
local command
|
||||
printf -v command '"%s"' "${launcher}"
|
||||
for arg in "$@"; do
|
||||
printf -v command '%s "%s"' "${command}" "${arg}"
|
||||
done
|
||||
cmd.exe /c "${command}" | tr -d '\r'
|
||||
return 0
|
||||
fi
|
||||
"${launcher}" "$@"
|
||||
}
|
||||
|
||||
output="$(run_launcher "${binary}")"
|
||||
|
||||
if [[ ${output} != "${expected}" ]]; then
|
||||
echo "Unexpected output from ${binary}: ${output}" >&2
|
||||
|
||||
@@ -14,6 +14,23 @@ cleanup() {
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
start_launcher() {
|
||||
local launcher="$1"
|
||||
local log_target="$2"
|
||||
shift 2
|
||||
if [[ ${launcher} == *.cmd ]]; then
|
||||
local command
|
||||
printf -v command '"%s"' "${launcher}"
|
||||
for arg in "$@"; do
|
||||
printf -v command '%s "%s"' "${command}" "${arg}"
|
||||
done
|
||||
cmd.exe /c "${command}" >"${log_target}" 2>&1 &
|
||||
else
|
||||
"${launcher}" "$@" >"${log_target}" 2>&1 &
|
||||
fi
|
||||
server_pid=$!
|
||||
}
|
||||
|
||||
port="$(
|
||||
python3 - <<'PY'
|
||||
import socket
|
||||
@@ -24,8 +41,7 @@ sock.close()
|
||||
PY
|
||||
)"
|
||||
|
||||
"${binary}" --host 127.0.0.1 --port "${port}" --strictPort >"${log_file}" 2>&1 &
|
||||
server_pid=$!
|
||||
start_launcher "${binary}" "${log_file}" --host 127.0.0.1 --port "${port}" --strictPort
|
||||
|
||||
for _ in {1..60}; do
|
||||
if ! kill -0 "${server_pid}" 2>/dev/null; then
|
||||
|
||||
@@ -17,6 +17,23 @@ cleanup() {
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
start_launcher() {
|
||||
local launcher="$1"
|
||||
local log_target="$2"
|
||||
shift 2
|
||||
if [[ ${launcher} == *.cmd ]]; then
|
||||
local command
|
||||
printf -v command '"%s"' "${launcher}"
|
||||
for arg in "$@"; do
|
||||
printf -v command '%s "%s"' "${command}" "${arg}"
|
||||
done
|
||||
cmd.exe /c "${command}" >"${log_target}" 2>&1 &
|
||||
else
|
||||
"${launcher}" "$@" >"${log_target}" 2>&1 &
|
||||
fi
|
||||
server_pid=$!
|
||||
}
|
||||
|
||||
pick_port() {
|
||||
python3 - <<'PY'
|
||||
import socket
|
||||
@@ -37,8 +54,7 @@ verify_vite_app() {
|
||||
port="$(pick_port)"
|
||||
log_file="${workdir}/${log_name}.log"
|
||||
|
||||
"${binary}" --host 127.0.0.1 --port "${port}" --strictPort >"${log_file}" 2>&1 &
|
||||
server_pid=$!
|
||||
start_launcher "${binary}" "${log_file}" --host 127.0.0.1 --port "${port}" --strictPort
|
||||
|
||||
for _ in {1..60}; do
|
||||
if ! kill -0 "${server_pid}" 2>/dev/null; then
|
||||
|
||||
@@ -2,7 +2,23 @@
|
||||
set -euo pipefail
|
||||
|
||||
script_bin="$1"
|
||||
output="$(${script_bin})"
|
||||
|
||||
run_launcher() {
|
||||
local launcher="$1"
|
||||
shift
|
||||
if [[ ${launcher} == *.cmd ]]; then
|
||||
local command
|
||||
printf -v command '"%s"' "${launcher}"
|
||||
for arg in "$@"; do
|
||||
printf -v command '%s "%s"' "${command}" "${arg}"
|
||||
done
|
||||
cmd.exe /c "${command}" | tr -d '\r'
|
||||
return 0
|
||||
fi
|
||||
"${launcher}" "$@"
|
||||
}
|
||||
|
||||
output="$(run_launcher "${script_bin}")"
|
||||
|
||||
if [[ ${output} != *"pkg-a"* ]]; then
|
||||
echo "Expected workspace parallel run output to include pkg-a: ${output}" >&2
|
||||
|
||||
@@ -2,7 +2,23 @@
|
||||
set -euo pipefail
|
||||
|
||||
script_bin="$1"
|
||||
output="$(${script_bin})"
|
||||
|
||||
run_launcher() {
|
||||
local launcher="$1"
|
||||
shift
|
||||
if [[ ${launcher} == *.cmd ]]; then
|
||||
local command
|
||||
printf -v command '"%s"' "${launcher}"
|
||||
for arg in "$@"; do
|
||||
printf -v command '%s "%s"' "${command}" "${arg}"
|
||||
done
|
||||
cmd.exe /c "${command}" | tr -d '\r'
|
||||
return 0
|
||||
fi
|
||||
"${launcher}" "$@"
|
||||
}
|
||||
|
||||
output="$(run_launcher "${script_bin}")"
|
||||
|
||||
if [[ ${output} != *"pkg-a"* ]]; then
|
||||
echo "Expected workspace run output to include pkg-a: ${output}" >&2
|
||||
|
||||
@@ -1,12 +1,21 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
binary="$1"
|
||||
launcher="$1"
|
||||
shift
|
||||
|
||||
for expected in "$@"; do
|
||||
if ! grep -Fq -- "${expected}" "${binary}"; then
|
||||
echo "Expected ${binary} to contain ${expected}" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
python3 - "${launcher}" "$@" <<'PY'
|
||||
import json
|
||||
import pathlib
|
||||
import sys
|
||||
|
||||
path = pathlib.Path(sys.argv[1])
|
||||
if path.suffix.lower() == ".cmd":
|
||||
path = pathlib.Path(str(path)[:-4])
|
||||
spec = json.loads(pathlib.Path(f"{path}.launcher.json").read_text())
|
||||
argv = spec["argv"]
|
||||
|
||||
for value in sys.argv[2:]:
|
||||
if value not in argv:
|
||||
raise SystemExit(f"missing {value!r} in argv {argv!r}")
|
||||
PY
|
||||
|
||||
27
tests/script_test/verify_monorepo_launcher_shape.sh
Executable file
27
tests/script_test/verify_monorepo_launcher_shape.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
vite_launcher="$1"
|
||||
paraglide_launcher="$2"
|
||||
|
||||
python3 - "${vite_launcher}" "${paraglide_launcher}" <<'PY'
|
||||
import json
|
||||
import pathlib
|
||||
import sys
|
||||
|
||||
def read_spec(launcher: str):
|
||||
path = pathlib.Path(launcher)
|
||||
if path.suffix.lower() == ".cmd":
|
||||
path = pathlib.Path(str(path)[:-4])
|
||||
return json.loads(pathlib.Path(f"{path}.launcher.json").read_text())
|
||||
|
||||
vite_spec = read_spec(sys.argv[1])
|
||||
paraglide_spec = read_spec(sys.argv[2])
|
||||
|
||||
assert all(not root.startswith("../") for root in vite_spec["node_modules_roots"]), vite_spec
|
||||
assert "node_modules" in vite_spec["node_modules_roots"], vite_spec
|
||||
|
||||
assert all(not root.startswith("../") for root in paraglide_spec["node_modules_roots"]), paraglide_spec
|
||||
assert "node_modules" in paraglide_spec["node_modules_roots"], paraglide_spec
|
||||
assert "packages/i18n/node_modules" in paraglide_spec["node_modules_roots"], paraglide_spec
|
||||
PY
|
||||
Reference in New Issue
Block a user