Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
459cfab
Current library state
arminzavada Mar 14, 2026
2d8eec2
Fixed spacecraft model flow
arminzavada Mar 15, 2026
b36d57d
Reformatted spacecraft model
arminzavada Mar 15, 2026
3b1f6f6
Added additional verification cases
arminzavada Mar 15, 2026
23dc717
Some refactorings
arminzavada Mar 15, 2026
2178ad7
Updated Theta to 6.27.17
arminzavada Mar 15, 2026
9ff8952
Implemented EF and AG CTL operators
arminzavada Mar 15, 2026
1fc1456
Merge branch 'refs/heads/main' into models26-finalization
arminzavada Mar 15, 2026
10d9277
Extracted resource set cloning from compilation scope manager
arminzavada Mar 16, 2026
399dddc
Implemented Semantifyr loader for verification related tasks
arminzavada Mar 16, 2026
28f49e7
Extracted test case streaming
arminzavada Mar 16, 2026
bffa943
Fixed relative path bug
arminzavada Mar 16, 2026
5c441dd
Added logging runtime
arminzavada Mar 16, 2026
d73f7b6
Renamed sysmlv2-frontend to sysmlv2-semantics
arminzavada Mar 16, 2026
4cb6841
Extracted gamma transformation from gamma-cli
arminzavada Mar 16, 2026
1dd7f01
Added shutdown hook for verifiers.
arminzavada Mar 16, 2026
d60f8c0
Added verification unit tests
arminzavada Mar 16, 2026
de1c628
Added timeout to verification call
arminzavada Mar 16, 2026
c7cb916
Added verification case tagging
arminzavada Mar 16, 2026
11d7928
Improved verification case test finding
arminzavada Mar 16, 2026
d1c30a0
Slightly better error handling
arminzavada Mar 17, 2026
67ef7cc
Fixed the spacecraft model
arminzavada Mar 17, 2026
33a3a87
Updated the tested spacecraft semantifyr model
arminzavada Mar 17, 2026
f8e7b8e
Increased the slow test timeout
arminzavada Mar 17, 2026
f38750b
Added CI build check for all tests.
arminzavada Mar 17, 2026
f78bb39
Fixed incorrect name and license.
arminzavada Mar 17, 2026
6401a80
Increased default verification timeout during tests
arminzavada Mar 17, 2026
9e6c31d
Added theta shell autodownload
arminzavada Mar 20, 2026
6f19a1f
Fixed executor check crashing without Docker
arminzavada Mar 20, 2026
fe774c2
Fixed Theta erroring when .err file has warnings
arminzavada Mar 20, 2026
1f0d11b
Slightly better error handling
arminzavada Mar 20, 2026
85b8f94
Rename verification build to run-verification
arminzavada Mar 20, 2026
8af1df8
Fixed xtext generation on Windows
arminzavada Mar 20, 2026
3f51ec4
Docker is only valid if we can run the image
arminzavada Mar 20, 2026
4f1732e
Removed the incorrect startScript
arminzavada Mar 20, 2026
a9e0785
Inter-project dependency is correctly configured now
arminzavada Mar 20, 2026
e23af6d
Run formatting
arminzavada Mar 20, 2026
0e72009
Simplified inline-if calls
arminzavada Mar 20, 2026
3592642
Added domain-based instance collection
arminzavada Mar 20, 2026
a092003
Added todo comment
arminzavada Mar 20, 2026
7f68577
Updated checked constraint
arminzavada Mar 20, 2026
a9aab02
Added sysmlv2-frontend as a submodule
arminzavada Mar 24, 2026
acc3034
Updated used libraries
arminzavada Mar 24, 2026
b0bf3dc
Clone libraries automatically
arminzavada Mar 24, 2026
f9871c4
Implemented EF and AG CTL operators
arminzavada Mar 24, 2026
b6c3c3a
Sync the sysml-2ls cli to the semantics
arminzavada Mar 24, 2026
48956f4
Added docker plugin
arminzavada Mar 24, 2026
175b1ee
Added the semantifyr extensions to cli
arminzavada Mar 24, 2026
e22bfb3
Fixed cli not being automatically run
arminzavada Mar 24, 2026
0c5c894
Automated SysML compilation during tests
arminzavada Mar 24, 2026
f6de058
Added build task as dependency.
arminzavada Mar 24, 2026
00ab319
Added license to .gitmodules file
arminzavada Mar 24, 2026
e132405
Specified the .vsix file directly
arminzavada Mar 24, 2026
df8e48a
Checkout action should use submodules
arminzavada Mar 24, 2026
3568191
Removed setup-node step.
arminzavada Mar 24, 2026
365d2b3
Disabled slow tests for now.
arminzavada Mar 24, 2026
0cef7d1
Removed sysml-2ls submodule
arminzavada Mar 24, 2026
c1a7d36
Updated the sysml-2ls module build
arminzavada Mar 24, 2026
6333f9c
Added npm service to semantifyr-vscode as well
arminzavada Mar 24, 2026
563a3d9
Updated sysml-2ls
arminzavada Mar 24, 2026
cef9934
Fixed library cloning
arminzavada Mar 24, 2026
138d73c
Set https repo url instead of ssh
arminzavada Mar 24, 2026
a20184c
Removed accidental second client
arminzavada Mar 24, 2026
297ceb2
Removed unused commands
arminzavada Mar 24, 2026
e980699
Only bundle semantifyr extension
arminzavada Mar 24, 2026
bcf6f8c
Added error redirect
arminzavada Mar 24, 2026
205045f
Fixed clone script on Windows
arminzavada Mar 24, 2026
c8d2603
Upgraded sysmlv2-frontend
arminzavada Mar 24, 2026
15121fb
Test models are also cloned
arminzavada Mar 24, 2026
639cf26
Updated vscode server
arminzavada Mar 24, 2026
cd2a365
Changed ordering of providers
arminzavada Mar 24, 2026
4630376
Theta verifier is supposed to throw an exception when errored
arminzavada Mar 25, 2026
dc33d94
Run the mjs file directly
arminzavada Mar 25, 2026
df20b38
Added additional test cases
arminzavada Mar 26, 2026
fe059a2
Fixed checkout of partial repo
arminzavada Mar 26, 2026
4a5bfbf
Added additional verification cases and full spacecraft
arminzavada Mar 26, 2026
0724e3f
Enhanced artifact management
arminzavada Mar 26, 2026
a9a4b58
Added portfolio configuration
arminzavada Mar 26, 2026
54bc8a3
Performed code reformating
arminzavada Mar 26, 2026
dea6322
Fixed incorrect uri
arminzavada Mar 26, 2026
d588f13
Extended the allotted time for the full model
arminzavada Mar 26, 2026
0c98da2
Increased ram of theta script
arminzavada Mar 27, 2026
4132214
Added additional logging information to verification
arminzavada Mar 27, 2026
8a3ba7a
Fixed qualified identifier value conv.
arminzavada Mar 27, 2026
e68d590
Increased the max JVM memory to 20G
arminzavada Mar 27, 2026
e9e25b8
Added extra logging information
arminzavada Mar 28, 2026
f73955c
Updated theta jvm parameters
arminzavada Mar 28, 2026
a4cf282
Added error logs
arminzavada Mar 28, 2026
211c05a
Fixed verification time including witness creation
arminzavada Mar 28, 2026
39d3061
Use 30 minute timeout everywhere
arminzavada Mar 29, 2026
37b3b70
Moved the timing information into the results
arminzavada Mar 29, 2026
467bc45
Merged metrics and reports
arminzavada Mar 29, 2026
ea4656a
Added a benchmark test
arminzavada Mar 29, 2026
a3eaa36
Do 5 runs for each verification case
arminzavada Mar 29, 2026
4095b89
Current stet
arminzavada Mar 29, 2026
d355b2e
Updated sysmlv2 fronted to f469c8e21fd61348858e7b8cb1a726a6792b57e3
arminzavada Mar 29, 2026
1c3c0ec
Added semantic library tests
arminzavada Mar 29, 2026
92dd012
Added example sysmlv2 trace model
arminzavada Mar 29, 2026
8f76cdb
Collect the raw cases
arminzavada Mar 29, 2026
d33a290
Added support for accept when triggers
arminzavada Mar 29, 2026
1e36cf9
Parallel states can also have entry/exit actions
arminzavada Mar 29, 2026
f0d23b5
Added additional models
arminzavada Mar 29, 2026
88e63da
Added benchmark task
arminzavada Mar 29, 2026
f3534ea
Added benchmark test
arminzavada Mar 29, 2026
470b2c8
Do not run benchmarks
arminzavada Mar 29, 2026
bd4d059
Added top-down variant
arminzavada Mar 29, 2026
3146696
Enable relevant models in the benchmark
arminzavada Mar 29, 2026
ca83694
Use the correct models
arminzavada Mar 29, 2026
2bc3577
Removed the stm21 and stm31 models
arminzavada Mar 30, 2026
6a9f18c
Moved the top-down library
arminzavada Mar 30, 2026
76f0808
Added some readmes
arminzavada Mar 30, 2026
4c1f22d
Added comments about theta
arminzavada Mar 30, 2026
41c3142
Added log4j2.properties to log to files
arminzavada Mar 30, 2026
6a41473
Use consistent JVM parameters
arminzavada Mar 30, 2026
ebb13b5
Removed slow verification CI step
arminzavada Mar 30, 2026
a5e130a
Removed extra flags
arminzavada Mar 30, 2026
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
48 changes: 14 additions & 34 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,42 +19,22 @@ jobs:
matrix:
os:
- ubuntu-latest
# - macos-13
- windows-latest
- macos-latest
runs-on: ${{ matrix.os }}
steps:
# - name: Setup Docker on MacOS
# uses: douglascamata/setup-docker-macos-action@v1-alpha
# if: ${{ matrix.os == 'macos-13' }}
- name: Test Docker
run: docker run hello-world
- name: Checkout code
uses: actions/checkout@v6
- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: 25
distribution: adopt
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 22
cache: 'npm'
cache-dependency-path: 'subprojects/semantifyr-vscode/package-lock.json'
- name: Gradle build
run: ./gradlew build
- name: Bundle Extension
run: ./gradlew bundleExtension
- name: Upload Artifacts
if: ${{ matrix.os == 'ubuntu-latest' }}
uses: actions/upload-artifact@v7
with:
path: |
**/build/vscode/
**/build/distributions/
**/build/reports/
**/build/test-results/
- name: Checkout code
uses: actions/checkout@v6
- name: Set up JDK
uses: actions/setup-java@v5
with:
java-version: 25
distribution: adopt
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Gradle build
shell: bash
run: ./gradlew build

