136 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
load(
 | 
						|
    "@rules_erlang//:util.bzl",
 | 
						|
    "path_join",
 | 
						|
    "windows_path",
 | 
						|
)
 | 
						|
load(
 | 
						|
    "//bazel/elixir:elixir_toolchain.bzl",
 | 
						|
    "elixir_dirs",
 | 
						|
    "erlang_dirs",
 | 
						|
    "maybe_install_erlang",
 | 
						|
)
 | 
						|
 | 
						|
def _impl(ctx):
 | 
						|
    (erlang_home, _, erlang_runfiles) = erlang_dirs(ctx)
 | 
						|
    (elixir_home, elixir_runfiles) = elixir_dirs(ctx, short_path = True)
 | 
						|
 | 
						|
    package_dir = path_join(
 | 
						|
        ctx.label.workspace_root,
 | 
						|
        ctx.label.package,
 | 
						|
    )
 | 
						|
 | 
						|
    if not ctx.attr.is_windows:
 | 
						|
        output = ctx.actions.declare_file(ctx.label.name)
 | 
						|
        script = """set -euo pipefail
 | 
						|
 | 
						|
{maybe_install_erlang}
 | 
						|
 | 
						|
if [[ "{elixir_home}" == /* ]]; then
 | 
						|
    ABS_ELIXIR_HOME="{elixir_home}"
 | 
						|
else
 | 
						|
    ABS_ELIXIR_HOME=$PWD/{elixir_home}
 | 
						|
fi
 | 
						|
 | 
						|
export PATH="$ABS_ELIXIR_HOME"/bin:"{erlang_home}"/bin:${{PATH}}
 | 
						|
 | 
						|
export LANG="en_US.UTF-8"
 | 
						|
export LC_ALL="en_US.UTF-8"
 | 
						|
 | 
						|
INITIAL_DIR="$(pwd)"
 | 
						|
 | 
						|
if [ ! -f ${{INITIAL_DIR}}/{package_dir}/test/test_helper.exs ]; then
 | 
						|
    echo "test_helper.exs cannot be found. 'bazel clean' might fix this."
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
cp -r ${{INITIAL_DIR}}/{package_dir}/config ${{TEST_UNDECLARED_OUTPUTS_DIR}}
 | 
						|
cp -r ${{INITIAL_DIR}}/{package_dir}/lib ${{TEST_UNDECLARED_OUTPUTS_DIR}}
 | 
						|
cp -r ${{INITIAL_DIR}}/{package_dir}/test ${{TEST_UNDECLARED_OUTPUTS_DIR}}
 | 
						|
cp    ${{INITIAL_DIR}}/{package_dir}/mix.exs ${{TEST_UNDECLARED_OUTPUTS_DIR}}
 | 
						|
cp    ${{INITIAL_DIR}}/{package_dir}/.formatter.exs ${{TEST_UNDECLARED_OUTPUTS_DIR}}
 | 
						|
 | 
						|
cd ${{TEST_UNDECLARED_OUTPUTS_DIR}}
 | 
						|
 | 
						|
export IS_BAZEL=true
 | 
						|
export HOME=${{PWD}}
 | 
						|
export MIX_ENV=test
 | 
						|
export ERL_COMPILER_OPTIONS=deterministic
 | 
						|
set -x
 | 
						|
"${{ABS_ELIXIR_HOME}}"/bin/mix format --check-formatted
 | 
						|
""".format(
 | 
						|
            maybe_install_erlang = maybe_install_erlang(ctx, short_path = True),
 | 
						|
            erlang_home = erlang_home,
 | 
						|
            elixir_home = elixir_home,
 | 
						|
            package_dir = package_dir,
 | 
						|
        )
 | 
						|
    else:
 | 
						|
        output = ctx.actions.declare_file(ctx.label.name + ".bat")
 | 
						|
        script = """@echo off
 | 
						|
:: set LANG="en_US.UTF-8"
 | 
						|
:: set LC_ALL="en_US.UTF-8"
 | 
						|
 | 
						|
set PATH="{elixir_home}\\bin";"{erlang_home}\\bin";%PATH%
 | 
						|
 | 
						|
set OUTPUTS_DIR=%TEST_UNDECLARED_OUTPUTS_DIR:/=\\%
 | 
						|
 | 
						|
:: robocopy exits non-zero when files are copied successfully
 | 
						|
:: https://social.msdn.microsoft.com/Forums/en-US/d599833c-dcea-46f5-85e9-b1f028a0fefe/robocopy-exits-with-error-code-1?forum=tfsbuild
 | 
						|
robocopy {package_dir}\\config %OUTPUTS_DIR%\\config /E /NFL /NDL /NJH /NJS /nc /ns /np
 | 
						|
robocopy {package_dir}\\lib %OUTPUTS_DIR%\\lib /E /NFL /NDL /NJH /NJS /nc /ns /np
 | 
						|
robocopy {package_dir}\\test %OUTPUTS_DIR%\\test /E /NFL /NDL /NJH /NJS /nc /ns /np
 | 
						|
copy {package_dir}\\mix.exs %OUTPUTS_DIR%\\mix.exs || goto :error
 | 
						|
copy {package_dir}\\.formatter.exs %OUTPUTS_DIR%\\.formatter.exs || goto :error
 | 
						|
 | 
						|
cd %OUTPUTS_DIR% || goto :error
 | 
						|
 | 
						|
set ERL_COMPILER_OPTIONS=deterministic
 | 
						|
set MIX_ENV=test
 | 
						|
"{elixir_home}\\bin\\mix" format --check-formatted || goto :error
 | 
						|
goto :EOF
 | 
						|
:error
 | 
						|
exit /b 1
 | 
						|
""".format(
 | 
						|
            erlang_home = windows_path(erlang_home),
 | 
						|
            elixir_home = windows_path(elixir_home),
 | 
						|
            package_dir = windows_path(ctx.label.package),
 | 
						|
        )
 | 
						|
 | 
						|
    ctx.actions.write(
 | 
						|
        output = output,
 | 
						|
        content = script,
 | 
						|
    )
 | 
						|
 | 
						|
    runfiles = ctx.runfiles(
 | 
						|
        files = ctx.files.srcs + ctx.files.data,
 | 
						|
    ).merge_all([
 | 
						|
        erlang_runfiles,
 | 
						|
        elixir_runfiles,
 | 
						|
    ])
 | 
						|
 | 
						|
    return [DefaultInfo(
 | 
						|
        runfiles = runfiles,
 | 
						|
        executable = output,
 | 
						|
    )]
 | 
						|
 | 
						|
rabbitmqctl_check_formatted_private_test = rule(
 | 
						|
    implementation = _impl,
 | 
						|
    attrs = {
 | 
						|
        "is_windows": attr.bool(mandatory = True),
 | 
						|
        "srcs": attr.label_list(allow_files = [".ex", ".exs"]),
 | 
						|
        "data": attr.label_list(allow_files = True),
 | 
						|
    },
 | 
						|
    toolchains = [
 | 
						|
        "//bazel/elixir:toolchain_type",
 | 
						|
    ],
 | 
						|
    test = True,
 | 
						|
)
 | 
						|
 | 
						|
def rabbitmqctl_check_formatted_test(**kwargs):
 | 
						|
    rabbitmqctl_check_formatted_private_test(
 | 
						|
        is_windows = select({
 | 
						|
            "@bazel_tools//src/conditions:host_windows": True,
 | 
						|
            "//conditions:default": False,
 | 
						|
        }),
 | 
						|
        **kwargs
 | 
						|
    )
 |