diff --git a/.bazelversion b/.bazelversion index f4790dbf..e7fdef7e 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -last_rc +8.4.2 diff --git a/.github/workflows/examples.yaml b/.github/workflows/examples.yaml index 931b34d2..ee614616 100644 --- a/.github/workflows/examples.yaml +++ b/.github/workflows/examples.yaml @@ -8,8 +8,8 @@ on: - bump-rbe pull_request: jobs: - examples-basic: - runs-on: ubuntu-20.04 + examples-umbrella: + runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: @@ -23,13 +23,13 @@ jobs: with: otp-version: ${{ matrix.otp }} - name: TEST - working-directory: examples/basic + working-directory: examples/umbrella run: | bazelisk test //... \ --color=yes - name: RESOVLE TEST LOGS PATH if: always() - working-directory: examples/basic + working-directory: examples/umbrella run: | echo "LOGS_PATH=$(readlink -f bazel-testlogs)" >> $GITHUB_OUTPUT id: resolve-test-logs-path @@ -37,5 +37,5 @@ jobs: if: always() uses: actions/upload-artifact@v4 with: - name: bazel-testlogs-examples-basic-${{matrix.otp}} + name: bazel-testlogs-examples-umbrella-${{matrix.otp}} path: ${{ steps.resolve-test-logs-path.outputs.LOGS_PATH }}/* diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index c818c2f6..5e446d1d 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -3,34 +3,11 @@ on: push: branches: - main - - 3.15.x - - 3.16.x - - bump-rbe + - develop pull_request: jobs: - unit-test: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - otp: - - "25.3" - - "26.2" - steps: - - name: CHECKOUT - uses: actions/checkout@v4 - - name: CONFIGURE ERLANG - uses: erlef/setup-beam@v1 - with: - otp-version: ${{ matrix.otp }} - - name: UNIT TEST - run: | - ERLANG_HOME="$(dirname $(dirname $(which erl)))" - bazelisk test //... \ - --noenable_bzlmod \ - --color=yes unit-test-bzlmod: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: @@ -39,7 +16,7 @@ jobs: - "26.2" steps: - name: CHECKOUT - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: CONFIGURE ERLANG uses: erlef/setup-beam@v1 with: @@ -47,44 +24,10 @@ jobs: - name: UNIT TEST run: | ERLANG_HOME="$(dirname $(dirname $(which erl)))" - bazelisk test //... \ + bazelisk build //... \ --color=yes - test: - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - otp: - - "25.3" - - "26.2" - steps: - - name: CHECKOUT - uses: actions/checkout@v4 - - name: CONFIGURE ERLANG - uses: erlef/setup-beam@v1 - with: - otp-version: ${{ matrix.otp }} - - name: TEST - working-directory: test - run: | - ERLANG_HOME="$(dirname $(dirname $(which erl)))" - bazelisk test //... \ - --noenable_bzlmod \ - --color=yes - - name: RESOVLE TEST LOGS PATH - if: always() - working-directory: test - run: | - echo "LOGS_PATH=$(readlink -f bazel-testlogs)" >> $GITHUB_OUTPUT - id: resolve-test-logs-path - - name: CAPTURE TEST LOGS - if: always() - uses: actions/upload-artifact@v4 - with: - name: bazel-testlogs-${{matrix.otp}} - path: ${{ steps.resolve-test-logs-path.outputs.LOGS_PATH }}/* test-bzlmod: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: @@ -93,7 +36,7 @@ jobs: - "26.2" steps: - name: CHECKOUT - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: CONFIGURE ERLANG uses: erlef/setup-beam@v1 with: @@ -111,15 +54,15 @@ jobs: id: resolve-test-logs-path - name: CAPTURE TEST LOGS if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: bazel-testlogs-bzlmod-${{matrix.otp}} path: ${{ steps.resolve-test-logs-path.outputs.LOGS_PATH }}/* test-bzlmod-macos: - runs-on: macos-latest + runs-on: macos-15 steps: - name: CHECKOUT - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: CONFIGURE ERLANG run: | brew install erlang @@ -137,66 +80,40 @@ jobs: id: resolve-test-logs-path - name: CAPTURE TEST LOGS if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: bazel-testlogs-bzlmod-macos path: ${{ steps.resolve-test-logs-path.outputs.LOGS_PATH }}/* - test-bzlmod-windows: - runs-on: windows-latest - strategy: - fail-fast: false - matrix: - otp: - - "25.3" + check-buildbuddy-secret: + runs-on: ubuntu-24.04 + outputs: + has-key: ${{ steps.check.outputs.has-key }} steps: - - name: CHECKOUT - uses: actions/checkout@v4 - - name: CONFIGURE ERLANG - uses: erlef/setup-beam@v1 - with: - otp-version: ${{ matrix.otp }} - - name: CONFIGURE BAZEL - working-directory: test - shell: bash - run: | - cat << EOF >> user.bazelrc - startup --output_user_root=C:/tmp - startup --windows_enable_symlinks - build --enable_runfiles - build --color=yes - build --@rules_erlang//:ct_test_windows_logdir_drive_letter=z - build --jobs=1 - EOF - - name: TEST - working-directory: test - shell: cmd - run: | - bazelisk test //... - - name: RESOVLE TEST LOGS PATH - if: always() - working-directory: test - shell: bash - run: | - LOGS_TAR=$PWD/logs.tar - cd bazel-testlogs - tar -cf $LOGS_TAR * - - name: CAPTURE TEST LOGS - if: always() - uses: actions/upload-artifact@v4 - with: - name: bazel-testlogs-bzlmod-windows-${{matrix.otp}} - path: test/logs.tar + - id: check + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + run: | + if [ -n "$BUILDBUDDY_API_KEY" ]; then + echo "has-key=true" >> $GITHUB_OUTPUT + else + echo "has-key=false" >> $GITHUB_OUTPUT + fi test-bzlmod-internal-erlang: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 + needs: check-buildbuddy-secret + if: needs.check-buildbuddy-secret.outputs.has-key == 'true' steps: - name: CHECKOUT - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: CONFIGURE BAZEL working-directory: test + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} run: | cat << EOF >> user.bazelrc build:buildbuddy --remote_download_minimal build:buildbuddy --color=yes + build:buildbuddy --remote_header=x-buildbuddy-api-key=$BUILDBUDDY_API_KEY EOF - name: BUILD working-directory: test @@ -221,15 +138,15 @@ jobs: id: resolve-test-logs-path - name: CAPTURE TEST LOGS if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: bazel-testlogs-bzlmod-internal-erlang path: ${{ steps.resolve-test-logs-path.outputs.LOGS_PATH }}/* test-bzlmod-coverage: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - name: CHECKOUT - uses: actions/checkout@v4 + uses: actions/checkout@v7 # - name: INSTALL LCOV # run: | # sudo apt-get install -y lcov @@ -254,58 +171,22 @@ jobs: id: resolve-test-logs-path - name: CAPTURE TEST LOGS if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: bazel-testlogs-bzlmod-coverage path: ${{ steps.resolve-test-logs-path.outputs.LOGS_PATH }}/* - test-host-erlang-change-detected: - runs-on: ubuntu-20.04 - steps: - - name: CHECKOUT - uses: actions/checkout@v4 - - name: CONFIGURE ERLANG - uses: erlef/setup-beam@v1 - with: - otp-version: "25.0" - - name: BUILD - working-directory: test - id: before - run: | - bazelisk build :otp_version \ - --color=yes - echo "otp=$(cat bazel-bin/otp_version.txt)" >> $GITHUB_OUTPUT - - name: CONFIGURE ERLANG - uses: erlef/setup-beam@v1 - with: - otp-version: "24.3" - - name: BUILD - working-directory: test - id: after - run: | - bazelisk build :otp_version \ - --color=yes - echo "otp=$(cat bazel-bin/otp_version.txt)" >> $GITHUB_OUTPUT - - name: CHECK - run: | - set -x - if [[ "${{ steps.before.outputs.otp }}" == "${{ steps.after.outputs.otp }}" ]]; then - echo "Fail" - fi summary: needs: - - unit-test - unit-test-bzlmod - - test - test-bzlmod - test-bzlmod-macos - - test-bzlmod-windows - test-bzlmod-internal-erlang - test-bzlmod-coverage - - test-host-erlang-change-detected + if: ${{ !cancelled() }} runs-on: ubuntu-latest steps: - name: SUMMARY run: | - cat << 'EOF' | jq -e 'map(.result == "success") | all(.)' + cat << 'EOF' | jq -e 'map(.result == "success" or .result == "skipped") | all(.)' ${{ toJson(needs) }} EOF diff --git a/MODULE.bazel b/MODULE.bazel index a5b2a055..c3cd40de 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -11,7 +11,7 @@ bazel_dep( bazel_dep( name = "platforms", - version = "0.0.10", + version = "0.0.11", ) erlang_package = use_extension( @@ -53,3 +53,7 @@ register_toolchains( "@erlang_config//external:toolchain_major_minor", "@gmake_config//:default_toolchain", ) + +register_execution_platforms( + "@erlang_config//:erlang_external_platform", +) diff --git a/ct.bzl b/ct.bzl index 8079b619..b3a534f9 100644 --- a/ct.bzl +++ b/ct.bzl @@ -40,7 +40,7 @@ def ct_suite( erlang_bytecode( name = "{}_beam_files".format(suite_name), - hdrs = native.glob(["include/*.hrl", "src/*.hrl"] + additional_hdrs), + hdrs = native.glob(["include/*.hrl", "src/*.hrl"] + additional_hdrs, allow_empty = True), srcs = ["test/{}.erl".format(suite_name)] + additional_srcs, erlc_opts = erlc_opts, dest = "test", @@ -69,7 +69,7 @@ def ct_suite_variant( if suite_name == "": suite_name = name - data_dir_files = native.glob(["test/{}_data/**/*".format(suite_name)]) + data_dir_files = native.glob(["test/{}_data/**/*".format(suite_name)], allow_empty = True) _ct_test( shard_suite = Label("@rules_erlang//tools/shard_suite:shard_suite"), diff --git a/erlang_app.bzl b/erlang_app.bzl index d4853768..d8ef4421 100644 --- a/erlang_app.bzl +++ b/erlang_app.bzl @@ -97,14 +97,17 @@ def _erlang_app( only_srcs = native.glob( ["src/**/*.erl"], exclude = extra_srcs, + allow_empty = True, ) + extra_srcs private_hdrs = native.glob( ["src/**/*.hrl"], exclude = extra_hdrs, + allow_empty = True, ) public_hdrs = native.glob( ["include/**/*.hrl"], exclude = extra_hdrs, + allow_empty = True, ) + extra_hdrs srcs = only_srcs + private_hdrs + public_hdrs @@ -123,7 +126,7 @@ def _erlang_app( beam_files = [":beam_files" if not test else ":test_beam_files"] - if len(native.glob(["ebin/{}.app".format(app_name)])) == 0: + if len(native.glob(["ebin/{}.app".format(app_name)], allow_empty = True)) == 0: if not test: app_file( name = "app_file", @@ -135,7 +138,7 @@ def _erlang_app( app_env = app_env, app_extra_keys = app_extra_keys, extra_apps = extra_apps, - app_src = native.glob(["src/{}.app.src".format(app_name)]), + app_src = native.glob(["src/{}.app.src".format(app_name)], allow_empty = True), modules = beam_files, deps = deps + runtime_deps, dest = "ebin", @@ -146,9 +149,9 @@ def _erlang_app( else: app = "ebin/{}.app".format(app_name) - if len(native.glob(["ebin/{}.appup".format(app_name)])) > 0: + if len(native.glob(["ebin/{}.appup".format(app_name)], allow_empty = True)) > 0: appup = "ebin/{}.appup".format(app_name) - elif len(native.glob(["src/{}.appup".format(app_name)])) > 0: + elif len(native.glob(["src/{}.appup".format(app_name)], allow_empty = True)) > 0: if not test: copy_file( name = "appup", @@ -165,12 +168,14 @@ def _erlang_app( priv = native.glob( ["priv/**/*"], exclude = extra_priv, + allow_empty = True, ) + extra_priv if license_files == None: license_files = native.glob( ["LICENSE*"], exclude = extra_license_files, + allow_empty = True, ) + extra_license_files erlang_app_info( diff --git a/examples/umbrella/apps/greeter/BUILD.bazel b/examples/umbrella/apps/greeter/BUILD.bazel index ece562ab..b32a9b52 100644 --- a/examples/umbrella/apps/greeter/BUILD.bazel +++ b/examples/umbrella/apps/greeter/BUILD.bazel @@ -104,7 +104,7 @@ xref( plt( name = "deps_plt", - apps = DEFAULT_PLT_APPS, + apps = DEFAULT_PLT_APPS + ["eunit", "common_test"], for_target = ":test_erlang_app", ) diff --git a/examples/umbrella/apps/greeter_web/BUILD.bazel b/examples/umbrella/apps/greeter_web/BUILD.bazel index 5fe1f36f..23ab3c57 100644 --- a/examples/umbrella/apps/greeter_web/BUILD.bazel +++ b/examples/umbrella/apps/greeter_web/BUILD.bazel @@ -1,5 +1,5 @@ load("@rules_erlang//:compile_many.bzl", "compile_many") -load("@rules_erlang//:ct.bzl", "ct_test") +load("@rules_erlang//:ct.bzl", "ct_suite") load("@rules_erlang//:dialyze.bzl", "DEFAULT_PLT_APPS", "dialyze", "plt") load("@rules_erlang//:erlang_app_sources.bzl", "erlang_app_sources") load("@rules_erlang//:erlc_opts_file.bzl", "erlc_opts_file") @@ -113,7 +113,7 @@ xref( plt( name = "deps_plt", - apps = DEFAULT_PLT_APPS, + apps = DEFAULT_PLT_APPS + ["eunit", "common_test"], for_target = ":test_erlang_app", ) @@ -128,9 +128,8 @@ eunit( target = ":test_erlang_app", ) -ct_test( +ct_suite( name = "umbrella_smoke_SUITE", - data = [":test_erlang_app"] + glob(["test/umbrella_smoke_SUITE_data/**/*"]), suite_name = "umbrella_smoke_SUITE", size = "small", ) diff --git a/private/ct.bzl b/private/ct.bzl index 3f0fb966..9bc90344 100644 --- a/private/ct.bzl +++ b/private/ct.bzl @@ -39,10 +39,7 @@ def unique_short_dirnames(files): return dirs def code_paths(dep): - return [ - path_join(dep.label.workspace_root, d) if dep.label.workspace_root != "" else d - for d in unique_short_dirnames(dep[ErlangAppInfo].beam) - ] + return unique_short_dirnames(dep[ErlangAppInfo].beam) # Calling ctx.expand_location with short_paths=True gives # "Error in expand_location: Rule in 'private' cannot use private API" @@ -63,7 +60,7 @@ def _impl(ctx): erl_libs_files = erl_libs_contents( ctx, - deps = flat_deps(ctx.attr.deps + ctx.attr.compiled_suites), + deps = flat_deps(ctx.attr.deps), ez_deps = ctx.files.ez_deps, dir = erl_libs_dir, ) @@ -179,7 +176,7 @@ set -x -no_auto_compile \\ -noinput \\ ${{FILTER}} \\ - -dir ebin {pa_args} \\ + -dir test {pa_args} \\ -logdir "{log_dir}" \\ -hidden \\ -sname {sname} ${{COVER_ARGS}} {extra_args} diff --git a/private/extract_app.bzl b/private/extract_app.bzl index 67d50543..a3456a8b 100644 --- a/private/extract_app.bzl +++ b/private/extract_app.bzl @@ -18,6 +18,15 @@ def _impl(ctx): public_hdrs = app_info.source_info.public_hdrs private_hdrs = app_info.source_info.private_hdrs + # Only .beam and .app outputs collide between same-package + # extract_app targets (e.g. a prod :erlang_app and a + # :test_erlang_app extracting the same app), so namespace just + # those under the target name. Header and priv outputs stay at + # their natural location so that consumers stripping the package + # prefix via additional_file_dest_relative_path (e.g. for hex + # packages that ship priv files like relx) keep working. + beam_prefix = ctx.label.name + out_base = None if ctx.attr.copy_headers: for out in app_info.outs: @@ -38,6 +47,7 @@ def _impl(ctx): if not ctx.attr.test and is_test_module: continue dest = ctx.actions.declare_file(path_join( + beam_prefix, "ebin", out.basename, )) diff --git a/repositories/erlang_config.bzl b/repositories/erlang_config.bzl index 82d37049..c4200b91 100644 --- a/repositories/erlang_config.bzl +++ b/repositories/erlang_config.bzl @@ -267,6 +267,14 @@ constraint_value( constraint_setting = ":erlang_internal_external", ) +platform( + name = "erlang_external_platform", + constraint_values = [ + ":erlang_external", + ], + parents = ["@platforms//host"], +) + """ default_installation = erlang_installations[_DEFAULT_EXTERNAL_ERLANG_PACKAGE_NAME] diff --git a/test/.bazelrc b/test/.bazelrc index 1214f439..4c0bd78c 100644 --- a/test/.bazelrc +++ b/test/.bazelrc @@ -26,7 +26,7 @@ build:rbe --crosstool_top=@rbe//cc:toolchain build:rbe --extra_toolchains=@rbe//config:cc-toolchain build:rbe --host_platform=//:erlang_internal_platform -build:rbe --platforms=//:erlang_26_platform +build:rbe --platforms=//:erlang_28_platform build:rbe --host_cpu=k8 build:rbe --cpu=k8 diff --git a/test/BUILD.bazel b/test/BUILD.bazel index ad40cb44..8347fd2c 100644 --- a/test/BUILD.bazel +++ b/test/BUILD.bazel @@ -8,13 +8,13 @@ platform( parents = ["@rbe//config:platform"], ) -# define an alias for @erlang_config//:erlang_26_platform, so +# define an alias for @erlang_config//:erlang_28_platform, so # that it can be passed in the cli/.bazelrc and not encounter # the lack of mapping, as per # https://github.com/bazelbuild/bazel/issues/14852 alias( - name = "erlang_26_platform", - actual = "@erlang_config//:erlang_26_platform", + name = "erlang_28_platform", + actual = "@erlang_config//:erlang_28_platform", ) shell( diff --git a/test/MODULE.bazel b/test/MODULE.bazel index a2c9cd76..96ddc805 100644 --- a/test/MODULE.bazel +++ b/test/MODULE.bazel @@ -5,12 +5,16 @@ module( bazel_dep( name = "platforms", - version = "0.0.7", + version = "0.0.11", ) bazel_dep( name = "rules_erlang", version = "3.0.0", ) +bazel_dep( + name = "rules_shell", + version = "0.6.1", +) local_path_override( module_name = "rules_erlang", path = "..", diff --git a/test/app_file/BUILD.bazel b/test/app_file/BUILD.bazel index 296fb559..30ae10d1 100644 --- a/test/app_file/BUILD.bazel +++ b/test/app_file/BUILD.bazel @@ -1,4 +1,5 @@ -load("@rules_erlang//private:app_file.bzl", "app_file") +load("@rules_erlang//:app_file.bzl", "app_file") +load("@rules_shell//shell:sh_test.bzl", "sh_test") app_file( name = "app_file", diff --git a/test/custom_vars/custom_var_test.sh b/test/custom_vars/custom_var_test.sh index 04da552a..b7b3507f 100755 --- a/test/custom_vars/custom_var_test.sh +++ b/test/custom_vars/custom_var_test.sh @@ -2,4 +2,4 @@ set -ex cat custom_vars/custom_var -grep 'OTP_VERSION: 2[4-6]\.' custom_vars/custom_var +grep -E 'OTP_VERSION: [0-9]+\.[0-9]+' custom_vars/custom_var diff --git a/test/rules_erlang_compiler/test/dot_app_file_SUITE.erl b/test/rules_erlang_compiler/test/dot_app_file_SUITE.erl index 2bd49a45..31f4b37f 100644 --- a/test/rules_erlang_compiler/test/dot_app_file_SUITE.erl +++ b/test/rules_erlang_compiler/test/dot_app_file_SUITE.erl @@ -32,7 +32,8 @@ injects_modules(Config) -> "bazel-out/darwin-fastbuild/bin/deps_dir/basic/src/basic_acceptor.erl", "bazel-out/darwin-fastbuild/bin/deps_dir/basic/ebin/basic_acceptors_sup.beam", "bazel-out/darwin-fastbuild/bin/deps_dir/basic/src/basic_acceptors_sup.erl" - ] + ], + test_modules => [] }, Output = filename:join([DestDir, "basic", "ebin", "basic.app"]), diff --git a/test/shard_suite/BUILD.bazel b/test/shard_suite/BUILD.bazel index 81d1de36..b3d1b1e6 100644 --- a/test/shard_suite/BUILD.bazel +++ b/test/shard_suite/BUILD.bazel @@ -1,9 +1,9 @@ load( - "@rules_erlang//private:app_file.bzl", + "@rules_erlang//:app_file.bzl", "app_file", ) load( - "@rules_erlang//:erlang_bytecode2.bzl", + "@rules_erlang//:erlang_bytecode.bzl", "erlang_bytecode", ) load( @@ -69,29 +69,6 @@ erlang_app_info( beam = [":beam_files"], ) -erlang_app_info( - name = "test_erlang_app", - testonly = True, - srcs = ["@rules_erlang//tools/shard_suite:src/shard_suite.erl"], - app = ":app_file", - app_name = APP_NAME, - beam = [":test_beam_files"], -) - -xref() - -plt( - name = "base_plt", - apps = DEFAULT_PLT_APPS + [ - "crypto", - "common_test", - ], -) - -dialyze( - plt = ":base_plt", -) - erlang_bytecode( name = "test_example_suite_beam", testonly = True, @@ -128,12 +105,39 @@ erlang_bytecode( ], ) -eunit( - name = "eunit", - compiled_suites = [ +erlang_app_info( + name = "test_erlang_app", + testonly = True, + srcs = ["@rules_erlang//tools/shard_suite:src/shard_suite.erl"], + app = ":app_file", + app_name = APP_NAME, + beam = [":test_beam_files"], + test_beam = [ ":test_example_suite_beam", ":test_shard_suite_test_beam", ], +) + +xref() + +plt( + name = "base_plt", + apps = DEFAULT_PLT_APPS + [ + "crypto", + "common_test", + ], +) + +dialyze( + plt = ":base_plt", +) + +eunit( + name = "eunit", + eunit_mods = [ + "example_suite", + "shard_suite_test", + ], target = ":test_erlang_app", ) diff --git a/tools/erlang.bzl b/tools/erlang.bzl index 02ec15d6..06d6a537 100644 --- a/tools/erlang.bzl +++ b/tools/erlang.bzl @@ -8,8 +8,8 @@ load( "erlang_toolchain", ) -DEFAULT_ERLANG_VERSION = "26.0" -DEFAULT_ERLANG_SHA256 = "3ff3c53d7ef9a45b5720e95b8756269c1a1b58eb51accc992ca97522fdb234d4" +DEFAULT_ERLANG_VERSION = "28.1" +DEFAULT_ERLANG_SHA256 = "c7c6fe06a3bf0031187d4cb10d30e11de119b38bdba7cd277898f75d53bdb218" def erlang_toolchain_external(): erlang_constraint = Label("@rules_erlang//platforms:erlang_external") diff --git a/tools/rebar_config_to_erlc_opts/src/rebar_config_to_erlc_opts.erl b/tools/rebar_config_to_erlc_opts/src/rebar_config_to_erlc_opts.erl index baeb6a9f..41cdb602 100644 --- a/tools/rebar_config_to_erlc_opts/src/rebar_config_to_erlc_opts.erl +++ b/tools/rebar_config_to_erlc_opts/src/rebar_config_to_erlc_opts.erl @@ -21,13 +21,18 @@ erlc_opts(RebarConfig) -> lists:flatmap( fun (#{value := V, kind := erlc}) -> - [io_lib:format("+~s", [V])]; + [lists:flatten(io_lib:format("+~s", [V]))]; (_) -> [] end, ErlOpts ); _ -> - ["+debug_info"] + [] end, - lists:delete("+warnings_as_errors", lists:usort(["+deterministic", "+debug_info" | ErlcOpts])). + Defaults = + case lists:member("+no_debug_info", ErlcOpts) of + true -> ["+deterministic"]; + false -> ["+deterministic", "+debug_info"] + end, + lists:delete("+warnings_as_errors", lists:usort(Defaults ++ ErlcOpts)). diff --git a/tools/rules_erlang_compiler/src/types.hrl b/tools/rules_erlang_compiler/src/types.hrl index 2da385c8..514f290a 100644 --- a/tools/rules_erlang_compiler/src/types.hrl +++ b/tools/rules_erlang_compiler/src/types.hrl @@ -13,7 +13,8 @@ erlc_opts_file := string(), app_src := string() | null, srcs := [string()], - outs := [string()] + outs := [string()], + test_modules := [string()] }. -type target_extended() :: #{ @@ -22,6 +23,7 @@ app_src := string() | null, srcs := [string()], outs := [string()], + test_modules := [string()], compile_opts := [compile:option()], dest_dir := file:filename_all() }.