reuse-check:
name: REUSE Compliance Check
Expand Down
6 changes: 3 additions & 3 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@
**Project leader** Vince, Molnár <molnar.vince@vik.bme.hu>

Contributors (in alphabetical order):
- Ármin, Zavada <zavadaarmin@edu.bme.hu>
- Marussy, Kristóf <marussy@mit.bme.hu>

- Ármin, Zavada <zavadaarmin@edu.bme.hu>
- Marussy, Kristóf <marussy@mit.bme.hu>
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@ A framework to support the declarative definition of engineering model semantics

Use Java 25 for building.

Run `gradlew build` to assemble the whole project, and execute all automated test, including regression testing and formal verifications. The required environment (e.g., Theta binaries) is automatically constructed by Gradle. Tests should run in a few minutes.
Run `gradlew build` to assemble and test the project, including regression testing and formal verifications. The required environment (e.g., Theta binaries) is automatically constructed by Gradle. Tests should run in 10-20 minutes.

To execute all tests (even extremely slow, several days long tests!), run `gradlew allTests`.
To execute slow verification cases (the longest may take ~1 hour), run `gradlew testSlowVerificationCases`.

Or run `gradlew allTests` for all tests.

NOTE: Verification tests use Docker to run Theta. To run the build locally, ensure you have docker installed!

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ plugins {
application
}

