Mercurial
view gui_ze/gui_ze.bzl @ 50:983769fba767
Updated so that fzf works out of the box.
| author | June Park <me@mrjunejune.com> |
|---|---|
| date | Tue, 16 Dec 2025 21:01:45 -0500 |
| parents | 342726584be2 |
| children | ccb42d5bf8fd |
line wrap: on
line source
def _foo_impl(ctx): out = ctx.actions.declare_file(ctx.label.name) ctx.actions.write( output = out, content = "Hello!\n", ) return [DefaultInfo(files = depset([out]))] foo_binary = rule( implementation = _foo_impl, ) def _bundle_impl(ctx): """ bundle binary target into a folder which can later be used to make a post to github easily. """ binary_target = ctx.attr.binary binary = binary_target[DefaultInfo].files.to_list()[0] # First files are binary runfiles_files = binary_target[DefaultInfo].default_runfiles.files.to_list() # Name as output directory out_dir = ctx.actions.declare_directory(ctx.label.name) copy_cmd = [] copy_cmd.append("mkdir -p {}".format(out_dir.path)) for f in runfiles_files: if f.path == binary.path: continue start = 0 for directory in f.path.split("/"): if directory == binary.short_path.split("/")[0]: break print("\n\n equals: ", directory, binary.short_path.split("/")[0]); start += 1 # Remove the first folder (output) and last file (actaul files that needed to be copied) paths = "/".join(f.path.split("/")[start:-1]) full_path = "{}/{}".format(out_dir.path, paths) copy_cmd.append("mkdir -p {}".format(full_path)) copy_cmd.append("cp {} {}".format(f.path, full_path)) copy_cmd.append("cp {} {}".format(binary.path, out_dir.path)) ctx.actions.run_shell( inputs = runfiles_files, outputs = [out_dir], command = " && ".join(copy_cmd), progress_message = "Bundling {}".format(ctx.label.name), ) print("[INFO] See {}".format(out_dir.path)) return [DefaultInfo(files = depset([out_dir]))] bundle = rule( implementation = _bundle_impl, attrs = { "binary": attr.label( doc = "The cc_binary target to bundle", providers = [DefaultInfo], ), }, ) def _bun_binary_impl(ctx): out = ctx.actions.declare_file("bun") ctx.actions.run_shell( inputs = ctx.files.srcs, outputs = [out], command = """ mkdir -p {outdir} unzip -j {src} {inner} -d {outdir} chmod +x {outdir}/bun """.format( outdir = out.dirname, src = ctx.files.srcs[0].path, inner = ctx.attr.src_folder, out = out.path, ), ) return DefaultInfo( files = depset([out]), executable = out, ) bun_binary = rule( implementation = _bun_binary_impl, attrs = { "srcs": attr.label_list(allow_files=True), "src_folder": attr.string(), }, executable = True, ) def _bun_build_impl(ctx): """ Run bun build on the folder This sucks because you need to either copy node module into the root folder where main.ts file exists or copy everything outwards. I chose to do it in this way. TODO: If possible, maybe create a node_module inside of the main target path and create a symlink TODO: Add a specific path for node_modules """ out = ctx.actions.declare_file(ctx.label.name + ".js") inputs = [ctx.file.src] + ctx.files.data ctx.actions.run_shell( inputs = inputs, outputs = [out], tools = [ctx.executable._bun] + inputs, command = """ cp -r third_party/bun/** . \ && cp -r {src_folder}/** . \ && export NODE_PATH=./node_modules && {bun_path} build {input_path} --outfile {output_path} """.format( bun_path = ctx.executable._bun.path, src_folder = ctx.attr.src_folder, input_path = ctx.file.src.path.split("/")[-1], output_path = out.path, ), progress_message = "Bundling {} with Bun!\n\n".format(ctx.file.src.path), ) return [DefaultInfo(files=depset([out]))] bun_build = rule( implementation = _bun_build_impl, attrs = { "src": attr.label(allow_single_file = [".ts", ".tsx", ".js", ".jsx"]), "_bun": attr.label( default = Label("//third_party/bun:bun"), executable = True, cfg = "exec", ), "data": attr.label_list(allow_files=True), "src_folder": attr.string(), }, ) def _move_files_into_dir_impl(ctx): srcs = ctx.files.srcs for src in srcs: out = ctx.actions.declare_file(ctx.attr.dest + "/" + src.basename) ctx.actions.symlink( output = out, target_file = src, ) return [DefaultInfo(files = depset([out]))] move_files_into_dir = rule( implementation = _move_files_into_dir_impl, attrs = { "srcs": attr.label_list(allow_files=True), "dest": attr.string(), }, ) def _move_to_directory_impl(ctx): srcs = ctx.files.data res = [] for src in srcs: true = "/".join(src.path.split("/")[2:]) path = ctx.attr.dest + "/" + true if ctx.attr.dest != "" else true out = ctx.actions.declare_file( path ); ctx.actions.symlink( output = out, target_file = src, ) res.append(out) return [DefaultInfo(files = depset(res))] move_to_directory = rule( implementation = _move_to_directory_impl, attrs = { "data": attr.label_list(allow_files=True), "dest": attr.string(), }, )