From f63a74e2bc2ae07dfc76e68ee06967064cfe70bb Mon Sep 17 00:00:00 2001 From: Mikael Lixenstrand Date: Tue, 9 Apr 2024 14:18:32 +0200 Subject: [PATCH 1/7] Add common_root_as_var to use with nif --- util.bzl | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/util.bzl b/util.bzl index c1a4a2e9..8f2104f4 100644 --- a/util.bzl +++ b/util.bzl @@ -32,3 +32,37 @@ def without(item, elements): c = list(elements) c.remove(item) return c + +def _common_root_as_var(ctx): + if ctx.attr.var_name != "": + key = ctx.attr.var_name + else: + key = ctx.label.name.upper() + + value = ctx.files.srcs[0].dirname + for src in ctx.files.srcs: + if value.startswith(src.dirname): + value = src.dirname + elif src.dirname.startswith(value): + pass + elif value == src.dirname: + pass + else: + fail("%s and %s do not share a common root" % (value, src.dirname)) + + return [ + platform_common.TemplateVariableInfo({ + key: value, + }), + ] + +common_root_as_var = rule( + implementation = _common_root_as_var, + attrs = { + "var_name": attr.string(), + "srcs": attr.label_list( + allow_files = True, + mandatory = True, + ), + }, +) From 22ce99c0841244fe620ce861f7bfdbc9e1b8f40e Mon Sep 17 00:00:00 2001 From: Mikael Lixenstrand Date: Tue, 9 Apr 2024 14:27:21 +0200 Subject: [PATCH 2/7] Add support for grpcbox_gen --- erlang_grpc.bzl | 7 ++++ private/erlang_grpc.bzl | 88 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 erlang_grpc.bzl create mode 100644 private/erlang_grpc.bzl diff --git a/erlang_grpc.bzl b/erlang_grpc.bzl new file mode 100644 index 00000000..55860ded --- /dev/null +++ b/erlang_grpc.bzl @@ -0,0 +1,7 @@ +load( + "//private:erlang_grpc.bzl", + _erlang_grpc = "erlang_grpc", +) + +def erlang_grpc(**kwargs): + _erlang_grpc(**kwargs) diff --git a/private/erlang_grpc.bzl b/private/erlang_grpc.bzl new file mode 100644 index 00000000..78125629 --- /dev/null +++ b/private/erlang_grpc.bzl @@ -0,0 +1,88 @@ +load("//:erlang_app_info.bzl", "ErlangAppInfo", "flat_deps") +load("//:util.bzl", "path_join") +load(":util.bzl", "erl_libs_contents") +load(":erlang_bytecode.bzl", "unique_dirnames") +load( + "//tools:erlang_toolchain.bzl", + "erlang_dirs", + "maybe_install_erlang", +) + +def _impl(ctx): + outputs = [ + ctx.actions.declare_file(f.name) + for f in ctx.attr.outs + ] + + out_dir = unique_dirnames(outputs) + if len(out_dir) > 1: + fail(ctx.attr.outs, "do not share a common parent directory") + out_dir = out_dir[0] + + erl_libs_dir = ctx.attr.name + "_deps" + + erl_libs_files = erl_libs_contents( + ctx, + deps = flat_deps(ctx.attr.deps), + dir = erl_libs_dir, + ) + + erl_libs_path = path_join(ctx.bin_dir.path, ctx.label.package, erl_libs_dir) + + (erlang_home, _, runfiles) = erlang_dirs(ctx) + + proto_lib = ctx.attr.proto_lib + proto_files = proto_lib[ProtoInfo].transitive_sources + + script = """#!/bin/bash +set -euo pipefail + +{maybe_install_erlang} + +export ERL_LIBS=$PWD/{erl_libs_path} + +set -x +"{erlang_home}"/bin/erl \\ + -noshell \\ + -eval "grpcbox_gen:from_proto(\\"{proto}\\" , \\"{out_dir}\\")" \\ + -s erlang halt + """.format( + proto = ctx.attr.proto, + erl_libs_path = erl_libs_path, + out_dir = out_dir, + maybe_install_erlang = maybe_install_erlang(ctx), + erlang_home = erlang_home, + ) + + inputs = depset( + transitive = [depset(erl_libs_files), runfiles.files, proto_files], + ) + + ctx.actions.run_shell( + command = script, + inputs = inputs, + outputs = outputs, + mnemonic = "ERLGRPC", + ) + + return [DefaultInfo(files = depset(outputs))] + +erlang_grpc = rule( + implementation = _impl, + attrs = { + "proto": attr.string( + mandatory = True, + doc = "The path to the .proto file to generate code from.", + ), + "proto_lib": attr.label( + mandatory = True, + doc = "The proto_library target to generate code from.", + providers = [ProtoInfo], + ), + "deps": attr.label_list(providers = [ErlangAppInfo]), + "outs": attr.output_list( + mandatory = True, + ), + }, + toolchains = ["//tools:toolchain_type"], +) \ No newline at end of file From 68b1c68e1876a27eeca250b0ab827defc219cb46 Mon Sep 17 00:00:00 2001 From: Mikael Lixenstrand Date: Tue, 9 Apr 2024 14:27:35 +0200 Subject: [PATCH 3/7] Make release with relx --- erlang_release.bzl | 7 ++++ private/erlang_release.bzl | 66 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 erlang_release.bzl create mode 100644 private/erlang_release.bzl diff --git a/erlang_release.bzl b/erlang_release.bzl new file mode 100644 index 00000000..9f15f498 --- /dev/null +++ b/erlang_release.bzl @@ -0,0 +1,7 @@ +load( + "//private:erlang_release.bzl", + _erlang_release = "erlang_release", +) + +def erlang_release(**kwargs): + _erlang_release(**kwargs) \ No newline at end of file diff --git a/private/erlang_release.bzl b/private/erlang_release.bzl new file mode 100644 index 00000000..26aefadb --- /dev/null +++ b/private/erlang_release.bzl @@ -0,0 +1,66 @@ +load("//:erlang_app_info.bzl", "ErlangAppInfo", "flat_deps") +load("//:util.bzl", "path_join") +load(":util.bzl", "erl_libs_contents") +load( + "//tools:erlang_toolchain.bzl", + "erlang_dirs", + "maybe_install_erlang", +) + +def _impl(ctx): + erl_libs_dir = ctx.attr.name + "_deps" + + erl_libs_files = erl_libs_contents( + ctx, + deps = flat_deps(ctx.attr.deps), + dir = erl_libs_dir, + ) + + erl_libs_path = path_join(ctx.bin_dir.path, ctx.label.package, erl_libs_dir) + out_dir = path_join(ctx.bin_dir.path, ctx.label.package) + + (erlang_home, _, runfiles) = erlang_dirs(ctx) + + output = ctx.actions.declare_file(ctx.attr.out) + + script = """#!/bin/bash +set -euo pipefail + +{maybe_install_erlang} + +export ERL_LIBS=$PWD/{erl_libs_path} +export LIBDIR="{erl_libs_path}" +export OUTDIR="{out_dir}" + +set -x +"{erlang_home}"/bin/erl \\ + -noshell \\ + -eval "{release_fun}" \\ + -s erlang halt > /dev/null + """.format( + erl_libs_path = erl_libs_path, + release_fun = ctx.attr.release_fun, + out_dir = out_dir, + maybe_install_erlang = maybe_install_erlang(ctx), + erlang_home = erlang_home, + ) + + ctx.actions.run_shell( + command = script, + inputs = erl_libs_files, + outputs = [output], + mnemonic = "ERLRELEASE", + ) + + + return [DefaultInfo(files = depset([output]))] + +erlang_release = rule( + implementation = _impl, + attrs = { + "release_fun": attr.string(), + "deps": attr.label_list(providers = [ErlangAppInfo]), + "out": attr.string(), + }, + toolchains = ["//tools:toolchain_type"], +) From 515b2dbdacb527d60d269dd1677f210f8dcee091 Mon Sep 17 00:00:00 2001 From: Mikael Lixenstrand Date: Tue, 9 Apr 2024 14:27:48 +0200 Subject: [PATCH 4/7] Support pkg with version --- gazelle/rebar_config_to_json.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gazelle/rebar_config_to_json.sh b/gazelle/rebar_config_to_json.sh index 812f1de6..ee041191 100755 --- a/gazelle/rebar_config_to_json.sh +++ b/gazelle/rebar_config_to_json.sh @@ -70,6 +70,10 @@ mapify_dep({Name, Version, {git = Kind, Remote, Ref}, [raw]}) -> %% other formats mapify_dep({Name, {pkg, _}}) -> #{name => Name, + kind => hex}; +mapify_dep({Name, Version, {pkg, _}}) -> + #{name => Name, + version => Version, kind => hex}. conformErlOpt(Opt) when is_atom(Opt)-> From c7c3d889274b6c74cf7c08403730b3e778dd7ce4 Mon Sep 17 00:00:00 2001 From: Mikael Lixenstrand Date: Tue, 9 Apr 2024 14:28:11 +0200 Subject: [PATCH 5/7] Make relx compliant app --- tools/app_file_tool/src/app_file_tool.erl | 27 +++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/tools/app_file_tool/src/app_file_tool.erl b/tools/app_file_tool/src/app_file_tool.erl index 847ecff0..10ef56e3 100644 --- a/tools/app_file_tool/src/app_file_tool.erl +++ b/tools/app_file_tool/src/app_file_tool.erl @@ -11,14 +11,37 @@ main([KeyString, AppSrc]) -> {ok, [AppInfo]} = file:consult(AppSrc), {application, AppName, Props} = AppInfo, NewProps = lists:keystore(Key, 1, Props, {Key, Value}), - io:format("~tp.~n", [{application, AppName, NewProps}]), + io:format("~tp.~n", [{application, AppName, ensure_relx_compliant(NewProps)}]), halt(); main([AppSrc]) -> {ok, Entries} = io:read(""), {ok, [AppInfo]} = file:consult(AppSrc), {application, AppName, Props} = AppInfo, NewProps = Props ++ Entries, - io:format("~tp.~n", [{application, AppName, NewProps}]), + io:format("~tp.~n", [{application, AppName, ensure_relx_compliant(NewProps)}]), halt(); main(_) -> halt(1). + +ensure_relx_compliant(AppData) -> + ensure_registered(ensure_string_vsn(AppData)). + +%% https://github.com/erlware/relx/issues/32 +ensure_registered(AppData) -> + case lists:keyfind(registered, 1, AppData) of + false -> + [{registered, []} | AppData]; + {registered, _} -> + AppData + end. + +%% https://github.com/for-GET/jesse/blob/master/src/jesse.app.src#L4 +ensure_string_vsn(AppData) -> + case proplists:get_value(vsn, AppData, undefined) of + undefined -> + AppData; + VSN when is_atom(VSN)-> + proplists:delete(vsn, AppData) ++ [{vsn, atom_to_list(VSN)}]; + _ -> + AppData + end. \ No newline at end of file From dd4b73974235eb35753eb7c63d20c21bff622524 Mon Sep 17 00:00:00 2001 From: Mikael Lixenstrand Date: Tue, 9 Apr 2024 14:29:05 +0200 Subject: [PATCH 6/7] Add shebang to scripts --- private/ct.bzl | 4 +++- private/dialyze.bzl | 3 ++- private/eunit.bzl | 4 +++- private/plt.bzl | 3 ++- private/shell.bzl | 5 +++-- private/xref.bzl | 3 ++- private/xref2.bzl | 6 ++++-- 7 files changed, 19 insertions(+), 9 deletions(-) diff --git a/private/ct.bzl b/private/ct.bzl index a8ba28b2..146a06c2 100644 --- a/private/ct.bzl +++ b/private/ct.bzl @@ -118,7 +118,9 @@ def _impl(ctx): log_dir = ct_logdir if ct_logdir != "" else "${TEST_UNDECLARED_OUTPUTS_DIR}" output = ctx.actions.declare_file(ctx.label.name) - script = """set -eo pipefail + script = """#!/bin/bash + +set -eo pipefail {maybe_install_erlang} diff --git a/private/dialyze.bzl b/private/dialyze.bzl index 066667c1..de6dbc04 100644 --- a/private/dialyze.bzl +++ b/private/dialyze.bzl @@ -42,7 +42,8 @@ def _impl(ctx): if not ctx.attr.is_windows: output = ctx.actions.declare_file(ctx.label.name) - script = """set -euo pipefail + script = """#!/bin/bash +set -euo pipefail {maybe_install_erlang} diff --git a/private/eunit.bzl b/private/eunit.bzl index d65d29a1..33f6322f 100644 --- a/private/eunit.bzl +++ b/private/eunit.bzl @@ -113,7 +113,9 @@ def _impl(ctx): test_env_commands.append("export {}=\"{}\"".format(k, v)) output = ctx.actions.declare_file(ctx.label.name) - script = """set -eo pipefail + script = """#!/bin/bash + +set -eo pipefail {maybe_install_erlang} diff --git a/private/plt.bzl b/private/plt.bzl index 7e6e02a2..4828cce7 100644 --- a/private/plt.bzl +++ b/private/plt.bzl @@ -89,7 +89,8 @@ def _impl(ctx): (erlang_home, _, runfiles) = erlang_dirs(ctx) - script = """set -euo pipefail + script = """#!/bin/bash +set -euo pipefail {maybe_install_erlang} diff --git a/private/shell.bzl b/private/shell.bzl index c3da5a53..fbb34f5e 100644 --- a/private/shell.bzl +++ b/private/shell.bzl @@ -29,10 +29,11 @@ def _impl(ctx): if not ctx.attr.is_windows: output = ctx.actions.declare_file(ctx.label.name) - script = """set -euo pipefail - + script = """#!/bin/bash +set -euo pipefail {maybe_install_erlang} + export ERL_LIBS=$PWD/{erl_libs_path} set -x diff --git a/private/xref.bzl b/private/xref.bzl index c0be439d..0b2e39b3 100644 --- a/private/xref.bzl +++ b/private/xref.bzl @@ -51,7 +51,8 @@ def _impl(ctx): if not ctx.attr.is_windows: output = ctx.actions.declare_file(ctx.label.name) - script = """set -euo pipefail + script = """#!/bin/bash +set -euo pipefail {maybe_install_erlang} diff --git a/private/xref2.bzl b/private/xref2.bzl index 56ec0993..e5cf82d9 100644 --- a/private/xref2.bzl +++ b/private/xref2.bzl @@ -105,7 +105,8 @@ def _impl(ctx): if not ctx.attr.is_windows: output = ctx.actions.declare_file(ctx.label.name) - script = """set -euo pipefail + script = """#!/bin/bash +set -euo pipefail {maybe_install_erlang} @@ -206,7 +207,8 @@ def _query_impl(ctx): if not ctx.attr.is_windows: output = ctx.actions.declare_file(ctx.label.name) - script = """set -euo pipefail + script = """#!/bin/bash +set -euo pipefail {maybe_install_erlang} From fc1a29f517a5abde232227654f61610866f1ec0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 16:51:31 +0000 Subject: [PATCH 7/7] Bump golang.org/x/net from 0.17.0 to 0.23.0 in /test Bumps [golang.org/x/net](https://github.com/golang/net) from 0.17.0 to 0.23.0. - [Commits](https://github.com/golang/net/compare/v0.17.0...v0.23.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-type: indirect ... Signed-off-by: dependabot[bot] --- test/go.mod | 6 +++--- test/go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/test/go.mod b/test/go.mod index e9aee16e..7f854ea3 100644 --- a/test/go.mod +++ b/test/go.mod @@ -21,9 +21,9 @@ require ( github.com/go-logr/logr v1.2.3 // indirect github.com/google/go-cmp v0.5.9 // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.7.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/test/go.sum b/test/go.sum index 1f03d599..26cf0a5c 100644 --- a/test/go.sum +++ b/test/go.sum @@ -58,8 +58,8 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -67,11 +67,11 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=