diff --git a/.github/workflows/erlang.yml b/.github/workflows/erlang.yml index 01e1f2c4..e3e913e5 100644 --- a/.github/workflows/erlang.yml +++ b/.github/workflows/erlang.yml @@ -27,3 +27,42 @@ jobs: run: make - name: Check run: make check + + build-bazel: + runs-on: ubuntu-latest + strategy: + matrix: + erlang_version: + - "23.2" + - "24.0" + steps: + - name: CHECKOUT + uses: actions/checkout@v2 + - name: CONFIGURE ERLANG + uses: gleam-lang/setup-erlang@v1.1.2 + with: + otp-version: ${{ matrix.erlang_version }} + - name: CONFIGURE BAZEL + run: | + ERLANG_HOME="$(dirname $(dirname $(which erl)))" + cat << EOF >> .bazelrc + build --@bazel-erlang//:erlang_version=${{ matrix.erlang_version }} + build --@bazel-erlang//:erlang_home=${ERLANG_HOME} + + build --incompatible_strict_action_env + + build --test_strategy=exclusive + EOF + - name: TEST + run: | + bazelisk test //... + - name: RESOVLE TEST LOGS PATH + run: | + echo "::set-output name=LOGS_PATH::$(readlink -f bazel-testlogs)" + id: resolve-test-logs-path + - name: CAPTURE TEST LOGS ON FAILURE + uses: actions/upload-artifact@v2-preview + if: failure() + with: + name: bazel-testlogs-${{ matrix.erlang_version }} + path: ${{ steps.resolve-test-logs-path.outputs.LOGS_PATH }}/* diff --git a/.gitignore b/.gitignore index 19fba377..cc3d6ad3 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ osiris.d *.d *.jar + +/.bazelrc +/bazel-* diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 00000000..6eb500cf --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,63 @@ +load( + "@bazel-erlang//:bazel_erlang_lib.bzl", + "erlang_lib", + "test_erlang_lib", +) +load("@bazel-erlang//:xref.bzl", "xref") +load("@bazel-erlang//:dialyze.bzl", "dialyze", "plt") +load("@bazel-erlang//:ct_sharded.bzl", "ct_suite") + +NAME = "osiris" + +VERSION = "0.1.0" + +APP_ENV = """[ + {data_dir, "/tmp/osiris"}, + {port_range, {6000, 6500}}, + {max_segment_size_chunks, 256000} +]""" + +EXTRA_APPS = [ + "sasl", + "crypto", +] + +DEPS = [ + "@gen_batch_server//:bazel_erlang_lib", +] + +RUNTIME_DEPS = [ + "@seshat//:bazel_erlang_lib", +] + +erlang_lib( + app_env = APP_ENV, + app_name = NAME, + app_version = VERSION, + extra_apps = EXTRA_APPS, + runtime_deps = RUNTIME_DEPS, + deps = DEPS, +) + +test_erlang_lib( + app_env = APP_ENV, + app_name = NAME, + app_version = VERSION, + extra_apps = EXTRA_APPS, + runtime_deps = RUNTIME_DEPS, + deps = DEPS, +) + +xref() + +plt( + name = "base_plt", +) + +dialyze( + plt = ":base_plt", +) + +[ct_suite( + name = f.replace("test/", "").replace(".erl", ""), +) for f in glob(["test/*_SUITE.erl"])] diff --git a/Makefile b/Makefile index 63bf39c0..c34fd526 100644 --- a/Makefile +++ b/Makefile @@ -24,3 +24,5 @@ dep_looking_glass = git https://github.com/rabbitmq/looking-glass.git master DIALYZER_OPTS += --src -r test EUNIT_OPTS = no_tty, {report, {eunit_progress, [colored, profile]}} include $(if $(ERLANG_MK_FILENAME),$(ERLANG_MK_FILENAME),erlang.mk) + +include mk/bazel.mk diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel new file mode 100644 index 00000000..54db209a --- /dev/null +++ b/WORKSPACE.bazel @@ -0,0 +1,32 @@ +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "bazel-erlang", + sha256 = "422a9222522216f59a01703a13f578c601d6bddf5617bee8da3c43e3b299fc4e", + strip_prefix = "bazel-erlang-1.1.0", + urls = ["https://github.com/rabbitmq/bazel-erlang/archive/refs/tags/1.1.0.zip"], +) + +load("@bazel-erlang//:bazel_erlang.bzl", "bazel_erlang_deps") + +bazel_erlang_deps() + +load("@bazel-erlang//:github.bzl", "github_bazel_erlang_lib") +load("@bazel-erlang//:hex_pm.bzl", "hex_pm_bazel_erlang_lib") + +hex_pm_bazel_erlang_lib( + name = "gen_batch_server", + sha256 = "b78679349168f27d7047f3283c9d766760b234d98c762aca9a1907f4ee3fd406", + version = "0.8.6", +) + +github_bazel_erlang_lib( + name = "seshat", + extra_apps = [ + "sasl", + "crypto", + ], + org = "rabbitmq", + ref = "main", + version = "main", +) diff --git a/mk/bazel.mk b/mk/bazel.mk new file mode 100644 index 00000000..ddd9ed5c --- /dev/null +++ b/mk/bazel.mk @@ -0,0 +1,12 @@ +define BAZELRC +build --@bazel-erlang//:erlang_home=$(shell dirname $$(dirname $$(which erl))) +build --@bazel-erlang//:erlang_version=$(shell erl -eval '{ok, Version} = file:read_file(filename:join([code:root_dir(), "releases", erlang:system_info(otp_release), "OTP_VERSION"])), io:fwrite(Version), halt().' -noshell) + +build --incompatible_strict_action_env + +build --test_strategy=exclusive +endef + +export BAZELRC +.bazelrc: + echo "$$BAZELRC" > $@