annotate gui_ze/gui_ze.bzl @ 186:8cf4ec5e2191 hg-web

Fixed merge conflict.
author MrJuneJune <me@mrjunejune.com>
date Fri, 23 Jan 2026 22:38:59 -0800
parents fed99fc04e12 8c74204fd362
children a2725419f988
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1 def _foo_impl(ctx):
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
2 out = ctx.actions.declare_file(ctx.label.name)
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
3 ctx.actions.write(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
4 output = out,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
5 content = "Hello!\n",
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
6 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
7 return [DefaultInfo(files = depset([out]))]
8
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
8
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
9 foo_binary = rule(
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
10 implementation = _foo_impl,
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
11 )
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
12
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
13 def _bundle_impl(ctx):
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
14 """
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
15 bundle binary target into a folder which can later be used to make a post to github easily.
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
16 """
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
17 binary_target = ctx.attr.binary
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
18 binary = binary_target[DefaultInfo].files.to_list()[0] # First files are binary
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
19 runfiles_files = binary_target[DefaultInfo].default_runfiles.files.to_list()
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
20
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
21 # Name as output directory
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
22 out_dir = ctx.actions.declare_directory(ctx.label.name)
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
23
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
24 copy_cmd = []
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
25 copy_cmd.append("mkdir -p {}".format(out_dir.path))
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
26
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
27 for f in runfiles_files:
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
28 if f.path == binary.path:
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
29 continue
15
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
30
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
31 start = 0
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
32 for directory in f.path.split("/"):
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
33 if directory == binary.short_path.split("/")[0]:
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
34 break
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
35 start += 1
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
36
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
37 # Remove the first folder (output) and last file (actaul files that needed to be copied)
15
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
38 paths = "/".join(f.path.split("/")[start:-1])
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
39 full_path = "{}/{}".format(out_dir.path, paths)
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
40 copy_cmd.append("mkdir -p {}".format(full_path))
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
41 copy_cmd.append("cp {} {}".format(f.path, full_path))
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
42
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
43 copy_cmd.append("cp {} {}".format(binary.path, out_dir.path))
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
44
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
45 ctx.actions.run_shell(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
46 inputs = runfiles_files,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
47 outputs = [out_dir],
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
48 command = " && ".join(copy_cmd),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
49 progress_message = "Bundling {}".format(ctx.label.name),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
50 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
51 return [DefaultInfo(files = depset([out_dir]))]
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
52
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
53 bundle = rule(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
54 implementation = _bundle_impl,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
55 attrs = {
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
56 "binary": attr.label(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
57 doc = "The cc_binary target to bundle",
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
58 providers = [DefaultInfo],
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
59 ),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
60 },
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
61 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
62
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
63
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
64 def _bun_binary_impl(ctx):
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
65 out = ctx.actions.declare_file("bun")
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
66 ctx.actions.run_shell(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
67 inputs = ctx.files.srcs,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
68 outputs = [out],
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
69 command = """
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
70 mkdir -p {outdir}
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
71 unzip -j {src} {inner} -d {outdir}
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
72 chmod +x {outdir}/bun
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
73 """.format(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
74 outdir = out.dirname,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
75 src = ctx.files.srcs[0].path,
24
7d3fa1a7a854 [GuiZe] Support x86 chip for bun.
June Park <parkjune1995@gmail.com>
parents: 15
diff changeset
76 inner = ctx.attr.src_folder,
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
77 out = out.path,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
78 ),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
79 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
80 return DefaultInfo(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
81 files = depset([out]),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
82 executable = out,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
83 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
84
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
85 bun_binary = rule(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
86 implementation = _bun_binary_impl,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
87 attrs = {
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
88 "srcs": attr.label_list(allow_files=True),
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
89 "src_folder": attr.string(),
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
90 },
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
91 executable = True,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
92 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
93
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
94 def _bun_build_impl(ctx):
15
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
95 """
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
96 Run bun build on the folder
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
97
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
98 This sucks because you need to either copy node module into the root folder where main.ts file
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
99 exists or copy everything outwards. I chose to do it in this way.
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
100
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
101 TODO: If possible, maybe create a node_module inside of the main target path and create a symlink
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
102 TODO: Add a specific path for node_modules
15
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
103 """
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
104 out = ctx.actions.declare_file(ctx.label.name + ".js")
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
105 inputs = [ctx.file.src] + ctx.files.data
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
106
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
107 ctx.actions.run_shell(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
108 inputs = inputs,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
109 outputs = [out],
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
110 tools = [ctx.executable._bun] + inputs,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
111 command = """
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
112 cp -r third_party/bun/** . \
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
113 && cp -r {src_folder}/** . \
176
fed99fc04e12 [HgWeb] Problem with the emscript lol
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
114 && cp -r ./bazel-out/k8-fastbuild/bin/hg-web/src/** src \
fed99fc04e12 [HgWeb] Problem with the emscript lol
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
115 && ls src \
175
71ad34a8bc9a [HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents: 168
diff changeset
116 && export NODE_PATH=./node_modules && {bun_path} build {input_path} --outfile {output_path} --target browser
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
117 """.format(
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
118 bun_path = ctx.executable._bun.path,
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
119 src_folder = ctx.attr.src_folder,
175
71ad34a8bc9a [HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents: 168
diff changeset
120 # Fix this lol
71ad34a8bc9a [HgWeb] Can stream hg response now. Added react page for hg web since we use json anyway.
MrJuneJune <me@mrjunejune.com>
parents: 168
diff changeset
121 input_path = "/".join(ctx.file.src.path.split("/")[-2:]),
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
122 output_path = out.path,
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
123 ),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
124 progress_message = "Bundling {} with Bun!\n\n".format(ctx.file.src.path),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
125 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
126
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
127 return [DefaultInfo(files=depset([out]))]
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
128
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
129 bun_build = rule(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
130 implementation = _bun_build_impl,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
131 attrs = {
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
132 "src": attr.label(allow_single_file = [".ts", ".tsx", ".js", ".jsx"]),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
133 "_bun": attr.label(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
134 default = Label("//third_party/bun:bun"),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
135 executable = True,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
136 cfg = "exec",
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
137 ),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
138 "data": attr.label_list(allow_files=True),
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
139 "src_folder": attr.string(),
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
140 },
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
141 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
142
156
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
143 def _bun_run_impl(ctx):
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
144 actual_exe = ctx.actions.declare_file(ctx.label.name)
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
145
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
146 # 1. Get the workspace name (crucial for runfiles paths)
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
147 workspace_name = ctx.workspace_name
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
148
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
149 # 2. Define the paths relative to the runfiles root
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
150 bun_path = ctx.executable._bun.short_path
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
151 src_path = ctx.file.src.short_path
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
152
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
153 # 3. Create the launcher script
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
154 # We use a template to handle the environment and pathing
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
155 script_content = """#!/bin/bash
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
156 # Find the runfiles directory
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
157 if [[ -z "$RUNFILES_DIR" ]]; then
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
158 if [[ -d "$0.runfiles" ]]; then
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
159 RUNFILES_DIR="$0.runfiles"
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
160 fi
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
161 fi
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
162
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
163 # Navigate to the workspace root inside runfiles
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
164 cd "$RUNFILES_DIR/{workspace}"
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
165 pwd
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
166 # Execute bun with the src file and any extra arguments
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
167 exec "./{bun_bin}" run "./{src_file}" "$@"
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
168 """.format(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
169 workspace = workspace_name,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
170 bun_bin = bun_path,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
171 src_file = src_path
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
172 )
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
173
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
174 ctx.actions.write(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
175 output = actual_exe,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
176 content = script_content,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
177 is_executable = True,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
178 )
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
179
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
180 return [
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
181 DefaultInfo(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
182 executable = actual_exe,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
183 runfiles = ctx.runfiles(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
184 files = [ctx.file.src] + ctx.files.data + ctx.files._bun_files
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
185 ).merge(ctx.attr._bun[DefaultInfo].default_runfiles),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
186 ),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
187 ]
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
188
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
189 # TODO: Fix the rules so that it can do relative import.
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
190 bun_run = rule(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
191 implementation = _bun_run_impl,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
192 executable = True,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
193 attrs = {
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
194 "src": attr.label(allow_single_file = True, mandatory = True),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
195 "data": attr.label_list(allow_files = True),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
196 "_bun": attr.label(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
197 default = Label("//third_party/bun:bun"),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
198 executable = True,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
199 cfg = "exec"
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
200 ),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
201 "_bun_files": attr.label(default = Label("//third_party/bun:bun_files")),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
202 },
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
203 )
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
204
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
205
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
206 def _move_files_into_dir_impl(ctx):
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
207 srcs = ctx.files.srcs
64
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
208 outs = []
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
209 for src in srcs:
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
210 out = ctx.actions.declare_file(ctx.attr.dest + "/" + src.basename)
64
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
211 ctx.actions.run_shell(
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
212 inputs = [src],
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
213 outputs = [out],
176
fed99fc04e12 [HgWeb] Problem with the emscript lol
MrJuneJune <me@mrjunejune.com>
parents: 175
diff changeset
214 command = "cp -r \"$1\" \"$2\"",
64
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
215 arguments = [src.path, out.path],
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
216 )
64
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
217 outs.append(out)
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
218 return [DefaultInfo(files = depset(outs))]
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
219
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
220 move_files_into_dir = rule(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
221 implementation = _move_files_into_dir_impl,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
222 attrs = {
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
223 "srcs": attr.label_list(allow_files=True),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
224 "dest": attr.string(),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
225 },
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
226 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
227
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
228 def _move_to_directory_impl(ctx):
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
229 srcs = ctx.files.data
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
230 res = []
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
231 for src in srcs:
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
232 true = "/".join(src.path.split("/")[2:])
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
233 path = ctx.attr.dest + "/" + true if ctx.attr.dest != "" else true
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
234 out = ctx.actions.declare_file(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
235 path
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
236 );
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
237 ctx.actions.symlink(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
238 output = out,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
239 target_file = src,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
240 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
241 res.append(out)
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
242 return [DefaultInfo(files = depset(res))]
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
243
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
244 move_to_directory = rule(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
245 implementation = _move_to_directory_impl,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
246 attrs = {
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
247 "data": attr.label_list(allow_files=True),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
248 "dest": attr.string(),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
249 },
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
250 )
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
251
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
252
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
253 def _macos_app_impl(ctx):
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
254 """Implementation for creating a macOS .app bundle from a binary."""
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
255 binary = ctx.file.binary
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
256 app_name = ctx.attr.app_name
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
257 bundle_id = ctx.attr.bundle_id
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
258
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
259 # Declare the .app directory as output
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
260 app_dir = ctx.actions.declare_directory(app_name + ".app")
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
261
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
262 ctx.actions.run_shell(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
263 inputs = [binary],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
264 outputs = [app_dir],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
265 command = """
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
266 set -e
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
267
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
268 APPDIR="{app_dir}"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
269
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
270 rm -rf "$APPDIR"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
271 mkdir -p "$APPDIR/Contents/MacOS"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
272 mkdir -p "$APPDIR/Contents/Resources"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
273
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
274 cp {binary} "$APPDIR/Contents/MacOS/{app_name}"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
275 chmod +x "$APPDIR/Contents/MacOS/{app_name}"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
276
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
277 cat > "$APPDIR/Contents/Info.plist" <<EOF
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
278 <?xml version="1.0" encoding="UTF-8"?>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
279 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
280 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
281 <plist version="1.0">
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
282 <dict>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
283 <key>CFBundleExecutable</key>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
284 <string>{app_name}</string>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
285 <key>CFBundleIdentifier</key>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
286 <string>{bundle_id}</string>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
287 <key>CFBundleName</key>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
288 <string>{app_name}</string>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
289 <key>CFBundleVersion</key>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
290 <string>1.0</string>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
291 </dict>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
292 </plist>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
293 EOF
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
294 """.format(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
295 app_dir = app_dir.path,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
296 binary = binary.path,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
297 app_name = app_name,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
298 bundle_id = bundle_id,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
299 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
300 progress_message = "Creating macOS app bundle for {}".format(app_name),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
301 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
302
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
303 return [DefaultInfo(files = depset([app_dir]))]
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
304
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
305 _macos_app = rule(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
306 implementation = _macos_app_impl,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
307 attrs = {
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
308 "binary": attr.label(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
309 allow_single_file = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
310 mandatory = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
311 doc = "The binary to bundle into a .app",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
312 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
313 "app_name": attr.string(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
314 mandatory = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
315 doc = "Name of the application",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
316 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
317 "bundle_id": attr.string(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
318 mandatory = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
319 doc = "Bundle identifier (e.g., com.example.app)",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
320 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
321 },
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
322 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
323
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
324 def _macos_signed_app_impl(ctx):
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
325 """Implementation for signing a macOS .app bundle."""
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
326 app_dir = ctx.file.app
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
327 app_name = ctx.attr.app_name
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
328
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
329 # Declare the signed .app directory as output
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
330 signed_app_dir = ctx.actions.declare_directory(app_name + "_signed.app")
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
331
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
332 ctx.actions.run_shell(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
333 inputs = [app_dir],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
334 outputs = [signed_app_dir],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
335 command = """
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
336 set -e
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
337
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
338 APPDIR="{app_dir}"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
339 SIGNEDDIR="{signed_dir}"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
340
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
341 rm -rf "$SIGNEDDIR"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
342 # Use -L to dereference symlinks, as codesign doesn't work with symlinks
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
343 cp -RL "$APPDIR" "$SIGNEDDIR"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
344
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
345 codesign --deep --force --sign - "$SIGNEDDIR"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
346 """.format(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
347 app_dir = app_dir.path,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
348 signed_dir = signed_app_dir.path,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
349 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
350 progress_message = "Signing macOS app bundle {}".format(app_name),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
351 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
352
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
353 return [DefaultInfo(files = depset([signed_app_dir]))]
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
354
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
355 _macos_signed_app = rule(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
356 implementation = _macos_signed_app_impl,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
357 attrs = {
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
358 "app": attr.label(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
359 allow_single_file = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
360 mandatory = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
361 doc = "The .app directory to sign",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
362 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
363 "app_name": attr.string(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
364 mandatory = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
365 doc = "Name of the application",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
366 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
367 },
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
368 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
369
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
370 def macos_app_and_dmg(name, binary, bundle_id = "com.example.app"):
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
371 """
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
372 Creates a macOS .app bundle, signs it, and packages it into a DMG.
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
373
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
374 Args:
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
375 name: Base name for the generated targets
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
376 binary: Label of the binary target to bundle
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
377 bundle_id: Bundle identifier for the app (default: com.example.app)
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
378
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
379 Generates:
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
380 {name}_app: The .app bundle
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
381 {name}_signed_app: The signed .app bundle
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
382 {name}_dmg: The final DMG file
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
383 """
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
384 macos_constraint = ["@platforms//os:macos"]
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
385
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
386 # 1. Build the .app bundle
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
387 _macos_app(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
388 name = name + "_app",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
389 binary = binary,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
390 app_name = name,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
391 bundle_id = bundle_id,
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
392 target_compatible_with = macos_constraint,
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
393 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
394
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
395 # 2. Sign the .app
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
396 _macos_signed_app(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
397 name = name + "_signed_app",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
398 app = ":" + name + "_app",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
399 app_name = name,
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
400 target_compatible_with = macos_constraint,
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
401 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
402
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
403 # 3. Create the DMG
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
404 native.genrule(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
405 name = name + "_dmg",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
406 srcs = [":" + name + "_signed_app"],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
407 outs = [name + ".dmg"],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
408 cmd = """
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
409 set -e
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
410
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
411 SIGNEDDIR="$(location :{name}_signed_app)"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
412
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
413 hdiutil create \
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
414 -volname {name} \
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
415 -srcfolder "$$SIGNEDDIR" \
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
416 -ov -format UDZO "$@"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
417 """.format(name = name),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
418 local = 1, # Disable sandboxing for hdiutil
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
419 tags = ["no-sandbox"],
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
420 target_compatible_with = macos_constraint,
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
421 )