Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .bazelignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ python_basics/integration_tests
starpls/integration_tests
# Should be run from its own directory (separate Module)
bazel/rules/rules_score/test
# Separate local Bazel modules (use @seooc// and @some_other_library// instead)
bazel/rules/rules_score/examples/seooc
bazel/rules/rules_score/examples/some_other_library
2 changes: 1 addition & 1 deletion .github/workflows/deploy_docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y pkg-config libcairo2-dev lcov
sudo apt-get install -y lcov
- name: Determine version
id: version
run: |
Expand Down
12 changes: 8 additions & 4 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,14 @@ jobs:
run: |
cd cr_checker/tests
bazel test //...
- name: Run dependable element examples
run: |
cd bazel/rules/rules_score/examples/seooc
bazel build //...
bazel test //...
cd ../some_other_library
bazel build //...
bazel test //...
rules_score_tests:
runs-on: ubuntu-24.04
permissions:
Expand All @@ -115,10 +123,6 @@ jobs:
repository-cache: true
cache-optimized: true
cache-save: ${{ github.ref == 'refs/heads/main' }}
- name: Install Missing Dependencies
run: |
sudo apt-get update
sudo apt-get install -y libcairo2-dev
- name: Run rules_score tests
run: |
cd bazel/rules/rules_score/test
Expand Down
51 changes: 26 additions & 25 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,38 @@ module(
###############################################################################
# Core Dependencies
###############################################################################
bazel_dep(name = "aspect_rules_py", version = "1.4.0") # py_binary/py_library loads in cli_helper.bzl:13, cr_checker.bzl:16, defs.bzl:16, etc.

bazel_dep(name = "aspect_rules_lint", version = "1.5.3", dev_dependency = True)

bazel_dep(name = "rules_java", version = "8.15.1") # required for dash

bazel_dep(name = "buildifier_prebuilt", version = "8.2.0.2", dev_dependency = True)

## Rules Score
bazel_dep(name = "rules_cc", version = "0.2.14")
bazel_dep(name = "rules_python", version = "1.4.1")
bazel_dep(name = "aspect_rules_py", version = "1.4.0")
bazel_dep(name = "platforms", version = "1.0.0")
bazel_dep(name = "aspect_rules_lint", version = "1.5.3")
bazel_dep(name = "rules_shell", version = "0.5.0")
bazel_dep(name = "rules_java", version = "8.15.1")
bazel_dep(name = "rules_rust", version = "0.68.1-score")
bazel_dep(name = "score_rust_policies", version = "0.0.2")
bazel_dep(name = "bazel_skylib", version = "1.7.1")
bazel_dep(name = "buildifier_prebuilt", version = "8.2.0.2")
bazel_dep(name = "flatbuffers", version = "25.9.23")
bazel_dep(name = "download_utils", version = "1.2.2")
bazel_dep(name = "trlc", version = "3.0.0")
bazel_dep(name = "lobster", version = "1.0.3")
git_override(
module_name = "lobster",
commit = "07382c33f95e22992e0f8788c0537ec06877e51f",
remote = "https://github.com/bmw-software-engineering/lobster.git",
)

bazel_dep(name = "rules_distroless", version = "0.8.0") # For
bazel_dep(name = "googletest", version = "1.17.0.bcr.2")

bazel_dep(name = "toolchains_llvm", version = "1.6.0", dev_dependency = True) # Libclang Tooling

bazel_dep(name = "rules_jvm_external", version = "6.10") # PlantUML

# flatbuffers depends on this transitively, but older grpc-java version
# The main problem is that there the command `bazel mod deps` is broken, which
Expand All @@ -42,7 +61,6 @@ bazel_dep(name = "grpc-java", version = "1.75.0.bcr.1")
###############################################################################
# CC Toolchain
###############################################################################

bazel_dep(name = "score_bazel_cpp_toolchains", version = "0.3.1", dev_dependency = True)

score_gcc = use_extension("@score_bazel_cpp_toolchains//extensions:gcc.bzl", "gcc", dev_dependency = True)
Expand Down Expand Up @@ -184,7 +202,7 @@ python.toolchain(
###############################################################################
pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")

# Main tooling pip
# Python Tooling
[
pip.parse(
envsubst = ["PIP_INDEX_URL"],
Expand All @@ -199,6 +217,7 @@ pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
]
]

# Lobster Bazel
use_repo(pip, "pip_tooling")

[
Expand All @@ -217,6 +236,7 @@ use_repo(pip, "pip_tooling")

use_repo(pip, "pip_lobster_bazel")

# Rules Score Python Deps
[
pip.parse(
envsubst = ["PIP_INDEX_URL"],
Expand Down Expand Up @@ -250,8 +270,6 @@ deb(
# Distroless rootfs providing graphviz + fakechroot for hermetic dot execution
# via //third_party/docs_runtime:dot (exec_in_sysroot).
###############################################################################
bazel_dep(name = "rules_distroless", version = "0.8.0")

# bsdtar (used by //bazel/rules/exec_in_sysroot to extract sysroot archives).
bazel_dep(name = "tar.bzl", version = "0.6.0")

Expand All @@ -268,16 +286,9 @@ register_toolchains(
"//bazel/rules/rules_score:sphinx_default_toolchain",
)

###############################################################################
# Setup Googletest
###############################################################################
bazel_dep(name = "googletest", version = "1.17.0.bcr.2", dev_dependency = True)

###############################################################################
# Blueprint Maven
###############################################################################
bazel_dep(name = "rules_jvm_external", version = "6.10")

maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
maven.install(
name = "blueprint_maven_dependencies",
Expand Down Expand Up @@ -307,14 +318,6 @@ use_repo(maven, "blueprint_maven_dependencies")

use_repo(pip, "manual_analysis_deps")

bazel_dep(name = "trlc", version = "3.0.0")
bazel_dep(name = "lobster", version = "1.0.3")
git_override(
module_name = "lobster",
commit = "07382c33f95e22992e0f8788c0537ec06877e51f",
remote = "https://github.com/bmw-software-engineering/lobster.git",
)

###############################################################################
# Dependencies for AI Checker
###############################################################################
Expand Down Expand Up @@ -350,8 +353,6 @@ use_repo(pip, "pip_ai_checker")
###############################################################################
# LLVM Toolchain
###############################################################################
bazel_dep(name = "toolchains_llvm", version = "1.6.0", dev_dependency = True)

llvm = use_extension(
"@toolchains_llvm//toolchain/extensions:llvm.bzl",
"llvm",
Expand Down
3 changes: 1 addition & 2 deletions bazel/rules/rules_score/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ sphinx_docs_library(

sphinx_module(
name = "rules_score_doc",
testonly = True,
srcs = glob(
[
"docs/**/*.rst",
Expand Down Expand Up @@ -220,9 +221,7 @@ py_binary(
requirement("sphinx_design"),
requirement("myst_parser"),
requirement("readthedocs_sphinx_ext"),
requirement("rst2pdf"),
requirement("sphinxcontrib-umlet"),
requirement("svglib"),
requirement("sphinxcontrib-plantuml"),
],
)
Expand Down
1 change: 1 addition & 0 deletions bazel/rules/rules_score/docs/integration_guide.rst
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@ The Bazel rule sets one variable:
- Content
* - ``GRAPHVIZ_DOT``
- Path to the ``dot`` binary

The value points to the hermetic wrapper executable. The wrapper resolves and
executes graphviz from the sysroot itself, so no custom ``LD_LIBRARY_PATH`` /
``GVBINDIR`` wiring is required in the Sphinx action.
Expand Down
5 changes: 1 addition & 4 deletions bazel/rules/rules_score/docs/tooling_architecture.rst
Original file line number Diff line number Diff line change
Expand Up @@ -334,14 +334,11 @@ The ``fmea`` rule drives three actions, all reading the input artifacts above:
The lobster outputs travel separately on ``AnalysisInfo.lobster_files``
(``failuremodes.lobster``, ``controlmeasures.lobster``, ``root_causes.lobster``)
into the ``dependability_analysis`` traceability report.
to the outer index toctree. ``fmea`` uses this for the ``detail_*.rst``
sub-pages, which are referenced from the inner ``.. toctree::`` inside
``fmea.rst`` rather than from the section index.

.. _hermetic-tool-path-resolution:

Hermetic tool path resolution
----------------
------------------------------

Background: Bazel action environment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Expand Down
8 changes: 8 additions & 0 deletions bazel/rules/rules_score/examples/seooc/.bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Copyright (c) 2026 Contributors to the Eclipse Foundation
#
# SPDX-License-Identifier: Apache-2.0

common --registry=https://raw.githubusercontent.com/eclipse-score/bazel_registry/main/
common --registry=https://bcr.bazel.build

common --extra_toolchains=//bazel/toolchains:seooc_libclang_toolchain
1 change: 1 addition & 0 deletions bazel/rules/rules_score/examples/seooc/.bazelversion
29 changes: 15 additions & 14 deletions bazel/rules/rules_score/examples/seooc/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
# *******************************************************************************

load(
"//bazel/rules/rules_score:rules_score.bzl",
"@score_tooling//bazel/rules/rules_score:rules_score.bzl",
"component",
"dependability_analysis",
"dependable_element",
Expand All @@ -22,48 +22,49 @@ cc_library(
name = "sample_library",
visibility = ["//visibility:public"],
deps = [
"//bazel/rules/rules_score/examples/seooc/unit_1:unit_1_lib",
"//bazel/rules/rules_score/examples/seooc/unit_2:unit_2_lib",
"//unit_1:unit_1_lib",
"//unit_2:unit_2_lib",
],
)

component(
name = "component_example",
components = [
"//bazel/rules/rules_score/examples/seooc/unit_1:unit_1",
"//bazel/rules/rules_score/examples/seooc/unit_2:unit_2",
"//unit_1:unit_1",
"//unit_2:unit_2",
],
requirements = [
"//bazel/rules/rules_score/examples/seooc/docs/requirements:component_requirements",
"//bazel/rules/rules_score/examples/seooc/docs/requirements:component_requirements_extra",
"//docs/requirements:component_requirements",
"//docs/requirements:component_requirements_extra",
],
tags = ["manual"],
tests = [],
)

dependability_analysis(
name = "sample_dependability_analysis",
arch_design = "//bazel/rules/rules_score/examples/seooc/design:sample_seooc_design",
fmea = ["//bazel/rules/rules_score/examples/seooc/safety_analysis:sample_fmea"],
arch_design = "//design:sample_seooc_design",
fmea = ["//safety_analysis:sample_fmea"],
)

dependable_element(
name = "safety_software_seooc_example",
# Chain-forward received AoUs that this element cannot handle itself.
# TimingConstraint from other_seooc is forwarded to dependees (integrator).
aou_forwarding = "aou_forwarding.yaml",
architectural_design = ["//bazel/rules/rules_score/examples/seooc/design:sample_seooc_design"],
assumptions_of_use = ["//bazel/rules/rules_score/examples/seooc/docs:sample_aous"],
architectural_design = ["//design:sample_seooc_design"],
assumptions_of_use = ["//docs:sample_aous"],
components = [":component_example"],
dependability_analysis = [
":sample_dependability_analysis",
],
glossary = ["//bazel/rules/rules_score/examples/seooc/docs:glossary"],
docs_prefix = "bazel/rules/rules_score/docs/sphinx/",
glossary = ["//docs:glossary"],
integrity_level = "B",
requirements = [
"//bazel/rules/rules_score/examples/seooc/docs/requirements:feature_requirements",
"//docs/requirements:feature_requirements",
],
tests = [],
visibility = ["//:__subpackages__"],
deps = ["//bazel/rules/rules_score/examples/some_other_library:other_seooc"],
deps = ["@some_other_library//:other_seooc"],
)
50 changes: 50 additions & 0 deletions bazel/rules/rules_score/examples/seooc/MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# *******************************************************************************
# Copyright (c) 2026 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Apache License Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0
#
# SPDX-License-Identifier: Apache-2.0
# *******************************************************************************

module(
name = "seooc",
version = "0.0.0",
)

bazel_dep(name = "score_tooling", version = "0.0.0")
bazel_dep(name = "some_other_library", version = "0.0.0")

local_path_override(
module_name = "score_tooling",
path = "../../../../..",
)

local_path_override(
module_name = "some_other_library",
path = "../some_other_library",
)

# Some other llvm toolchain
bazel_dep(name = "toolchains_llvm", version = "1.6.0", dev_dependency = True)

llvm = use_extension(
"@toolchains_llvm//toolchain/extensions:llvm.bzl",
"llvm",
dev_dependency = True,
)
llvm.toolchain(llvm_version = "19.1.7")
use_repo(llvm, "llvm_toolchain", "llvm_toolchain_llvm")

bazel_dep(name = "trlc", version = "3.0.0")
bazel_dep(name = "googletest", version = "1.17.0.bcr.2")
bazel_dep(name = "lobster", version = "1.0.3")
git_override(
module_name = "lobster",
commit = "07382c33f95e22992e0f8788c0537ec06877e51f",
remote = "https://github.com/bmw-software-engineering/lobster.git",
)
34 changes: 34 additions & 0 deletions bazel/rules/rules_score/examples/seooc/bazel/toolchains/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# *******************************************************************************
# Copyright (c) 2026 Contributors to the Eclipse Foundation
#
# See the NOTICE file(s) distributed with this work for additional
# information regarding copyright ownership.
#
# This program and the accompanying materials are made available under the
# terms of the Apache License Version 2.0 which is available at
# https://www.apache.org/licenses/LICENSE-2.0
#
# SPDX-License-Identifier: Apache-2.0
# *******************************************************************************

load(
"@score_tooling//cpp/libclang:libclang_toolchain.bzl",
"libclang_toolchain",
)

# ============================================================================
# libclang toolchain for the C++ parser used by score rules
# ============================================================================
libclang_toolchain(
name = "seooc_libclang",
cxx_builtin_include = "@llvm_toolchain_llvm//:cxx_builtin_include",
extra_config_site = "@llvm_toolchain_llvm//:extra_config_site",
libclang = "@llvm_toolchain_llvm//:lib/libclang.so",
)

toolchain(
name = "seooc_libclang_toolchain",
toolchain = ":seooc_libclang",
toolchain_type = "@score_tooling//cpp/libclang:libclang_toolchain_type",
visibility = ["//:__subpackages__"],
)
4 changes: 2 additions & 2 deletions bazel/rules/rules_score/examples/seooc/design/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
# SPDX-License-Identifier: Apache-2.0
# *******************************************************************************
load(
"//bazel/rules/rules_score:rules_score.bzl",
"@score_tooling//bazel/rules/rules_score:rules_score.bzl",
"architectural_design",
)
load("//validation/ai_checker:ai_checker.bzl", "architecture_ai_test")
load("@score_tooling//validation/ai_checker:ai_checker.bzl", "architecture_ai_test")

architectural_design(
name = "sample_seooc_design",
Expand Down
Loading
Loading