From 26d4dd2ad6d25a158ea5754367c2f053e76825ba Mon Sep 17 00:00:00 2001 From: "Todd V. Jonker" Date: Fri, 20 Mar 2026 15:27:14 -0700 Subject: [PATCH] Use the Structural plugin to detect undesired package dependencies. https://github.com/adrianczuczka/structural Run `./gradlew structuralCheck` to check for violations. Some violations are currently expected. --- .structural.yml | 15 +++++++++++++++ runtime/build.gradle.kts | 8 ++++++++ settings.gradle.kts | 11 +++++++++++ 3 files changed, 34 insertions(+) create mode 100644 .structural.yml diff --git a/.structural.yml b/.structural.yml new file mode 100644 index 00000000..1c097481 --- /dev/null +++ b/.structural.yml @@ -0,0 +1,15 @@ +# Copyright Ion Fusion contributors. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +packages: + - "dev.ionfusion.fusion" + - "dev.ionfusion.runtime.base" + - "dev.ionfusion.runtime.embed" + +rules: + # For each package, declare other packages it can depend on. + "dev.ionfusion.fusion": + - "dev.ionfusion.runtime.base" + - "dev.ionfusion.runtime.embed" + "dev.ionfusion.runtime.embed": + - "dev.ionfusion.runtime.base" diff --git a/runtime/build.gradle.kts b/runtime/build.gradle.kts index 51c29a6d..3699aff7 100644 --- a/runtime/build.gradle.kts +++ b/runtime/build.gradle.kts @@ -5,6 +5,7 @@ plugins { id("buildlogic.fusion-common-conventions") id("buildlogic.java-library-conventions") id("buildlogic.jacoco-conventions") + id("com.adrianczuczka.structural") } dependencies { @@ -77,6 +78,13 @@ tasks.jacocoTestCoverageVerification { } +structural { + // Plugin (@1.1.4) resolves this relative to the root directory, not this project. + // https://github.com/adrianczuczka/structural/issues/5 + config = ".structural.yml" +} + + //============================================================================= // Documentation diff --git a/settings.gradle.kts b/settings.gradle.kts index 157cf469..0d618ad1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,4 +12,15 @@ // Among other things, this becomes the module name in IDEA. rootProject.name = "fusion-java" +pluginManagement { + repositories { + mavenCentral() + } + plugins { + // Enforce our desired inter-package dependency structure. + // https://github.com/adrianczuczka/structural + id("com.adrianczuczka.structural") version "1.1.4" + } +} + include("testing", "runtime", "fusioncli", "sdk")