tasks.startScripts {
classpath = files("%APP_HOME%/lib/*")
}

val distributionOutput by configurations.creating {
isCanBeConsumed = true
isCanBeResolved = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ package hu.bme.mit.semantifyr.gradle.conventions

import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.kotlin.dsl.registering

plugins {
`java-library`
Expand Down Expand Up @@ -39,8 +38,12 @@ java.toolchain {
}

tasks {
// TODO: refactor tests to use test suites
test {
useJUnitPlatform {
// we should use source sets instead
excludeTags("benchmark")
excludeTags("verification")
excludeTags("slow")
}

Expand All @@ -52,17 +55,8 @@ tasks {
finalizedBy(tasks.jacocoTestReport)
}

val allTests by tasks.registering(Test::class) {
useJUnitPlatform()

minHeapSize = "512m"
maxHeapSize = "4G"
testLogging.showStandardStreams = true

finalizedBy(tasks.jacocoTestReport)
}

jacocoTestReport {
inputs.files(test.get().outputs)
executionData(test.get())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
/*
* SPDX-FileCopyrightText: 2026 The Semantifyr Authors
*
* SPDX-License-Identifier: EPL-2.0
*/

package hu.bme.mit.semantifyr.gradle.conventions

import org.gradle.api.tasks.testing.logging.TestExceptionFormat

plugins {
id("hu.bme.mit.semantifyr.gradle.conventions.jvm")
}

val thetaClasspath by configurations.creating {
isCanBeConsumed = false
isCanBeResolved = true
}

dependencies {
thetaClasspath(project(":theta-wrapper", configuration = "thetaOutput"))
}

/*
* Simple Build service that acts as a lock or throttling device preventing parallel execution
*/
abstract class VerificationTestService : BuildService<BuildServiceParameters.None>

val verificationTestServiceName = "verificationTestService"
val verificationTestServiceProvider = gradle.sharedServices.registerIfAbsent(verificationTestServiceName, VerificationTestService::class) {
// only allow at most 1 verification task per Gradle build
maxParallelUsages.set(1)
}

tasks {
val testVerificationCases by tasks.registering(Test::class) {
inputs.files(thetaClasspath)

group = "verification"

useJUnitPlatform {
// we should use source sets instead
excludeTags("benchmark")
includeTags("verification")
excludeTags("slow")
}

testClassesDirs = sourceSets.test.get().output.classesDirs
classpath = sourceSets.test.get().runtimeClasspath

usesService(verificationTestServiceProvider)

minHeapSize = "512m"
maxHeapSize = "4G"
testLogging.showStandardStreams = true
testLogging.exceptionFormat = TestExceptionFormat.FULL

maxParallelForks = 1

val thetaCliPath = project(":theta-wrapper").layout.buildDirectory.dir("theta-xsts-cli").get().asFile.absolutePath
val existingPath = environment["PATH"] ?: System.getenv("PATH") ?: ""
environment("PATH", "$thetaCliPath${File.pathSeparator}$existingPath")

shouldRunAfter(test)
finalizedBy(jacocoTestReport)
}

val testSlowVerificationCases by tasks.registering(Test::class) {
inputs.files(thetaClasspath)

group = "verification"

useJUnitPlatform {
// we should use source sets instead
excludeTags("benchmark")
// includeTags("verification")
includeTags("slow")
}

testClassesDirs = sourceSets.test.get().output.classesDirs
classpath = sourceSets.test.get().runtimeClasspath

usesService(verificationTestServiceProvider)

minHeapSize = "512m"
maxHeapSize = "4G"
testLogging.showStandardStreams = true
testLogging.exceptionFormat = TestExceptionFormat.FULL

val thetaCliPath = project(":theta-wrapper").layout.buildDirectory.dir("theta-xsts-cli").get().asFile.absolutePath
val existingPath = environment["PATH"] ?: System.getenv("PATH") ?: ""
environment("PATH", "$thetaCliPath${File.pathSeparator}$existingPath")

maxParallelForks = 1
}

val allTests by tasks.registering(DefaultTask::class) {
group = "verification"

dependsOn(test)
dependsOn(testVerificationCases)
dependsOn(testSlowVerificationCases)
}

jacocoTestReport {
inputs.files(testVerificationCases.get().outputs)
executionData(testVerificationCases.get())
}

check {
inputs.files(testVerificationCases.get().outputs)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
package hu.bme.mit.semantifyr.gradle

import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.kotlin.dsl.the

plugins {
id("hu.bme.mit.semantifyr.gradle.mwe2")
Expand Down Expand Up @@ -66,7 +65,7 @@ val generateXtextLanguage by tasks.registering(JavaExec::class) {
outputs.dir(extension.testFixtureGenPath)
outputs.dir(extension.ideOutput)

args(extension.mweFile.asFile.get(), "-p", "rootPath=/$projectDir/..")
args(extension.mweFile.get(), "-p", "rootPath=/$projectDir/..")
}

artifacts {
Expand Down Expand Up @@ -99,7 +98,7 @@ tasks {
interface XtextPluginConfiguration {
val genPath: DirectoryProperty
val testFixtureGenPath: DirectoryProperty
val mweFile: RegularFileProperty
val xtextFile: RegularFileProperty
val mweFile: Property<String>
val xtextFile: Property<String>
val ideOutput: DirectoryProperty
}
3 changes: 2 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ org.gradle.jvmargs=-Xmx2048M
org.gradle.cache=true
org.gradle.configuration-cache=true
org.gradle.parallel=true
thetaVersion=6.5.2
thetaXstsCliVersion=6.27.14
version=0.1.0
9 changes: 5 additions & 4 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
ecore = "2.41.0"
junit = "6.0.3"
assertj = "3.27.7"
junitplatform = "6.0.3"
mockito = "5.21.0"
mwe2 = "2.25.0"
slf4j = "2.0.17"
Expand All @@ -20,11 +19,12 @@ viatra = "2.9.1"
dockerJava = "3.7.0"
guice = "7.0.0"
node = "7.1.0"
bmuschkoDocker = "9.4.0"

[libraries]
ecore = { group = "org.eclipse.emf", name = "org.eclipse.emf.ecore", version.ref = "ecore" }
ecore-codegen = { group = "org.eclipse.emf", name = "org.eclipse.emf.codegen.ecore", version.ref = "ecore" }
junit-platform-launcher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junitplatform" }
junit-platform-launcher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junit" }
junit-api = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junit" }
junit-engine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junit" }
junit-params = { group = "org.junit.jupiter", name = "junit-jupiter-params", version.ref = "junit" }
Expand Down Expand Up @@ -52,10 +52,11 @@ viatra-query-runtime = { group = "org.eclipse.viatra", name = "viatra-query-runt
viatra-transformation-runtime = { group = "org.eclipse.viatra", name = "viatra-transformation-runtime", version.ref = "viatra" }
guice = { group = "com.google.inject", name = "guice", version.ref = "guice" }
guice-extensions-assistedinject = { group = "com.google.inject.extensions", name = "guice-assistedinject", version.ref = "guice" }
docker-java-core = { group = "com.github.docker-java" , name = "docker-java-core", version.ref = "dockerJava" }
docker-java-transport = { group = "com.github.docker-java" , name = "docker-java-transport-httpclient5", version.ref = "dockerJava" }
docker-java-core = { group = "com.github.docker-java", name = "docker-java-core", version.ref = "dockerJava" }
docker-java-transport = { group = "com.github.docker-java", name = "docker-java-transport-httpclient5", version.ref = "dockerJava" }

[plugins]
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
gradle-node = { id = "com.github.node-gradle.node", version.ref = "node" }
bmuschko-docker = { id = "com.bmuschko.docker-remote-api", version.ref = "bmuschkoDocker" }
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ fun includeDirectory(dirPath: String) {
}

includeDirectory("subprojects/frontends/gamma")
includeDirectory("subprojects/frontends/sysmlv2")
includeDirectory("subprojects/backends/theta")
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#
# SPDX-FileCopyrightText: 2025 The Semantifyr Authors
#
# SPDX-License-Identifier: EPL-2.0
#

rootLogger.level=WARN
rootLogger.appenderRef.file.ref=FileAppender

appender.file.name=FileAppender
appender.file.type=File
appender.file.fileName=cex.lsp.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n
4 changes: 2 additions & 2 deletions subprojects/backends/theta/cex.lang/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ plugins {
}

xtext {
mweFile = layout.projectDirectory.file("src/main/java/hu/bme/mit/semantifyr/cex/lang/GenerateCex.mwe2")
xtextFile = layout.projectDirectory.file("src/main/java/hu/bme/mit/semantifyr/cex/lang/Cex.xtext")
mweFile = "src/main/java/hu/bme/mit/semantifyr/cex/lang/GenerateCex.mwe2"
xtextFile = "src/main/java/hu/bme/mit/semantifyr/cex/lang/Cex.xtext"
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
*/
public class CexStandaloneSetup extends CexStandaloneSetupGenerated {

public static void doSetup() {
new CexStandaloneSetup().createInjectorAndDoEMFRegistration();
}
public static void doSetup() {
new CexStandaloneSetup().createInjectorAndDoEMFRegistration();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation
*/
public class CexValidator extends AbstractCexValidator {

// public static final String INVALID_NAME = "invalidName";
//
// @Check
Expand All @@ -21,5 +21,5 @@ public class CexValidator extends AbstractCexValidator {
// INVALID_NAME);
// }
// }

}
Loading
Loading