Inital commit
This commit is contained in:
87
wails/private/run.bzl
Normal file
87
wails/private/run.bzl
Normal file
@@ -0,0 +1,87 @@
|
||||
"""Runnable Wails app launcher rule."""
|
||||
|
||||
load(":private/common.bzl", "bash_launcher")
|
||||
|
||||
def _wails_run_impl(ctx):
|
||||
launcher = ctx.actions.declare_file(ctx.label.name)
|
||||
|
||||
resolve_lines = """
|
||||
tool="$(resolve_runfile "{tool_short_path}")"
|
||||
binary="$(resolve_runfile "{binary_short_path}")"
|
||||
build_assets="$(resolve_runfile "{build_assets_short_path}")"
|
||||
icon=""
|
||||
if [[ -n "{icon_short_path}" ]]; then
|
||||
icon="$(resolve_runfile "{icon_short_path}")"
|
||||
fi
|
||||
""".format(
|
||||
tool_short_path = ctx.executable._tool.short_path,
|
||||
binary_short_path = ctx.executable.binary.short_path,
|
||||
build_assets_short_path = ctx.files.build_assets[0].short_path,
|
||||
icon_short_path = ctx.file.icon.short_path if ctx.file.icon else "",
|
||||
)
|
||||
|
||||
command_lines = """
|
||||
exec "$tool" \
|
||||
--binary "$binary" \
|
||||
--build-assets "$build_assets" \
|
||||
--frontend-url {frontend_url} \
|
||||
--icon "$icon" \
|
||||
--mode {mode}
|
||||
""".format(
|
||||
frontend_url = _shell_quote(ctx.attr.frontend_url),
|
||||
mode = _shell_quote(ctx.attr.mode),
|
||||
)
|
||||
|
||||
ctx.actions.write(
|
||||
output = launcher,
|
||||
is_executable = True,
|
||||
content = bash_launcher(resolve_lines, command_lines),
|
||||
)
|
||||
|
||||
transitive_files = [
|
||||
ctx.attr._tool[DefaultInfo].default_runfiles.files,
|
||||
ctx.attr.binary[DefaultInfo].default_runfiles.files,
|
||||
]
|
||||
|
||||
runfiles = ctx.runfiles(
|
||||
files = [
|
||||
ctx.executable._tool,
|
||||
ctx.executable.binary,
|
||||
] + ctx.files.build_assets + ([ctx.file.icon] if ctx.file.icon else []),
|
||||
transitive_files = depset(transitive = transitive_files),
|
||||
)
|
||||
|
||||
return [DefaultInfo(executable = launcher, runfiles = runfiles)]
|
||||
|
||||
def _shell_quote(value):
|
||||
return "'" + value.replace("'", "'\"'\"'") + "'"
|
||||
|
||||
wails_run = rule(
|
||||
implementation = _wails_run_impl,
|
||||
doc = "Creates a runnable target that launches a Wails application.",
|
||||
attrs = {
|
||||
"binary": attr.label(
|
||||
mandatory = True,
|
||||
executable = True,
|
||||
cfg = "target",
|
||||
),
|
||||
"build_assets": attr.label(
|
||||
mandatory = True,
|
||||
allow_files = True,
|
||||
),
|
||||
"frontend_url": attr.string(default = "http://127.0.0.1:9245"),
|
||||
"icon": attr.label(
|
||||
allow_single_file = True,
|
||||
),
|
||||
"mode": attr.string(
|
||||
default = "run",
|
||||
values = ["dev", "run"],
|
||||
),
|
||||
"_tool": attr.label(
|
||||
default = "//wails/tools:launch_app",
|
||||
cfg = "exec",
|
||||
executable = True,
|
||||
),
|
||||
},
|
||||
executable = True,
|
||||
)
|
||||
Reference in New Issue
Block a user